# An rrqnet stanza may have the following settings:
# rrqnet_port <port>
+# rrqnet_nice <nice>
# rrqnet_remote <remote declaration>
-# rrqnet_bridge <bridge>
+# rrqnet_options <options>
# rrqnet_log <level> <pathname>
+# rrqnet_bridge <bridge>
+# rrqnet_dhcp <options>
-: ${RRQDAEMON:=/usr/local/sbin/rrqnet}
+: ${RRQDAEMON:=/usr/sbin/rrqnet}
+: ${NAME:=rrqnet-${IFACE}}
#function
configure_tap_bridge() {
grep -q "state UP" || ip link set dev $IFACE up
}
-#function <env> start_cable <loglevel> <logfile>
+############################################################
+## 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"
+ configure_tap_up || return 1
+ configure_tap_bridge || return 1
+ [ -z "$IF_RRQNET_NICE" ] || \
+ RRQDAEMON="/usr/bin/nice -n $IF_RRQNET_NICE $RRQDAEMON"
if [ -z "$IF_RRQNET_LOG" ] ; then
- daemon -U -r -n $NAME -- \
- $RRQDAEMON -4 $IF_RRQNET_OPTIONS \
- -t $IFACE $IF_RRQNET $IF_RRQNET_REMOTE
+ 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#* }" -- \
- $RRQDAEMON ${IF_RRQNET_LOG%% *} -4 $IF_RRQNET_OPTIONS \
+ 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() {
- 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
+ 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