diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2011-02-25 23:23:40 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2011-02-25 23:23:40 +0000 |
commit | c16efad4287cd0ec5731058b21aedd2c899bebf1 (patch) | |
tree | 81ea4fd6ff49d56d59453bc6cda803a3970bb337 /package/relayd/files/relay.sh | |
parent | 73468de8d1fad601c5dc6460cc33c02af47c51f8 (diff) | |
download | upstream-c16efad4287cd0ec5731058b21aedd2c899bebf1.tar.gz upstream-c16efad4287cd0ec5731058b21aedd2c899bebf1.tar.bz2 upstream-c16efad4287cd0ec5731058b21aedd2c899bebf1.zip |
relayd: add uci integration
SVN-Revision: 25714
Diffstat (limited to 'package/relayd/files/relay.sh')
-rw-r--r-- | package/relayd/files/relay.sh | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/package/relayd/files/relay.sh b/package/relayd/files/relay.sh new file mode 100644 index 0000000000..3e5e84c870 --- /dev/null +++ b/package/relayd/files/relay.sh @@ -0,0 +1,93 @@ +# relay.sh - Abstract relayd protocol backend +# Copyright (c) 2011 OpenWrt.org + +# Hook into scan_interfaces() to synthesize a .device option +# This is needed for /sbin/ifup to properly dispatch control +# to setup_interface_relay() even if no .ifname is set in +# the configuration. +scan_relay() { + config_set "$1" device "relay-$1" +} + +# No coldplugging needed, relayd will be restarted if one of +# the member interfaces goes up or down +#coldplug_interface_relay() { +# setup_interface_relay "relay-$1" "$1" +#} + +setup_interface_relay() { + local iface="$1" + local cfg="$2" + local link="relay-$cfg" + + local args="" + local ifaces="" + + resolve_ifname() { + grep -qs "^ *$1:" /proc/net/dev && { + append args "-I $1" + append ifaces "$1" + } + } + + resolve_network() { + local ifn + config_get ifn "$1" ifname + resolve_ifname "$ifn" + } + + local net networks + config_get networks "$cfg" network + for net in $networks; do + resolve_network "$net" + done + + local ifn ifnames + config_get ifnames "$cfg" ifname + for ifn in $ifnames; do + resolve_ifname "$ifn" + done + + local gateway + config_get gateway "$cfg" gateway + [ -n "$gateway" ] && append args "-G $gateway" + + local expiry # = 30 + config_get expiry "$cfg" expiry + [ -n "$expiry" ] && append args "-t $expiry" + + local retry # = 5 + config_get retry "$cfg" retry + [ -n "$retry" ] && append args "-p $retry" + + local table # = 16800 + config_get table "$cfg" table + [ -n "$table" ] && append args "-T $table" + + local fwd_bcast # = 1 + config_get_bool fwd_bcast "$cfg" forward_bcast 1 + [ $fwd_bcast -eq 1 ] && append args "-B" + + local fwd_dhcp # = 1 + config_get_bool fwd_dhcp "$cfg" forward_dhcp 1 + [ $fwd_dhcp -eq 1 ] && append args "-D" + + start-stop-daemon -b -S -m -p /var/run/$link.pid \ + -x /usr/sbin/relayd -- $args + + uci_set_state network "$cfg" device "$ifaces" + + env -i ACTION="ifup" DEVICE="$link" INTERFACE="$cfg" PROTO="relay" \ + /sbin/hotplug-call iface +} + +stop_interface_relay() { + local cfg="$1" + local link="relay-$cfg" + + env -i ACTION="ifdown" DEVICE="$link" INTERFACE="$cfg" PROTO="relay" \ + /sbin/hotplug-call iface + + service_kill relayd "/var/run/$link.pid" +} + |