fff-babel: Make implementation runtime switchable #201
|
@ -15,7 +15,7 @@ ROUTINGREV="2baff33918c089fd3744c7192f8ae7a29c47a8d7"
|
||||||
GLUONREV="12e41d0ff07ec54bbd67a31ab50d12ca04f2238c"
|
GLUONREV="12e41d0ff07ec54bbd67a31ab50d12ca04f2238c"
|
||||||
|
|
||||||
OPENWRT_PKGS="gpioctl-sysfs libugpio fastd haserl micrond mtr bmon"
|
OPENWRT_PKGS="gpioctl-sysfs libugpio fastd haserl micrond mtr bmon"
|
||||||
ROUTING_PKGS="kmod-batman-adv batctl alfred babeld"
|
ROUTING_PKGS="kmod-batman-adv batctl alfred babeld bird2"
|
||||||
GLUON_PKGS="simple-tc uradvd"
|
GLUON_PKGS="simple-tc uradvd"
|
||||||
|
|
||||||
FFF_VARIANTS="node layer3"
|
FFF_VARIANTS="node layer3"
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=fff-babel-bird2
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define Package/fff-babel-bird2
|
||||||
|
SECTION:=base
|
||||||
|
CATEGORY:=Freifunk
|
||||||
|
TITLE:=Freifunk-Franken babel-bird2
|
||||||
|
URL:=https://www.freifunk-franken.de
|
||||||
|
DEPENDS:=+bird2 +bird2c
|
||||||
|
PROVIDES:=fff-babel-implementation
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/fff-babel-bird2/description
|
||||||
|
This is the Freifunk Franken Firmware babel-bird2 package.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
# nothing
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/fff-babel-bird2/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,fff-babel-bird2))
|
|
@ -0,0 +1 @@
|
||||||
|
include "/etc/bird-babel/*.conf";
|
|
@ -0,0 +1,117 @@
|
||||||
|
# router id is not required for babeld, but necessary for bird startup
|
||||||
|
router id 192.0.2.0;
|
||||||
|
|
||||||
|
ipv4 table fff4;
|
||||||
|
ipv6 sadr table fff6;
|
||||||
|
|
||||||
|
protocol device {
|
||||||
|
scan time 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
# device routes for ipv4 peering address
|
||||||
|
protocol direct {
|
||||||
|
ipv4 {
|
||||||
|
table fff4;
|
||||||
|
import filter {
|
||||||
|
if (net ~ 10.50.0.0/16 || net ~ 10.83.0.0/16) && net.len = 32 then {
|
||||||
|
accept;
|
||||||
|
}
|
||||||
|
reject;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
# device routes on loopback interface
|
||||||
|
protocol direct {
|
||||||
|
ipv4 {
|
||||||
|
table fff4;
|
||||||
|
import filter {
|
||||||
|
if net ~ 10.50.0.0/16 || net ~ 10.83.0.0/16 then {
|
||||||
|
accept;
|
||||||
|
}
|
||||||
|
reject;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv6 sadr {
|
||||||
|
table fff6;
|
||||||
|
import filter {
|
||||||
|
if net ~ fdff::/64 from ::/0 then {
|
||||||
|
reject;
|
||||||
|
}
|
||||||
|
|
||||||
|
# only import GUA + ULA addresses
|
||||||
|
if net !~ 2000::/3 from ::/0 || net !~ fc00::/7 from ::/0 then {
|
||||||
|
reject;
|
||||||
|
}
|
||||||
|
|
||||||
|
accept;
|
||||||
|
};
|
||||||
|
import keep filtered;
|
||||||
|
};
|
||||||
|
|
||||||
|
interface "lo";
|
||||||
|
}
|
||||||
|
|
||||||
|
# ipv6 kernel route interface
|
||||||
|
protocol kernel {
|
||||||
|
ipv6 sadr {
|
||||||
|
table fff6;
|
||||||
|
import filter {
|
||||||
|
# only import routes from kernel with proto static
|
||||||
|
if krt_source != 4 then {
|
||||||
|
reject;
|
||||||
|
}
|
||||||
|
|
||||||
|
if net ~ fdff::/64 from ::/0 then {
|
||||||
|
reject;
|
||||||
|
}
|
||||||
|
|
||||||
|
accept;
|
||||||
|
};
|
||||||
|
export all;
|
||||||
|
preference 200;
|
||||||
|
};
|
||||||
|
kernel table 10;
|
||||||
|
scan time 15;
|
||||||
|
learn yes;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ipv4 kernel route interface
|
||||||
|
protocol kernel {
|
||||||
|
ipv4 {
|
||||||
|
table fff4;
|
||||||
|
import filter {
|
||||||
|
# only import routes from kernel with proto static
|
||||||
|
if krt_source = 4 then {
|
||||||
|
accept;
|
||||||
|
}
|
||||||
|
reject;
|
||||||
|
};
|
||||||
|
export all;
|
||||||
|
preference 200;
|
||||||
|
};
|
||||||
|
kernel table 10;
|
||||||
|
scan time 15;
|
||||||
|
learn yes;
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol babel {
|
||||||
|
# required due to static configuration of global router id.
|
||||||
|
# also improves reconnect speed after restart.
|
||||||
|
randomize router id yes;
|
||||||
|
|
||||||
|
ipv4 {
|
||||||
|
table fff4;
|
||||||
|
import all;
|
||||||
|
export all;
|
||||||
|
};
|
||||||
|
|
||||||
|
ipv6 sadr {
|
||||||
|
table fff6;
|
||||||
|
import all;
|
||||||
|
export all;
|
||||||
|
};
|
||||||
|
|
||||||
|
include "/etc/bird-babel-include.conf";
|
||||||
|
};
|
|
@ -0,0 +1,3 @@
|
||||||
|
/etc/init.d/bird disable
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,5 @@
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
|
mv /etc/bird-fff.conf /etc/bird.conf
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,63 @@
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
|
babel_add_interface() {
|
||||||
|
[ "$#" -ne "4" ] && return 1
|
||||||
|
|
||||||
|
local name="$1"
|
||||||
|
local interface="$2"
|
||||||
|
local type="$3"
|
||||||
|
local rxcost="$4"
|
||||||
|
|
||||||
|
mkdir -p /tmp/bird-babel
|
||||||
|
echo "interface \"$interface\" { type $type; rxcost $rxcost; };" > /tmp/bird-babel/$name.conf
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_delete_interface() {
|
||||||
|
[ "$#" -ne "1" ] && return 1
|
||||||
|
|
||||||
|
local name="$1"
|
||||||
|
|
||||||
|
# Removing peers from /etc is not necessary, as all peers are generated into /tmp on every configuration run,
|
||||||
|
# which completely overwrites existing peers in /etc in the apply step.
|
||||||
|
rm -f /tmp/bird-babel/$name.conf
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_add_redistribute_filter() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_remove_custom_redistribute_filters() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_apply() {
|
||||||
|
# error output hidden because apply might be executed without a preceding configure step.
|
||||||
|
if [ -d /tmp/bird-babel ]; then
|
||||||
|
rm -rf /etc/bird-babel
|
||||||
|
mv /tmp/bird-babel /etc/bird-babel
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_reload_implementation() {
|
||||||
|
# Change include file path, so bird uses the correct configuration, depending on the configuration state:
|
||||||
|
# - If test mode is active (and /tmp/bird-babel exists), switch to the temporary (/tmp) configuration to be tested.
|
||||||
|
# - If new settings are applied or the old settings are restored after an unsuccessful test (and /tmp/bird-babel does not exist),
|
||||||
|
# switch back to the permanent configuration (/etc).
|
||||||
|
if [ -d /tmp/bird-babel ]; then
|
||||||
|
echo 'include "/tmp/bird-babel/*.conf";' > /etc/bird-babel-include.conf
|
||||||
|
else
|
||||||
|
echo 'include "/etc/bird-babel/*.conf";' > /etc/bird-babel-include.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
/etc/init.d/bird reload
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_revert() {
|
||||||
|
rm -r /tmp/bird-babel
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
|
set -e
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
neighbours="$(birdc -r show babel neighbors |
|
||||||
|
tail -n +5 |
|
||||||
|
awk '{ printf "<neighbour><ip>%s</ip><outgoing_interface>%s</outgoing_interface><link_cost>%s</link_cost></neighbour>", $1, $2, $3 }'
|
||||||
|
)"
|
||||||
|
|
||||||
|
echo -n "<babel_neighbours>$neighbours</babel_neighbours>"
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,28 @@
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=fff-babel
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
|
||||||
|
define Package/fff-babel
|
||||||
|
SECTION:=base
|
||||||
|
CATEGORY:=Freifunk
|
||||||
|
TITLE:=Freifunk-Franken babel
|
||||||
|
URL:=https://www.freifunk-franken.de
|
||||||
|
DEPENDS:=+fff-babel-implementation
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/fff-babel/description
|
||||||
|
This is the Freifunk Franken Firmware babel package.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Build/Compile
|
||||||
|
# nothing
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/fff-babel/install
|
||||||
|
$(CP) ./files/* $(1)/
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,fff-babel))
|
|
@ -26,7 +26,7 @@ configure() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
config_load babeld
|
config_load network
|
||||||
config_foreach remove_babelpeer interface
|
config_foreach remove_babelpeer interface
|
||||||
|
|
||||||
#add new peers
|
#add new peers
|
||||||
|
@ -75,14 +75,14 @@ configure() {
|
||||||
babel_add_peer6addr "network.$prefixname.ip6addr"
|
babel_add_peer6addr "network.$prefixname.ip6addr"
|
||||||
|
|
||||||
# add babel interface
|
# add babel interface
|
||||||
babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || { echo "Could not add babeld interface for babelpeer $name"; exit 1; }
|
babel_add_interface "$prefixname" "$iface" "$type" "$rxcost" || { echo "Could not add babel interface for babelpeer $name"; exit 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
config_load gateway
|
config_load gateway
|
||||||
config_foreach add_babelpeer babelpeer
|
config_foreach add_babelpeer babelpeer
|
||||||
|
|
||||||
|
|
||||||
# configure babeld filters for custom ipv6 addresses
|
# configure babel filters for custom ipv6 addresses
|
||||||
## remove old filters
|
## remove old filters
|
||||||
babel_remove_custom_redistribute_filters
|
babel_remove_custom_redistribute_filters
|
||||||
|
|
||||||
|
@ -94,10 +94,14 @@ configure() {
|
||||||
|
|
||||||
apply() {
|
apply() {
|
||||||
uci commit network
|
uci commit network
|
||||||
uci commit babeld
|
babel_apply
|
||||||
|
}
|
||||||
|
|
||||||
|
reload() {
|
||||||
|
babel_reload
|
||||||
}
|
}
|
||||||
|
|
||||||
revert() {
|
revert() {
|
||||||
uci revert network
|
uci revert network
|
||||||
uci revert babeld
|
babel_revert
|
||||||
}
|
}
|
|
@ -1,3 +1,7 @@
|
||||||
|
|
||||||
|
implementation=babeld
|
||||||
|
. /lib/functions/fff/babeldaemon/$implementation
|
||||||
|
|
||||||
babel_add_iifrules() {
|
babel_add_iifrules() {
|
||||||
[ "$#" -ne "1" ] && return 1
|
[ "$#" -ne "1" ] && return 1
|
||||||
|
|
||||||
|
@ -61,61 +65,25 @@ babel_add_peer6addr() {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
babel_add_interface() {
|
babel_reload() {
|
||||||
[ "$#" -ne "4" ] && return 1
|
# switch implementation
|
||||||
|
case $implementation in
|
||||||
|
bird2)
|
||||||
|
/etc/init.d/babeld stop 2>/dev/null
|
||||||
|
/etc/init.d/babeld disable
|
||||||
|
/etc/init.d/bird enable
|
||||||
|
/etc/init.d/bird start
|
||||||
|
;;
|
||||||
|
babeld)
|
||||||
|
/etc/init.d/bird stop 2>/dev/null
|
||||||
|
/etc/init.d/bird disable
|
||||||
|
/etc/init.d/babeld enable
|
||||||
|
/etc/init.d/babeld start
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
local name="$1"
|
# call implementation-specific reload commands
|
||||||
local interface="$2"
|
babel_reload_implementation
|
||||||
local type="$3"
|
|
||||||
local rxcost="$4"
|
|
||||||
|
|
||||||
uci set babeld.$name=interface
|
|
||||||
uci set babeld.$name.ifname="$interface"
|
|
||||||
uci set babeld.$name.type="$type"
|
|
||||||
uci set babeld.$name.rxcost="$rxcost"
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
babel_delete_interface() {
|
|
||||||
[ "$#" -ne "1" ] && return 1
|
|
||||||
|
|
||||||
local name="$1"
|
|
||||||
|
|
||||||
uci -q del babeld.$name
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
babel_add_redistribute_filter() {
|
|
||||||
[ "$#" -ne "1" ] && return 1
|
|
||||||
|
|
||||||
local prefix="$1"
|
|
||||||
|
|
||||||
config=$(uci add babeld filter)
|
|
||||||
uci set babeld.$config.type='redistribute'
|
|
||||||
uci set babeld.$config.ip="$prefix"
|
|
||||||
uci set babeld.$config.addedbyautoconfig='true'
|
|
||||||
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
babel_remove_custom_redistribute_filters() {
|
|
||||||
[ "$#" -ne "0" ] && return 1
|
|
||||||
|
|
||||||
remove_filters() {
|
|
||||||
local name="$1"
|
|
||||||
|
|
||||||
# check if filter was added by configuregateway
|
|
||||||
if ! [ "$(uci -q get babeld.$name.addedbyautoconfig)" = 'true' ]; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
uci -q del babeld.$name
|
|
||||||
}
|
|
||||||
|
|
||||||
config_load babeld
|
|
||||||
config_foreach remove_filters filter
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
|
@ -11,6 +11,7 @@ define Package/fff-babeld
|
||||||
TITLE:=Freifunk-Franken babeld configuration example
|
TITLE:=Freifunk-Franken babeld configuration example
|
||||||
URL:=http://www.freifunk-franken.de
|
URL:=http://www.freifunk-franken.de
|
||||||
DEPENDS:=+babeld
|
DEPENDS:=+babeld
|
||||||
|
PROVIDES:=fff-babel-implementation
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Package/fff-babeld/description
|
define Package/fff-babeld/description
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
/etc/init.d/babeld disable
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,72 @@
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
|
babel_add_interface() {
|
||||||
|
[ "$#" -ne "4" ] && return 1
|
||||||
|
|
||||||
|
local name="$1"
|
||||||
|
local interface="$2"
|
||||||
|
local type="$3"
|
||||||
|
local rxcost="$4"
|
||||||
|
|
||||||
|
uci set babeld.$name=interface
|
||||||
|
uci set babeld.$name.ifname="$interface"
|
||||||
|
uci set babeld.$name.type="$type"
|
||||||
|
uci set babeld.$name.rxcost="$rxcost"
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_delete_interface() {
|
||||||
|
[ "$#" -ne "1" ] && return 1
|
||||||
|
|
||||||
|
local name="$1"
|
||||||
|
|
||||||
|
uci -q del babeld.$name
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_add_redistribute_filter() {
|
||||||
|
[ "$#" -ne "1" ] && return 1
|
||||||
|
|
||||||
|
local prefix="$1"
|
||||||
|
|
||||||
|
config=$(uci add babeld filter)
|
||||||
|
uci set babeld.$config.type='redistribute'
|
||||||
|
uci set babeld.$config.ip="$prefix"
|
||||||
|
uci set babeld.$config.addedbyautoconfig='true'
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_remove_custom_redistribute_filters() {
|
||||||
|
[ "$#" -ne "0" ] && return 1
|
||||||
|
|
||||||
|
remove_filters() {
|
||||||
|
local name="$1"
|
||||||
|
|
||||||
|
# check if filter was added by configuregateway
|
||||||
|
if ! [ "$(uci -q get babeld.$name.addedbyautoconfig)" = 'true' ]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
uci -q del babeld.$name
|
||||||
|
}
|
||||||
|
|
||||||
|
config_load babeld
|
||||||
|
config_foreach remove_filters filter
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_apply() {
|
||||||
|
uci commit babeld
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_reload_implementation() {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
babel_revert() {
|
||||||
|
uci revert babeld
|
||||||
|
}
|
|
@ -11,7 +11,9 @@ define Package/fff-layer3
|
||||||
TITLE:=Freifunk-Franken gateway configuration
|
TITLE:=Freifunk-Franken gateway configuration
|
||||||
URL:=https://www.freifunk-franken.de
|
URL:=https://www.freifunk-franken.de
|
||||||
DEPENDS:=+fff-alfred-monitoring-proxy \
|
DEPENDS:=+fff-alfred-monitoring-proxy \
|
||||||
|
+fff-babel \
|
||||||
+fff-babeld \
|
+fff-babeld \
|
||||||
|
+fff-babel-bird2 \
|
||||||
+fff-boardname \
|
+fff-boardname \
|
||||||
+fff-dhcp \
|
+fff-dhcp \
|
||||||
+fff-layer3-config \
|
+fff-layer3-config \
|
||||||
|
|
|
@ -76,6 +76,8 @@ fi
|
||||||
|
|
||||||
if [ -x /usr/sbin/babeld ]; then
|
if [ -x /usr/sbin/babeld ]; then
|
||||||
SYSTEM_DATA="$SYSTEM_DATA<babel_version>$(/usr/sbin/babeld -V 2>&1)</babel_version>"
|
SYSTEM_DATA="$SYSTEM_DATA<babel_version>$(/usr/sbin/babeld -V 2>&1)</babel_version>"
|
||||||
|
elif [ -x /usr/sbin/bird ]; then
|
||||||
|
SYSTEM_DATA="$SYSTEM_DATA<babel_version>$(/usr/sbin/bird --version 2>&1 | sed "s/BIRD version /bird-/")</babel_version>"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# example for /etc/openwrt_release:
|
# example for /etc/openwrt_release:
|
||||||
|
|
|
@ -14,7 +14,7 @@ define Package/fff-wireguard
|
||||||
+kmod-wireguard \
|
+kmod-wireguard \
|
||||||
+owipcalc \
|
+owipcalc \
|
||||||
+wireguard-tools \
|
+wireguard-tools \
|
||||||
+fff-babeld \
|
+fff-babel \
|
||||||
+fff-network
|
+fff-network
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ configure() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
config_load babeld
|
config_load network
|
||||||
config_foreach remove_wgpeer interface
|
config_foreach remove_wgpeer interface
|
||||||
|
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ configure() {
|
||||||
babel_add_iifrules "$prefixname" || { echo "ERROR: Could not add iif-rules for wgpeer $name"; exit 1; }
|
babel_add_iifrules "$prefixname" || { echo "ERROR: Could not add iif-rules for wgpeer $name"; exit 1; }
|
||||||
|
|
||||||
# add babel interface
|
# add babel interface
|
||||||
babel_add_interface "$prefixname" "$prefixname" 'wired' "$rxcost" || { echo "ERROR: Could not add babeld interface for wgpeer $name"; exit 1; }
|
babel_add_interface "$prefixname" "$prefixname" 'wired' "$rxcost" || { echo "ERROR: Could not add babel interface for wgpeer $name"; exit 1; }
|
||||||
}
|
}
|
||||||
|
|
||||||
config_load gateway
|
config_load gateway
|
||||||
|
@ -136,12 +136,16 @@ configure() {
|
||||||
|
|
||||||
apply() {
|
apply() {
|
||||||
uci commit network
|
uci commit network
|
||||||
uci commit babeld
|
|
||||||
uci commit gateway
|
uci commit gateway
|
||||||
|
babel_apply
|
||||||
|
}
|
||||||
|
|
||||||
|
reload() {
|
||||||
|
babel_reload
|
||||||
}
|
}
|
||||||
|
|
||||||
revert() {
|
revert() {
|
||||||
uci revert network
|
uci revert network
|
||||||
uci revert babeld
|
|
||||||
uci revert gateway
|
uci revert gateway
|
||||||
|
babel_revert
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue