f1c100b2e5f17fcaf2f7cce9fd2b0b7c90dd326e
[openwrt/svn-archive/archive.git] / package / network / ipv6 / 6relayd / files / 6relayd.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (c) 2011-2012 OpenWrt.org
3 START=80
4
5 resolve_ifname() {
6 grep -qs "^ *$1:" /proc/net/dev && {
7 append ifaces "$1"
8 }
9 }
10
11 resolve_network() {
12 local ifn
13 fixup_interface "$1"
14 config_get ifn "$1" ifname
15 [ -z "$ifn" ] && return 1
16 resolve_ifname "$ifn"
17 }
18
19 start_6relayd() {
20 local cfg="$1"
21 local mode="$2"
22 local args="-s -l"
23 local ifaces=""
24
25 SERVICE_DAEMONIZE=1
26 SERVICE_WRITE_PID=1
27 SERVICE_PID_FILE="/var/run/6relayd-$cfg.pid"
28 [ -f "$SERVICE_PID_FILE" ] && {
29 if grep -q 6relayd "/proc/$(cat $SERVICE_PID_FILE)/cmdline"; then
30 return 0
31 else
32 rm -f "$SERVICE_PID_FILE"
33 fi
34 }
35
36 local net networks
37 config_get networks "$cfg" network
38 for net in $networks; do
39 resolve_network "$net" || {
40 return 1
41 }
42 done
43
44 local ifn ifnames
45 config_get ifnames "$cfg" ifname
46 for ifn in $ifnames; do
47 resolve_ifname "$ifn"
48 done
49
50 local rd
51 config_get rd "$cfg" rd
52 [ -n "$rd" ] && append args "-R$rd"
53
54 local dhcpv6
55 config_get dhcpv6 "$cfg" dhcpv6
56 [ -n "$dhcpv6" ] && append args "-D$dhcpv6"
57
58 local ndp
59 config_get ndp "$cfg" ndp
60 [ "$ndp" == "relay" ] && append args "-N -r"
61
62 local always_rewrite_dns
63 config_get_bool always_rewrite_dns "$cfg" always_rewrite_dns 0
64 [ $always_rewrite_dns -eq 1 ] && append args "-n"
65
66 # In server mode the first interface needs to be passed twice
67 [ "$mode" == "server" ] && {
68 for iface in $ifaces; do
69 ifaces="$iface $ifaces"
70 break
71 done
72 }
73
74 service_start /usr/sbin/6relayd $args $ifaces
75 }
76
77 stop() {
78 for pid in /var/run/6relayd-*.pid; do
79 SERVICE_PID_FILE="$pid"
80 service_stop /usr/sbin/6relayd
81 rm -f "$SERVICE_PID_FILE"
82 done
83 }
84
85 start() {
86 include /lib/network
87 config_load 6relayd
88 config_foreach start_6relayd relay relay
89 config_foreach start_6relayd server server
90 }