OpenWrt – Rev 4

Subversion Repositories:
Rev:
#!/bin/sh /etc/rc.common
# Copyright (c) 2011-2012 OpenWrt.org

START=80

USE_PROCD=1
PROG=/usr/sbin/relayd

validate_proto_relayd()
{
        uci_validate_section network "interface" "${1}" \
                'network:list(string)' \
                'expiry:uinteger:30' \
                'retry:uinteger:5' \
                'table:range(0, 65535):16800' \
                'forward_bcast:bool:1' \
                'forward_dhcp:bool:1'
}

resolve_ifname() {
        grep -qs "^ *$1:" /proc/net/dev && {
                append resolved_ifnames "$1"
        }
}

resolve_network() {
        local ifn
        fixup_interface "$1"
        config_get ifn "$1" ifname
        [ -z "$ifn" ] && return 1
        resolve_ifname "$ifn"
}

start_relay() {
        local cfg="$1"
        local proto disabled

        config_get proto "$cfg" proto
        [ "$proto" = "relay" ] || return 0

        config_get_bool disabled "$cfg" disabled 0
        [ "$disabled" -gt 0 ] && return 0

        local resolved_ifnames
        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" || {
                        return 1
                }
        done

        procd_open_instance
        procd_set_param command "$PROG"

        for ifn in $resolved_ifnames; do
                procd_append_param command -I "$ifn"
                procd_append_param netdev "$ifn"
        done
        local ipaddr
        config_get ipaddr "$cfg" ipaddr
        [ -n "$ipaddr" ] && procd_append_param command -L "$ipaddr"

        local gateway
        config_get gateway "$cfg" gateway
        [ -n "$gateway" ] && procd_append_param command -G "$gateway"

        local expiry # = 30
        config_get expiry "$cfg" expiry
        [ -n "$expiry" ] && procd_append_param command -t "$expiry"

        local retry # = 5
        config_get retry "$cfg" retry
        [ -n "$retry" ] && procd_append_param command -p "$retry"

        local table # = 16800
        config_get table "$cfg" table
        [ -n "$table" ] && procd_append_param command -T "$table"

        local fwd_bcast # = 1
        config_get_bool fwd_bcast "$cfg" forward_bcast 1
        [ $fwd_bcast -eq 1 ] && procd_append_param command "-B"

        local fwd_dhcp # = 1
        config_get_bool fwd_dhcp "$cfg" forward_dhcp 1
        [ $fwd_dhcp -eq 1 ] && procd_append_param command "-D"

        procd_close_instance
}

service_triggers()
{
        procd_add_reload_trigger "network"
        procd_add_raw_trigger "interface.*" 2000 /etc/init.d/relayd reload
}

start_service() {
        include /lib/network
        config_load network
        config_foreach start_relay interface
}