renamed script
[rrq/rrqnet.git] / rrqnet-ifupdown.sh
index 27896958f73dea18653436f14e6aec52a31bc9e2..4928312a67868453f90118d2822e96d09b93f4ae 100755 (executable)
 
 # An rrqnet stanza may have the following settings:
 # rrqnet_port <port>
-# rrqnet_renice <nice>
+# rrqnet_nice <nice>
 # rrqnet_remote <remote declaration>
 # rrqnet_options <options>
 # rrqnet_log <level> <pathname>
 # rrqnet_bridge <bridge>
+# rrqnet_dhcp <options>
 
 : ${RRQDAEMON:=/usr/local/sbin/rrqnet}
 : ${NAME:=rrqnet-${IFACE}}
@@ -41,33 +42,79 @@ 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
+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
+}
+
 #function
 stop_cable_post_down() {
     daemon -n $NAME --stop
 }
 
 # 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