aboutsummaryrefslogtreecommitdiff
path: root/net/udp-broadcast-relay-redux-openwrt/files/udp-broadcast-relay-redux.init
blob: cafa4efa4e1c4807e9674c540940bd240b73a730 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/sh /etc/rc.common

START=90
STOP=10

USE_PROCD=1
PROG=/usr/sbin/udp-broadcast-relay-redux
NAME=udp-broadcast-relay-redux
PIDCOUNT=0

validate_section_udp_broadcast_relay_redux()
{
    uci_validate_section udp_broadcast_relay_redux udp_broadcast_relay_redux "${1}" \
	'id:uinteger' \
	'port:port' \
	'network:list(string)' \
	'src_override:ip4addr' \
	'dest_override:ip4addr' \
	'multicast:ip4addr'

    [ -z "$id" ] && return 1

    [ -z "$network" ] && return 1

    [ -z "$port" ] && return 1

    return 0
}

udp_broadcast_relay_redux_instance() {
    local net network ifname id port src_override dest_override multicast

    validate_section_udp_broadcast_relay_redux "${1}" || {
	echo "Validation failed"
	return 1
    }

    PIDCOUNT="$((PIDCOUNT + 1))"

    procd_open_instance
    procd_set_param command "$PROG" "--id" "${id}" "--port" "${port}"

    for net in $network; do
	network_get_device ifname "$net"
	if [ -z "$ifname" ]; then
	    network_get_physdev ifname "$net"
	fi
	if [ -n "$ifname" ]; then
	    procd_append_param command "--dev" "$ifname"
	    procd_append_param netdev "$ifname"
	fi
    done

    if [ -n "$src_override" ] ; then
        procd_append_param command "-s" "$src_override"
    fi

    if [ -n "$dest_override" ] ; then
        procd_append_param command "-t" "$dest_override"
    fi

    if [ -n "$multicast" ] ; then
        procd_append_param command "--multicast" "$multicast"
    fi

    procd_add_jail ubr-${PIDCOUNT} cgroupsns
    procd_close_instance
}

start_service() {
    . /lib/functions.sh
    . /lib/functions/network.sh

    config_load udp_broadcast_relay_redux
    config_foreach udp_broadcast_relay_redux_instance udp_broadcast_relay_redux
}

service_triggers() {
    procd_add_reload_trigger "udp_broadcast_relay_redux"
    procd_add_validation validate_section_udp_broadcast_relay_redux
}