From 8a790d97308153c345abfd27e5693b688fc3ba89 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 30 Apr 2012 18:23:52 +0000 Subject: [PATCH] relayd: use an init script instead of a legacy network proto handler (fixes #11276) SVN-Revision: 31542 --- package/relayd/Makefile | 4 +- package/relayd/files/relay.hotplug | 36 +---------- package/relayd/files/relay.init | 97 ++++++++++++++++++++++++++++ package/relayd/files/relay.sh | 100 ----------------------------- 4 files changed, 100 insertions(+), 137 deletions(-) create mode 100644 package/relayd/files/relay.init delete mode 100644 package/relayd/files/relay.sh diff --git a/package/relayd/Makefile b/package/relayd/Makefile index d70bd97b09..c8730a3232 100644 --- a/package/relayd/Makefile +++ b/package/relayd/Makefile @@ -35,8 +35,8 @@ define Package/relayd/install $(INSTALL_BIN) $(PKG_BUILD_DIR)/relayd $(1)/usr/sbin/relayd $(INSTALL_DIR) $(1)/etc/hotplug.d/iface $(INSTALL_DATA) ./files/relay.hotplug $(1)/etc/hotplug.d/iface/30-relay - $(INSTALL_DIR) $(1)/lib/network - $(INSTALL_DATA) ./files/relay.sh $(1)/lib/network/relay.sh + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/relay.init $(1)/etc/init.d/relayd endef $(eval $(call BuildPackage,relayd)) diff --git a/package/relayd/files/relay.hotplug b/package/relayd/files/relay.hotplug index b992fca08c..afffbfeab8 100644 --- a/package/relayd/files/relay.hotplug +++ b/package/relayd/files/relay.hotplug @@ -1,36 +1,2 @@ #!/bin/sh - -# Break recursion -[ "$PROTO" = "relay" ] && exit 0 - -include /lib/network -scan_interfaces - -restart_relayd() { - local cfg="$1" - - local proto - config_get proto "$1" proto - [ "$proto" = "relay" ] || return 0 - - local net networks - config_get networks "$cfg" network - for net in $networks; do - [ "$net" = "$INTERFACE" ] && { - env -i /sbin/ifup "$cfg" & - return 0 - } - done - - local ifn ifnames - config_get ifnames "$cfg" ifname - for ifn in $ifnames; do - [ "$ifn" = "$DEVICE" ] && { - env -i /sbin/ifup "$cfg" & - return 0 - } - done -} - -config_foreach restart_relayd interface - +/etc/init.d/relayd enabled && /etc/init.d/relayd start diff --git a/package/relayd/files/relay.init b/package/relayd/files/relay.init new file mode 100644 index 0000000000..98a38b4eaa --- /dev/null +++ b/package/relayd/files/relay.init @@ -0,0 +1,97 @@ +#!/bin/sh /etc/rc.common +# Copyright (c) 2011-2012 OpenWrt.org +START=80 + +resolve_ifname() { + grep -qs "^ *$1:" /proc/net/dev && { + append args "-I $1" + append ifaces "$1" + } +} + +resolve_network() { + local ifn + config_get ifn "$1" ifname + [ -z "$ifn" ] && return 1 + resolve_ifname "$ifn" + return 0 +} + +start_relay() { + local cfg="$1" + + local args="" + local ifaces="" + + config_get proto "$cfg" proto + [[ "$proto" == relay ]] || return 0 + + SERVICE_DAEMONIZE=1 + SERVICE_WRITE_PID=1 + SERVICE_PID_FILE="/var/run/relay-$cfg.pid" + [ -f "$SERVICE_PID_FILE" ] && { + if grep -q relayd "/proc/$(cat $SERVICE_PID_FILE)/cmdline"; then + return 0 + else + rm -f "$SERVICE_PID_FILE" + fi + } + + local net networks + config_get networks "$cfg" network + for net in $networks; do + resolve_network "$net" || { + return 1 + } + done + + local ifn ifnames + config_get ifnames "$cfg" ifname + for ifn in $ifnames; do + resolve_ifname "$ifn" + done + + local ipaddr + config_get ipaddr "$cfg" ipaddr + [ -n "$ipaddr" ] && append args "-L $ipaddr" + + 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" + + service_start /usr/sbin/relayd $args +} + +stop() { + for pid in /var/run/relay-*.pid; do + SERVICE_PID_FILE="$pid" + service_stop /usr/sbin/relayd + rm -f "$SERVICE_PID_FILE" + done +} + +start() { + include /lib/network + scan_interfaces + config_foreach start_relay interface +} diff --git a/package/relayd/files/relay.sh b/package/relayd/files/relay.sh deleted file mode 100644 index 9cfdbbb1b2..0000000000 --- a/package/relayd/files/relay.sh +++ /dev/null @@ -1,100 +0,0 @@ -# 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 ipaddr - config_get ipaddr "$cfg" ipaddr - [ -n "$ipaddr" ] && append args "-L $ipaddr" - - 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" - - SERVICE_DAEMONIZE=1 \ - SERVICE_WRITE_PID=1 \ - SERVICE_PID_FILE="/var/run/$link.pid" \ - service_start /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_PID_FILE="/var/run/$link.pid" \ - service_stop /usr/sbin/relayd -} -