openwrt-routing/oonf-init-scripts/files/oonf_init.sh

121 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
. /usr/share/libubox/jshn.sh
oonf_log()
{
logger -s -t ${DAEMON} -p daemon.info "${1}"
}
oonf_get_layer3_device()
{
local interface="${1}" # e.g. 'mywifi'
local status dev proto
local query="{ \"interface\" : \"${interface}\" }"
status="$( ubus -S call network.interface status "${query}" )" && {
json_load "${status}"
json_get_var 'dev' l3_device
json_get_var 'proto' proto
case "${proto}" in
pppoe)
# TODO: otherwise it segfaults
oonf_log "refusing to add '$interface', because of proto '${proto}'"
;;
*)
echo "${dev}" # e.g. 'wlan0-1'
;;
esac
}
}
oonf_add_devices_to_configuration()
{
local i=0
local device_name= section= interface= single_interface=
# make a copy of configuration and
# add a 'name' (physical name) for all
# 'interface-names' (e.g. mywifi)
#
# olsrd2.@interface[2]=interface
# olsrd2.@interface[2].ifname='wan lan wlanadhoc wlanadhocRADIO1'
# /var is in ramdisc/tmpfs
uci export ${DAEMON} >"/var/etc/${DAEMON}_dev"
while section="$( uci -q -c /etc/config get "${DAEMON}.@[${i}]" )"; do {
echo "section: ${section}"
interface="$( uci -q -c /etc/config get "${DAEMON}.@[${i}].ifname" )" || {
i=$(( i + 1 ))
continue
}
case "$( uci -q get "${DAEMON}.@[${i}].ignore" )" in
1|on|true|enabled|yes)
oonf_log "removing/ignore section '$section'"
uci -q -c /var/etc delete "${DAEMON}_dev.@[${j}]"
i=$(( i + 1 ))
continue
;;
esac
for single_interface in ${interface}; do {
device_name="$( oonf_get_layer3_device "${single_interface}" )"
echo "Interface: ${single_interface} = ${device_name}"
if [ ! -z "${device_name}" ]
then
# add option 'name' for 'ifname' (e.g. 'mywifi')
uci -q -c /var/etc add_list "${DAEMON}_dev.@[${i}].name=${device_name}"
fi
} done
i=$(( $i + 1 ))
} done
uci -q -c /var/etc commit "${DAEMON}_dev"
oonf_log "wrote '/var/etc/${DAEMON}_dev'"
}
oonf_reread_config()
{
local pid
local pidfile="/var/run/${DAEMON}.pid"
if [ -e "${pidfile}" ]; then
read pid <"${pidfile}"
elif pidfile="$( uci -q get "${DAEMON}.@global[0].pidfile" )"; then
read pid <"${pidfile}"
fi
# if empty, ask kernel
pid="${pid:-$( pidof ${DAEMON} )}"
[ -n "${pid}" ] && kill -SIGHUP ${pid}
}
start()
{
oonf_add_devices_to_configuration
# produce coredumps
ulimit -c unlimited
service_start /usr/sbin/${DAEMON} --set global.fork=true --load uci:///var/etc/${DAEMON}_dev
}
stop()
{
service_stop /usr/sbin/${DAEMON}
}
reload()
{
oonf_add_devices_to_configuration
oonf_reread_config
}