X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=rrqnet-ifupdown.sh;h=b36131eec9f8c8716615bc535e0df9c7ffa3720c;hb=refs%2Ftags%2F1.4;hp=27896958f73dea18653436f14e6aec52a31bc9e2;hpb=a1c04f2fb24cfc41c5b1803df986617100d467bb;p=rrq%2Frrqnet.git diff --git a/rrqnet-ifupdown.sh b/rrqnet-ifupdown.sh index 2789695..b36131e 100755 --- a/rrqnet-ifupdown.sh +++ b/rrqnet-ifupdown.sh @@ -19,13 +19,14 @@ # An rrqnet stanza may have the following settings: # rrqnet_port -# rrqnet_renice +# rrqnet_nice # rrqnet_remote # rrqnet_options # rrqnet_log # rrqnet_bridge +# rrqnet_dhcp -: ${RRQDAEMON:=/usr/local/sbin/rrqnet} +: ${RRQDAEMON:=/usr/sbin/rrqnet} : ${NAME:=rrqnet-${IFACE}} #function @@ -41,33 +42,80 @@ configure_tap_up() { grep -q "state UP" || ip link set dev $IFACE up } +############################################################ +## DHCP support +: ${LEASES:=/var/lib/dhcp/dhclient.$IFACE.leases} +: ${DHCPARGS:="-4 -cf /dev/null"} +: ${PIDFILE:=/var/run/dhclient.$IFACE} + +#function +start_dhclient() { + shift 1 + [ -z "$*" ] || DHCPARGS="$*" + /sbin/dhclient -pf $PIDFILE $DHCPARGS -lf $LEASES $IFACE +} + +#function +stop_dhclient() { + shift 1 + [ -z "$*" ] || DHCPARGS="$*" + /sbin/dhclient -x -pf $PIDFILE $DHCPARGS -lf $LEASES $IFACE 2>/dev/null +} + +############################################################ +## The action functions + #function start_cable_pre_up() { configure_tap_up || return 1 configure_tap_bridge || return 1 - [ -z "$IF_RRQNET_RENICE" ] || \ - RRQDAEMON="/usr/bin/nice -n $IF_RRQNET_RENICE $RRQDAEMON" + [ -z "$IF_RRQNET_NICE" ] || \ + RRQDAEMON="/usr/bin/nice -n $IF_RRQNET_NICE $RRQDAEMON" if [ -z "$IF_RRQNET_LOG" ] ; then - daemon -U -r -n $NAME -- \ + daemon -U -r -a 10 -n $NAME -- \ $RRQDAEMON $IF_RRQNET_OPTIONS \ -t $IFACE $IF_RRQNET_PORT $IF_RRQNET_REMOTE else - daemon -U -r -n $NAME -E "${IF_RRQNET_LOG#* }" -- \ + daemon -U -r -a 10 -n $NAME -E "${IF_RRQNET_LOG#* }" -- \ $RRQDAEMON ${IF_RRQNET_LOG%% *} $IF_RRQNET_OPTIONS \ -t $IFACE $IF_RRQNET_PORT $IF_RRQNET_REMOTE fi } #function -stop_cable_post_down() { +start_cable_post_up() { + case "$IF_RRQNET_DHCP" in + dhclient*) + start_dhclient $IF_RRQNET_DHCP + ;; + *) + : # no or unkown dhcp option + ;; + esac +} + +#function +stop_cable_pre_down() { + case "$IF_RRQNET_DHCP" in + dhclient*) + stop_dhclient $IF_RRQNET_DHCP + ;; + *) + : # no or unkown dhcp option + ;; + esac daemon -n $NAME --stop } -# main script body +#function +stop_cable_post_down() { + ip link del $IFACE +} +# main script body case "$MODE-$PHASE" in start-pre-up) start_cable_pre_up ;; - start-post-up) : ;; - stop-pre-down) : ;; + start-post-up) start_cable_post_up ;; + stop-pre-down) stop_cable_pre_down ;; stop-post-down) stop_cable_post_down ;; esac