aboutsummaryrefslogtreecommitdiff
path: root/dgd/rc.uplink
diff options
context:
space:
mode:
Diffstat (limited to 'dgd/rc.uplink')
-rwxr-xr-xdgd/rc.uplink88
1 files changed, 59 insertions, 29 deletions
diff --git a/dgd/rc.uplink b/dgd/rc.uplink
index 239d85f..55b3242 100755
--- a/dgd/rc.uplink
+++ b/dgd/rc.uplink
@@ -26,6 +26,10 @@ END {
echo "$n $1" >> $rt_tables
fi
ip rule add from $3 table $1
+ ip rule add from $5 table $1
+ if [ -n "$6" ]; then
+ ip rule add from $6 table $1
+ fi
ip route add default via $4 table $1
if [ -n "$7" ]; then
ip route add $7 dev $2 src $3 table $1
@@ -40,6 +44,7 @@ gw=$4
ns=$5 $6
net=$7
EOF
+ /etc/rc.d/rc.dgd reload
}
readlinkinfo() {
@@ -51,54 +56,79 @@ readlinkinfo() {
linkcleanup() {
test -f "$linkdir/$1" && rm "$linkdir/$1"
ip route flush table $1
+ /etc/rc.d/rc.dgd reload
}
-#linkup NAME
+#linkup NAME [ IF IP GW NS1 NS2 [NET] ]
linkup() {
local name=$1 link_if link_ip link_gw link_ns link_net
- shift
- if [ -f "$linkdir/$name" ]; then
- readlinkinfo "$linkdir/$name"
- if [ -z "$link_gw" ]; then
- echo >&2 "$0: $linkdir/$name: gw not set"
+ if [ $# -eq 1 ]; then
+ if [ -f "$linkdir/$name" ]; then
+ readlinkinfo "$linkdir/$name"
+ if [ -z "$link_gw" ]; then
+ echo >&2 "$0: $linkdir/$name: gw not set"
+ exit 1
+ fi
+ else
+ echo >&2 "$0: $linkdir/$name: no such file"
exit 1
fi
- ip route add default via $link_gw
- cat > $active <<EOT
+ elif [ $# -lt 6 ]; then
+ echo >&2 "$0: bad number of arguments to linkup"
+ exit 1
+ else
+ link_if=$2
+ link_ip=$3
+ link_gw=$4
+ link_ns="$5 $6"
+ link_net=$7
+ fi
+ ip route add default via $link_gw
+ cat > $active <<EOT
[core]
active = $name
EOT
- echo "$link_ns" | awk '
+ echo "$link_ns" | awk '
BEGIN { print "forwarders {" }
{ for (i = 1; i <= NF; i++) print " " $(i) ";"; }
END { print "};" }' > $forwarders
- rndc reload
- else
- echo >&2 "$0: $linkdir/$name: no such file"
- exit 1
- fi
+ rndc reload || /etc/rc.d/rc.bind restart
+ export link_if
+ /etc/rc.d/rc.iptables -f nat start
}
-#linkdown NAME
+#linkdown NAME [ IF IP GW NS1 NS2 [NET] ]
linkdown() {
local name=$1 link_if link_ip link_gw link_ns link_net link_active
- shift
- if [ -f "$linkdir/$name" ]; then
- readlinkinfo "$linkdir/$name"
- if [ -z "$link_gw" ]; then
- echo >&2 "$0: $linkdir/$name: gw not set"
- exit 1
- fi
- ip route del default via $link_gw
- if [ -r "$active" ]; then
- readlinkinfo $active
- if [ "$link_name" = "$name" ]; then
- rm $active
+ if [ $# -eq 1 ]; then
+ if [ -f "$linkdir/$name" ]; then
+ readlinkinfo "$linkdir/$name"
+ if [ -z "$link_gw" ]; then
+ echo >&2 "$0: $linkdir/$name: gw not set"
+ exit 1
fi
+ else
+ echo >&2 "$0: $linkdir/$name: no such file"
+ exit 1
fi
+ elif [ $# -lt 6 ]; then
+ echo >&2 "$0: bad number of arguments to linkdown"
+ exit 1
else
- echo >&2 "$0: $linkdir/$name: no such file"
- exit 1
+ link_if=$2
+ link_ip=$3
+ link_gw=$4
+ link_ns="$5 $6"
+ link_net=$7
+ fi
+ export link_if
+ /etc/rc.d/rc.iptables -f nat stop
+ ip route del default via $link_gw
+ if [ -r "$active" ]; then
+ readlinkinfo $active
+ if [ "$link_name" = "$name" ]; then
+ rm $active
+ fi
fi
}

Return to:

Send suggestions and report system problems to the System administrator.