a0ec4b26df53b6167344109984c2955f839bc05d
[feed/packages.git] / net / natmap / files / natmap.init
1 #!/bin/sh /etc/rc.common
2
3 START=99
4 USE_PROCD=1
5
6 NAME=natmap
7 PROG=/usr/bin/$NAME
8
9 STATUS_PATH=/var/run/natmap
10
11 load_interfaces() {
12 config_get interface "$1" interface
13 config_get enable "$1" enable 1
14
15 [ "${enable}" = "1" ] && interfaces=" ${interface} ${interfaces}"
16 }
17
18 validate_section_natmap() {
19 uci_load_validate "${NAME}" natmap "$1" "$2" \
20 'enable:bool:0' \
21 'family:string' \
22 'udp_mode:bool:0' \
23 'interface:string' \
24 'interval:uinteger' \
25 'stun_server:host' \
26 'http_server:host' \
27 'port:port' \
28 'forward_target:host' \
29 'forward_port:port' \
30 'notify_script:file'
31 }
32
33 natmap_instance() {
34 [ "$2" = 0 ] || {
35 echo "validation failed"
36 return 1
37 }
38
39 [ "${enable}" = 0 ] && return 1
40
41 procd_open_instance "$1"
42 procd_set_param command "$PROG" \
43 ${interval:+-k "$interval"} \
44 ${stun_server:+-s "$stun_server"} \
45 ${http_server:+-h "$http_server"} \
46 ${port:+-b "$port"} \
47
48 [ "${family}" = ipv4 ] && procd_append_param command -4
49 [ "${family}" = ipv6 ] && procd_append_param command -6
50 [ "${udp_mode}" = 1 ] && procd_append_param command -u
51
52 [ -n "${interface}" ] && {
53 local ifname
54
55 network_get_device ifname "$interface" || ifname="$interface"
56 procd_append_param command -i "$ifname"
57 procd_append_param netdev "$ifname"
58 }
59
60 [ -n "${forward_target}" ] && procd_append_param command -t "$forward_target" -p "$forward_port"
61
62 [ -n "${notify_script}" ] && procd_set_param env "NOTIFY_SCRIPT=${notify_script}"
63 procd_append_param command -e /usr/lib/natmap/update.sh
64
65 procd_set_param respawn
66 procd_set_param stdout 1
67 procd_set_param stderr 1
68
69 procd_close_instance
70 }
71
72 clear_status_files() {
73 find "${STATUS_PATH}" -type f -print0 | xargs -0 rm -f --
74 }
75
76 service_triggers() {
77 local interfaces
78
79 procd_add_reload_trigger "${NAME}"
80
81 config_load "${NAME}"
82 config_foreach load_interfaces natmap
83
84 [ -n "${interfaces}" ] && {
85 for n in $interfaces ; do
86 procd_add_reload_interface_trigger $n
87 done
88 }
89
90 procd_add_validation validate_section_natmap
91 }
92
93 start_service() {
94 . /lib/functions/network.sh
95
96 mkdir -p "${STATUS_PATH}"
97 clear_status_files
98
99 config_load "${NAME}"
100 config_foreach validate_section_natmap natmap natmap_instance
101 }
102
103 reload_service() {
104 stop
105 start
106 }
107
108 service_stopped() {
109 clear_status_files
110 }