diff options
| author | Henning Rogge <hrogge@gmail.com> | 2015-08-06 21:59:14 +0200 |
|---|---|---|
| committer | Henning Rogge <hrogge@gmail.com> | 2015-08-06 21:59:14 +0200 |
| commit | 2a34bedcec526f58777e7fc183d47a7b5fda8c8f (patch) | |
| tree | 9899bfc3512573ce8de23e74b266f7b3660d6186 /oonf-init-scripts | |
| parent | 8afb34944bf61d55b9f221f7db8d662175d00c5c (diff) | |
Unified Openwrt startup scripts for OONF
Diffstat (limited to 'oonf-init-scripts')
| -rw-r--r-- | oonf-init-scripts/Makefile | 36 | ||||
| -rwxr-xr-x | oonf-init-scripts/files/oonf_hotplug.sh | 10 | ||||
| -rwxr-xr-x | oonf-init-scripts/files/oonf_init.sh | 120 |
3 files changed, 166 insertions, 0 deletions
diff --git a/oonf-init-scripts/Makefile b/oonf-init-scripts/Makefile new file mode 100644 index 0000000..fd1aa06 --- /dev/null +++ b/oonf-init-scripts/Makefile @@ -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)) diff --git a/oonf-init-scripts/files/oonf_hotplug.sh b/oonf-init-scripts/files/oonf_hotplug.sh new file mode 100755 index 0000000..b230b94 --- /dev/null +++ b/oonf-init-scripts/files/oonf_hotplug.sh @@ -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 diff --git a/oonf-init-scripts/files/oonf_init.sh b/oonf-init-scripts/files/oonf_init.sh new file mode 100755 index 0000000..1c7b414 --- /dev/null +++ b/oonf-init-scripts/files/oonf_init.sh @@ -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 +} |
