3 # Control script for starting or stopping an rrqnet virtual cable via
4 # ifup/ifdown. To use this, you need firstly to links to this script
5 # set up as /etc/network/if-pre-up.d/rrqnet and
6 # /etc/network/if-down.d/rrqnet. Secondly, you need a stanza in
7 # /etc/network/interfaces for the cabling tap and its associated
8 # configuration settings.
10 # "rrqnet name" is the primary stanza key, which result in
11 # a creation of a tap by that name, supported by an rrqnet plug
12 # according to the setup in /etc/rrqnet/conf.d/name.conf
14 #echo '===========' >> /tmp/FOO
17 # Verify that it's an rrqnet stanza
18 [ -z "$IF_RRQNET_PORT" ] && exit 0
20 # An rrqnet stanza may have the following settings:
21 # rrqnet_port [ notap ] <port>
23 # rrqnet_remote <remote declaration>
24 # rrqnet_options <options>
25 # rrqnet_log <level> <pathname>
26 # rrqnet_bridge <bridge>
27 # rrqnet_dhcp <options>
29 : ${RRQDAEMON:=/usr/sbin/rrqnet}
30 : ${NAME:=rrqnet-${IFACE}}
32 NOTAP="${IF_RRQNET_PORT##notap *}" # empty if 'notap' is used
33 IF_RRQNET_PORT="${IF_RRQNET_PORT#notap }"
36 configure_tap_bridge() {
37 [ -z "$IF_RRQNET_BRIDGE" ] && return 0
38 brctl show $IF_RRQNET_BRIDGE | grep -wq $IFACE && return 0
39 brctl addif $IF_RRQNET_BRIDGE $IFACE
44 ( ip link show $IFACE 2>/dev/null || ip tuntap add $IFACE mode tap ) | \
45 grep -q "state UP" || ip link set dev $IFACE up
48 ############################################################
50 : ${LEASES:=/var/lib/dhcp/dhclient.$IFACE.leases}
51 : ${DHCPARGS:="-4 -cf /dev/null"}
52 : ${PIDFILE:=/var/run/dhclient.$IFACE}
57 [ -z "$*" ] || DHCPARGS="$*"
58 /sbin/dhclient -pf $PIDFILE $DHCPARGS -lf $LEASES $IFACE
64 [ -z "$*" ] || DHCPARGS="$*"
65 /sbin/dhclient -x -pf $PIDFILE $DHCPARGS -lf $LEASES $IFACE 2>/dev/null
68 ############################################################
69 ## The action functions
72 start_cable_pre_up() {
75 if [ -z "$NOTAP" ] ; then
76 echo "Note: $IFACE is an rrqnet without local interface" >&2
79 configure_tap_up || return 1
80 configure_tap_bridge || return 1
82 [ -z "$IF_RRQNET_NICE" ] || \
83 RRQDAEMON="/usr/bin/nice -n $IF_RRQNET_NICE $RRQDAEMON"
84 if [ -z "$IF_RRQNET_LOG" ] ; then
85 daemon -U -r -a 10 -n $NAME -- \
86 $RRQDAEMON $IF_RRQNET_OPTIONS \
87 $TAP $IF_RRQNET_PORT $IF_RRQNET_REMOTE
89 LOG=${IF_RRQNET_LOG#* }
90 daemon -U -r -a 10 -n $NAME -E "$LOG" -- \
91 $RRQDAEMON ${IF_RRQNET_LOG%$LOG} $IF_RRQNET_OPTIONS \
92 $TAP $IF_RRQNET_PORT $IF_RRQNET_REMOTE
97 start_cable_post_up() {
98 case "$IF_RRQNET_DHCP" in
100 start_dhclient $IF_RRQNET_DHCP
103 : # no or unkown dhcp option
109 stop_cable_pre_down() {
110 case "$IF_RRQNET_DHCP" in
112 stop_dhclient $IF_RRQNET_DHCP
115 : # no or unkown dhcp option
118 daemon -n $NAME --stop
122 stop_cable_post_down() {
123 [ -z "$NOTAP" ] || ip link del $IFACE
127 case "$MODE-$PHASE" in
128 start-pre-up) start_cable_pre_up ;;
129 start-post-up) start_cable_post_up ;;
130 stop-pre-down) stop_cable_pre_down ;;
131 stop-post-down) stop_cable_post_down ;;