1#!/bin/sh /etc/rc.common 2# Copyright (c) 2011-2012 OpenWrt.org 3 4START=80 5 6USE_PROCD=1 7PROG=/usr/sbin/relayd 8 9validate_proto_relayd() 10{ 11 uci_validate_section network "interface" "${1}" \ 12 'network:list(string)' \ 13 'expiry:uinteger:30' \ 14 'retry:uinteger:5' \ 15 'table:range(0, 65535):16800' \ 16 'forward_bcast:bool:1' \ 17 'forward_dhcp:bool:1' 18} 19 20resolve_ifname() { 21 grep -qs "^ *$1:" /proc/net/dev && { 22 procd_append_param command -I "$1" 23 append ifaces "$1" 24 } 25} 26 27resolve_network() { 28 local ifn 29 fixup_interface "$1" 30 config_get ifn "$1" ifname 31 [ -z "$ifn" ] && return 1 32 resolve_ifname "$ifn" 33} 34 35start_relay() { 36 local cfg="$1" 37 38 local args="" 39 local ifaces="" 40 41 config_get proto "$cfg" proto 42 [ "$proto" = "relay" ] || return 0 43 44 config_get_bool disabled "$cfg" disabled 0 45 [ "$disabled" -gt 0 ] && return 0 46 47 SERVICE_DAEMONIZE=1 48 SERVICE_WRITE_PID=1 49 SERVICE_PID_FILE="/var/run/relay-$cfg.pid" 50 [ -f "$SERVICE_PID_FILE" ] && { 51 if grep -q relayd "/proc/$(cat $SERVICE_PID_FILE)/cmdline"; then 52 return 0 53 else 54 rm -f "$SERVICE_PID_FILE" 55 fi 56 } 57 58 procd_open_instance 59 procd_set_param command "$PROG" 60 61 local net networks 62 config_get networks "$cfg" network 63 for net in $networks; do 64 resolve_network "$net" || { 65 return 1 66 } 67 done 68 69 local ifn ifnames 70 config_get ifnames "$cfg" ifname 71 for ifn in $ifnames; do 72 resolve_ifname "$ifn" 73 done 74 75 local ipaddr 76 config_get ipaddr "$cfg" ipaddr 77 [ -n "$ipaddr" ] && procd_append_param command -L "$ipaddr" 78 79 local gateway 80 config_get gateway "$cfg" gateway 81 [ -n "$gateway" ] && procd_append_param command -G "$gateway" 82 83 local expiry # = 30 84 config_get expiry "$cfg" expiry 85 [ -n "$expiry" ] && procd_append_param command "$expiry" 86 87 local retry # = 5 88 config_get retry "$cfg" retry 89 [ -n "$retry" ] && procd_append_param command -p "$retry" 90 91 local table # = 16800 92 config_get table "$cfg" table 93 [ -n "$table" ] && procd_append_param command -T "$table" 94 95 local fwd_bcast # = 1 96 config_get_bool fwd_bcast "$cfg" forward_bcast 1 97 [ $fwd_bcast -eq 1 ] && procd_append_param command "-B" 98 99 local fwd_dhcp # = 1 100 config_get_bool fwd_dhcp "$cfg" forward_dhcp 1 101 [ $fwd_dhcp -eq 1 ] && procd_append_param command "-D" 102 103 procd_close_instance 104} 105 106service_triggers() 107{ 108 procd_add_reload_trigger "network" 109} 110 111start_service() { 112 include /lib/network 113 config_load network 114 config_foreach start_relay interface 115} 116