Merge pull request #1071 from ecsv/batadv-2024.2
[feed/routing.git] / olsrd / files / olsrd4.init
1 #!/bin/sh /etc/rc.common
2 # Copyright (C) 2008-2013 OpenWrt.org
3
4 . $IPKG_INSTROOT/lib/functions/olsrd.sh
5
6 START=65
7 USE_PROCD=1
8 BIN=/usr/sbin/olsrd
9 OLSRD=olsrd
10 CONF=/var/etc/$OLSRD.conf
11 PID=/var/run/olsrd.pid
12
13 wait_for_network()
14 {
15 ubus -t 15 wait_for network.interface.$1 2>/dev/null
16 }
17
18 wait_for_wireless()
19 {
20 local count=0
21 ubus -t 15 wait_for network.wireless 2>/dev/null
22 while [ $count -lt 30 ]; do
23 if [ "$(ubus call network.wireless status | jsonfilter -e '@[*]["pending"]' | grep true | wc -l)" == "0" ]; then
24 break
25 fi
26 count=$((count+1))
27 sleep 1
28 done
29 }
30
31 boot()
32 {
33 config_load network
34 config_foreach wait_for_network interface
35 wait_for_wireless
36 rc_procd start_service
37 }
38
39 start_service() {
40 olsrd_generate_config $OLSRD
41
42 procd_open_instance
43
44 config_load olsrd
45 local _respawn_threshold
46 local _respawn_timeout
47 local _respawn_retry
48
49 config_get _respawn_threshold procd respawn_threshold 3600
50 config_get _respawn_timeout procd respawn_timeout 15
51 config_get _respawn_retry procd respawn_retry 0
52
53 procd_set_param command "$BIN"
54 procd_append_param command -f ${CONF}
55 procd_append_param command -nofork
56 procd_append_param command -pidfile ${PID}
57
58 # restart if olsrd dies
59 procd_set_param respawn $_respawn_threshold $_respawn_timeout $_respawn_retry
60
61 # automatically restart olsrd if generated cfg has changed
62 procd_set_param file $CONF
63
64 procd_set_param pidfile $PID
65
66 procd_close_instance
67
68 olsrd_setup_smartgw_rules
69 }
70
71 service_triggers() {
72 # reload if config changed via uci
73 procd_add_reload_trigger "olsrd"
74
75 # restart on ifup interface events
76 for n in $(olsrd_list_configured_interfaces $OLSRD); do
77 procd_add_reload_interface_trigger $n /etc/init.d/$OLSRD reload
78 done
79 }