blob: a20e96728aff1a7ce162d5d83a6f440b249c5a86 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#!/bin/sh /etc/rc.common
2# Copyright (C) 2008-2013 OpenWrt.org
3
4. $IPKG_INSTROOT/lib/functions/olsrd.sh
5
6START=65
7USE_PROCD=1
8BIN=/usr/sbin/olsrd
9OLSRD=olsrd6
10CONF=/var/etc/$OLSRD.conf
11PID=/var/run/olsrd6.pid
12
13wait_for_network()
14{
15 ubus -t 15 wait_for network.interface.$1 2>/dev/null
16}
17
18wait_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
31boot()
32{
33 config_load network
34 config_foreach wait_for_network interface
35 wait_for_wireless
36 rc_procd start_service
37}
38
39start_service() {
40 olsrd_generate_config $OLSRD
41
42 procd_open_instance
43
44 config_load olsrd6
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
71service_triggers() {
72 # reload if config changed via uci
73 procd_add_reload_trigger "olsrd6"
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}