mirror of
https://github.com/openwrt/routing.git
synced 2025-12-26 11:16:32 +04:00
Unified Openwrt startup scripts for OONF
This commit is contained in:
36
oonf-init-scripts/Makefile
Normal file
36
oonf-init-scripts/Makefile
Normal file
@@ -0,0 +1,36 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=oonf-init-scripts
|
||||
PKG_VERSION:=0.9.1-r2
|
||||
PKG_RELEASE:=1
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/oonf-init-scripts
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
MAINTAINER:=Henning Rogge <hrogge@gmail.com>
|
||||
SUBMENU:=OLSR.org network framework
|
||||
URL:=http://www.olsr.org/
|
||||
TITLE:= Common OONF startup scripts
|
||||
VERSION:=$(PKG_VERSION)
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
mkdir -p $(PKG_BUILD_DIR)
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/oonf-init-scripts/install
|
||||
$(INSTALL_BIN) -D ./files/oonf_init.sh $(1)/lib/functions/oonf_init.sh
|
||||
$(INSTALL_BIN) -D ./files/oonf_hotplug.sh $(1)/lib/functions/oonf_hotplug.sh
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,oonf-init-scripts))
|
||||
10
oonf-init-scripts/files/oonf_hotplug.sh
Executable file
10
oonf-init-scripts/files/oonf_hotplug.sh
Executable file
@@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
case "${ACTION}" in
|
||||
ifup)
|
||||
. /etc/rc.common /etc/init.d/${DAEMON} enabled && {
|
||||
logger -t '${DAEMON}[hotplug]' -p daemon.info 'reloading configuration'
|
||||
. /etc/rc.common /etc/init.d/${DAEMON} reload
|
||||
}
|
||||
;;
|
||||
esac
|
||||
120
oonf-init-scripts/files/oonf_init.sh
Executable file
120
oonf-init-scripts/files/oonf_init.sh
Executable file
@@ -0,0 +1,120 @@
|
||||
#!/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
|
||||
}
|
||||
Reference in New Issue
Block a user