From f67eca787fe92eacee1eb4ad87b3436abb5f0458 Mon Sep 17 00:00:00 2001 From: Sukru Senli Date: Sun, 6 Feb 2022 13:33:50 +0100 Subject: [PATCH] netmode: strip netmoded out of netmode package --- netmode/Makefile | 29 ++-- netmode/files/etc/config/netmode | 14 +- netmode/files/etc/hotplug.d/iface/05-testnet | 13 +- .../files/etc/hotplug.d/iface/70-shiftrange | 3 + netmode/files/etc/init.d/netmode | 59 ++++--- netmode/files/etc/netmodes/bridge/DETAILS | 9 -- netmode/files/etc/netmodes/router/DETAILS | 9 -- .../files/etc/uci-defaults/998-netmode-opreqs | 13 -- netmode/files/lib/functions/netmode.sh | 150 ------------------ netmode/files/sbin/testnet | 5 +- 10 files changed, 65 insertions(+), 239 deletions(-) delete mode 100644 netmode/files/etc/netmodes/bridge/DETAILS delete mode 100644 netmode/files/etc/netmodes/router/DETAILS delete mode 100644 netmode/files/etc/uci-defaults/998-netmode-opreqs delete mode 100644 netmode/files/lib/functions/netmode.sh diff --git a/netmode/Makefile b/netmode/Makefile index 48ecca072..98de78bf5 100644 --- a/netmode/Makefile +++ b/netmode/Makefile @@ -8,35 +8,26 @@ include $(TOPDIR)/rules.mk PKG_NAME:=netmode -PKG_VERSION:=0.2.0 - -PKG_SOURCE_VERSION:=5c8abbdf86e4651c7c6f14f784cfb52e69979f96 -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/netmoded -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz -PKG_MIRROR_HASH:=skip -PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) - -PKG_LICENSE:=GPLv2 -PKG_LICENSE_FILES:=LICENSE - +PKG_VERSION:=0.3.0 +PKG_RELEASE:=1 +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_LICENSE:=GPL-2.0-only include $(INCLUDE_DIR)/package.mk define Package/netmode - CATEGORY:=Base system - DEPENDS:=+fping +ubus +libubox +libuci - TITLE:=Predefined Network Modes + CATEGORY:=Utilities + TITLE:=Network Modes and Utils endef define Package/netmode/description - Predefined Network Modes + Network Modes and Utils +endef + +define Build/Compile endef define Package/netmode/install $(CP) ./files/* $(1)/ - $(INSTALL_DIR) $(1)/sbin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/netmoded $(1)/sbin/ endef $(eval $(call BuildPackage,netmode)) diff --git a/netmode/files/etc/config/netmode b/netmode/files/etc/config/netmode index 50a5d8939..49efaeec0 100644 --- a/netmode/files/etc/config/netmode +++ b/netmode/files/etc/config/netmode @@ -1,8 +1,10 @@ -config netmoded 'netmoded' - option enabled '0' - -config setup 'setup' - option enabled '0' - option dir '/etc/netmodes' +config netmode global + option enabled 0 # option mode 'router' +#config testnet testnet +# option enabled 1 +# option destination '8.8.8.8' + +#config shiftrange shiftrange +# option enabled 1 diff --git a/netmode/files/etc/hotplug.d/iface/05-testnet b/netmode/files/etc/hotplug.d/iface/05-testnet index 6054583ab..9c335a90a 100644 --- a/netmode/files/etc/hotplug.d/iface/05-testnet +++ b/netmode/files/etc/hotplug.d/iface/05-testnet @@ -1,16 +1,16 @@ #!/bin/sh +# do not start testnet if the feature is explicitly disabled +[ "$(uci -q get netmode.testnet.enabled)" = "0" ] && exit 0 + [ "$ACTION" == "ifup" -o "$ACTION" == "ifdown" ] || exit 0 interface_check() { - local islan="$(uci -q get network.$INTERFACE.is_lan)" - [ "$islan" == "1" ] && exit 0 + [ "$(uci -q get network.$INTERFACE.is_lan)" = "1" ] && exit 0 - local proto="$(uci -q get network.$INTERFACE.proto)" - [ "$proto" == "none" ] && exit 0 + [ "$(uci -q get network.$INTERFACE.proto)" = "none" ] && exit 0 - local defroute="$(uci -q get network.$INTERFACE.defaultroute)" - [ "$defroute" == "0" ] && exit 0 + [ "$(uci -q get network.$INTERFACE.defaultroute)" = "0" ] && exit 0 } interface_check @@ -19,4 +19,3 @@ if [ -n "$(pgrep -f testnet)" ]; then else testnet & fi - diff --git a/netmode/files/etc/hotplug.d/iface/70-shiftrange b/netmode/files/etc/hotplug.d/iface/70-shiftrange index 987904c4c..5956addda 100644 --- a/netmode/files/etc/hotplug.d/iface/70-shiftrange +++ b/netmode/files/etc/hotplug.d/iface/70-shiftrange @@ -2,6 +2,9 @@ # this scripts shifts the lan network prefixes # if a wan interface has the same network prefix. +# do not shift range if the feature is explicitly disabled +[ "$(uci -q get netmode.shiftrange.enabled)" == "0" ] && exit 0 + . /lib/functions.sh . /lib/functions/network.sh diff --git a/netmode/files/etc/init.d/netmode b/netmode/files/etc/init.d/netmode index 1dcb446fc..9f6a4dbed 100755 --- a/netmode/files/etc/init.d/netmode +++ b/netmode/files/etc/init.d/netmode @@ -3,44 +3,53 @@ START=10 USE_PROCD=1 -NETMODED="/sbin/netmoded" - . /lib/functions.sh -. /lib/functions/netmode.sh -start_netmoded() { - config_load netmode +MODEDIR="/etc/netmodes" - config_get enabled netmoded enabled 0 - if [ "$enabled" != "1" ]; then - return +run_netmode_scripts() { + mode="$1" + when="$2" + + path=$(readlink -f $MODEDIR/$mode) + [ "${path:0:13}" == "$MODEDIR" ] || exit + + if [ -d $MODEDIR/$mode/scripts/$when ]; then + logger -s -p user.info -t "netmode" "Executing $when netmode scripts" + for script in $(ls MODEDIR/$mode/scripts/$when/); do + sh $MODEDIR/$mode/scripts/$when/$script + done fi - - procd_open_instance - procd_set_param command $NETMODED - - procd_append_param command --verbose warning -i macaddr - procd_set_param stdout 1 - procd_set_param stderr 1 - - procd_set_param respawn - procd_close_instance } start_service() { - populate_netmodes + [ -f /etc/config/netmode -a -d $MODEDIR ] || return - start_netmoded -} + config_load netmode -reload_service() { - switch_netmode + config_get_bool enabled global enabled '0' + [ $enabled -eq 0 ] && return - start_netmoded + # Get the desired netmode from config + config_get mode global mode + # Check if netmode is set as boot environment parameter + [ -n "$mode" ] || mode="$(fw_printenv -n netmode 2>/dev/null)" + # Fallback to default netmode if exits + [ -n "$mode" ] || mode="default" + # Return if the desired netmode folder does not exist + [ -d "/etc/netmodes/$mode" ] || return + + logger -s -p user.info -t "netmode" "Switching to $mode Mode" >/dev/console + + run_netmode_scripts $mode "pre" + if [ -d $MODEDIR/$mode/uci ]; then + logger -s -p user.info -t "netmode" "Copying $MODEDIR/$mode/uci/* to /etc/config/" + cp $MODEDIR/$mode/uci/* /etc/config/ 2>/dev/null + fi + run_netmode_scripts $mode "post" } service_triggers() { procd_add_reload_trigger netmode } - diff --git a/netmode/files/etc/netmodes/bridge/DETAILS b/netmode/files/etc/netmodes/bridge/DETAILS deleted file mode 100644 index b371e9b53..000000000 --- a/netmode/files/etc/netmodes/bridge/DETAILS +++ /dev/null @@ -1,9 +0,0 @@ -{ - "description": [ - { "en" : "Bridge Mode" } - ], - "explanation": [ - { "en" : "NAT is disabled." } - ], - "reboot" : 0 -} diff --git a/netmode/files/etc/netmodes/router/DETAILS b/netmode/files/etc/netmodes/router/DETAILS deleted file mode 100644 index d369d19b7..000000000 --- a/netmode/files/etc/netmodes/router/DETAILS +++ /dev/null @@ -1,9 +0,0 @@ -{ - "description": [ - { "en" : "Router Mode" } - ], - "explanation": [ - { "en" : "NAT is enabled." } - ], - "reboot" : 0 -} diff --git a/netmode/files/etc/uci-defaults/998-netmode-opreqs b/netmode/files/etc/uci-defaults/998-netmode-opreqs deleted file mode 100644 index e1cbfcba4..000000000 --- a/netmode/files/etc/uci-defaults/998-netmode-opreqs +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh - -. /lib/functions.sh - -add_owsd_ubusproxy_object_netmode() { - local netmd=$(uci -q get owsd.ubusproxy.object | grep netmode) - if [ -z "$netmd" ]; then - uci -q add_list owsd.ubusproxy.object="netmode" - uci commit owsd - fi -} - -add_owsd_ubusproxy_object_netmode diff --git a/netmode/files/lib/functions/netmode.sh b/netmode/files/lib/functions/netmode.sh deleted file mode 100644 index 805e9766e..000000000 --- a/netmode/files/lib/functions/netmode.sh +++ /dev/null @@ -1,150 +0,0 @@ -#!/bin/sh - -. /lib/functions.sh -. /usr/share/libubox/jshn.sh - -MODEDIR=$(uci -q get netmode.setup.dir) - -[ -n "$MODEDIR" ] || MODEDIR="/etc/netmodes" - -run_netmode_scripts() { - local mode=$1 - local when=$2 - local script - local path - - path=$(readlink -f /etc/netmodes/$mode/) - [ "${path:0:14}" == "/etc/netmodes/" ] || exit - - if [ -d /etc/netmodes/$mode/scripts/$when ]; then - logger -s -p user.info -t "netmode" "Executing $when netmode scripts" >/dev/console - for script in $(ls /etc/netmodes/$mode/scripts/$when/); do - sh /etc/netmodes/$mode/scripts/$when/$script - done - fi -} - -switch_netmode() { - [ -f /etc/config/netmode -a -d $MODEDIR ] || return - - config_load netmode - - local enabled - config_get_bool enabled setup enabled '0' - [ $enabled -eq 0 ] && return - - local mode - config_get mode setup mode - - [ -d "/etc/netmodes/$mode" ] || return - - logger -s -p user.info -t "netmode" "Switching to $mode Mode" >/dev/console - - run_netmode_scripts $mode "pre" - - local reboot=$(uci -q get netmode.$mode.reboot) - - if [ "$reboot" == "1" ]; then - #run_netmode_scripts $mode "post" - reboot & - exit - fi - - #run_netmode_scripts $mode "post" -} - -populate_netmodes() { - [ -f /etc/config/netmode -a -d $MODEDIR ] || return - - config_load netmode - - local enabled - config_get_bool enabled setup enabled '0' - [ $enabled -eq 0 ] && return - - delete_netmode() { - uci delete netmode.$1 - } - - config_foreach delete_netmode netmode - uci commit netmode - - local hardware=$(db -q get hw.board.model_name) - local keys lang desc exp exclude support - for mode in $(ls $MODEDIR); do - lang="" - desc="" - exp="" - uci -q set netmode.$mode=netmode - json_load "$(cat $MODEDIR/$mode/DETAILS)" - - if json_select excluded_boards; then - exclude=0 - _i=1 - while json_get_var board $_i; do - case "$hardware" in - $board) - uci -q delete netmode.$mode - exclude=1 - break - ;; - esac - _i=$((_i+1)) - done - json_select .. - [ $exclude -eq 1 ] && continue - elif json_select supported_boards; then - support=0 - _i=1 - while json_get_var board $_i; do - case "$hardware" in - $board) - support=1 - break - ;; - esac - _i=$((_i+1)) - done - json_select .. - [ $support -eq 1 ] || { - uci -q delete netmode.$mode - continue - } - fi - - json_select description - json_get_keys keys - for k in $keys; do - json_get_keys lang $k - lang=$(echo $lang | sed 's/^[ \t]*//;s/[ \t]*$//') - json_select $k - json_get_var desc $lang - uci -q set netmode.$mode."desc_$lang"="$desc" - [ "$lang" == "en" ] && uci -q set netmode.$mode."desc"="$desc" - json_select .. - done - json_select .. - - json_select explanation - json_get_keys keys - for k in $keys; do - json_get_keys lang $k - lang=$(echo $lang | sed 's/^[ \t]*//;s/[ \t]*$//') - json_select $k - json_get_var exp $lang - uci -q set netmode.$mode."exp_$lang"="$exp" - [ "$lang" == "en" ] && uci -q set netmode.$mode."exp"="$exp" - json_select .. - done - json_select .. - - json_get_var cred credentials - uci -q set netmode.$mode.askcred="$cred" - json_get_var ulb uplink_band - uci -q set netmode.$mode.uplink_band="$ulb" - json_get_var reboot reboot - uci -q set netmode.$mode.reboot="$reboot" - done - - uci commit netmode -} diff --git a/netmode/files/sbin/testnet b/netmode/files/sbin/testnet index af967bfc8..c6ba2813d 100755 --- a/netmode/files/sbin/testnet +++ b/netmode/files/sbin/testnet @@ -31,7 +31,10 @@ test_connection() { internet_test() { local link dest - dest="$(uci -q get diagnostics.@connectivity[0].destination)" + # use the destination address given in config for connectivity check + dest="$(uci -q get netmode.testnet.destination)" + # for backwards compatibility + [ -n "$dest" ] || dest="$(uci -q get diagnostics.@connectivity[0].destination)" test_connection $dest