X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=rrqnet-ifupdown.sh;h=99e45df714d73a79037fea62b5a9357368b270a0;hb=refs%2Fheads%2Fsuites%2Funstable;hp=6c33d5fa38aeb50dda9374eb30333e327926cf8c;hpb=14dc269a84ae307b2e07364183d3d677064e5a85;p=rrq%2Frrqnet.git diff --git a/rrqnet-ifupdown.sh b/rrqnet-ifupdown.sh index 6c33d5f..99e45df 100755 --- a/rrqnet-ifupdown.sh +++ b/rrqnet-ifupdown.sh @@ -18,12 +18,19 @@ [ -z "$IF_RRQNET_PORT" ] && exit 0 # An rrqnet stanza may have the following settings: -# rrqnet_port +# rrqnet_port [ notap ] +# rrqnet_nice # rrqnet_remote -# rrqnet_bridge +# rrqnet_options # rrqnet_log +# rrqnet_bridge +# rrqnet_dhcp + +: ${RRQDAEMON:=/usr/sbin/rrqnet} +: ${NAME:=rrqnet-${IFACE}} -: ${RRQDAEMON:=/usr/local/sbin/rrqnet} +NOTAP="${IF_RRQNET_PORT##notap *}" # empty if 'notap' is used +IF_RRQNET_PORT="${IF_RRQNET_PORT#notap }" #function configure_tap_bridge() { @@ -38,50 +45,88 @@ configure_tap_up() { grep -q "state UP" || ip link set dev $IFACE up } -#function start_cable +############################################################ +## 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 - NAME="rrqnet-$IFACE" + local TAP + TAP="-t $IFACE" + if [ -z "$NOTAP" ] ; then + echo "Note: $IFACE is an rrqnet without local interface" >&2 + TAP="" + else + configure_tap_up || return 1 + configure_tap_bridge || return 1 + fi + [ -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 $IF_RRQNET_REMOTE + $TAP $IF_RRQNET_PORT $IF_RRQNET_REMOTE else - daemon -U -r -n $NAME -E "${IF_RRQNET_LOG#* }" -- \ - $RRQDAEMON ${IF_RRQNET_LOG%% *} $IF_RRQNET_OPTIONS \ - -t $IFACE $IF_RRQNET_PORT $IF_RRQNET_REMOTE + LOG=${IF_RRQNET_LOG#* } + daemon -U -r -a 10 -n $NAME -E "$LOG" -- \ + $RRQDAEMON ${IF_RRQNET_LOG%$LOG} $IF_RRQNET_OPTIONS \ + $TAP $IF_RRQNET_PORT $IF_RRQNET_REMOTE fi } #function start_cable_post_up() { - configure_tap_bridge + 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 } #function stop_cable_post_down() { - NAME="rrqnet-$IFACE" - daemon -n $NAME --stop + [ -z "$NOTAP" ] || ip link del $IFACE } # main script body - case "$MODE-$PHASE" in - start-pre-up) - start_cable_pre_up - ;; - start-post-up) - start_cable_post_up - ;; - stop-pre-down) - : - ;; - stop-post-down) - stop_cable_post_down - ;; + start-pre-up) start_cable_pre_up ;; + start-post-up) start_cable_post_up ;; + stop-pre-down) stop_cable_pre_down ;; + stop-post-down) stop_cable_post_down ;; esac