[RFC PATCH 4/8] Moved network configuration script to own package
Jan Kraus
mayosemmel at googlemail.com
Di Mai 3 23:20:53 CEST 2016
also added check if IPv6 prefix is set.
Signed-off-by: Jan Kraus <mayosemmel at gmail.com>
---
bsp/default/root_file_system/etc/network.sh | 155 --------------------
bsp/default/root_file_system/etc/rc.local.tpl | 4 +-
src/packages/fff/fff-network/Makefile | 39 +++++
.../fff-network/files/usr/sbin/configurenetwork | 158 +++++++++++++++++++++
src/packages/fff/fff/Makefile | 1 +
5 files changed, 199 insertions(+), 158 deletions(-)
delete mode 100644 bsp/default/root_file_system/etc/network.sh
create mode 100644 src/packages/fff/fff-network/Makefile
create mode 100644 src/packages/fff/fff-network/files/usr/sbin/configurenetwork
diff --git a/bsp/default/root_file_system/etc/network.sh b/bsp/default/root_file_system/etc/network.sh
deleted file mode 100644
index 1a595a5..0000000
--- a/bsp/default/root_file_system/etc/network.sh
+++ /dev/null
@@ -1,155 +0,0 @@
-#!/bin/sh
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-if ! uci get nodewatcher. at network[0].client_interfaces; then
- echo "Setting nodewatchers client interfaces to: $CLIENTIF"
- uci set nodewatcher. at network[0].client_interfaces="$CLIENTIF"
- uci commit
-fi
-
-if ! uci get network.$SWITCHDEV.ifname; then
-
- SWITCHHW=$(swconfig list | awk '{ print $4 }')
-
- uci set network.$SWITCHDEV=switch
- uci set network.$SWITCHDEV.name=$SWITCHHW
- uci set network.$SWITCHDEV.enable=1
- uci set network.$SWITCHDEV.reset=1
- uci set network.$SWITCHDEV.enable_vlan=1
-
- uci set network.${SWITCHDEV}_1=switch_vlan
- uci set network.${SWITCHDEV}_1.device=$SWITCHHW
- uci set network.${SWITCHDEV}_1.vlan=1
- uci set network.${SWITCHDEV}_1.ports="$CLIENT_PORTS"
-
- echo "# Allow IPv6 RAs on WAN Port" >> /etc/sysctl.conf
-
- if [[ "$WANDEV" = "$SWITCHDEV" ]]; then
- uci set network.${SWITCHDEV}_2=switch_vlan
- uci set network.${SWITCHDEV}_2.device=$SWITCHHW
- uci set network.${SWITCHDEV}_2.vlan=2
- uci set network.${SWITCHDEV}_2.ports="$WAN_PORTS"
-
- echo "net.ipv6.conf.$WANDEV.2.accept_ra_defrtr = 1" >> /etc/sysctl.conf
- echo "net.ipv6.conf.$WANDEV.2.accept_ra_pinfo = 1" >> /etc/sysctl.conf
- echo "net.ipv6.conf.$WANDEV.2.autoconf = 1" >> /etc/sysctl.conf
- echo "net.ipv6.conf.$WANDEV.2.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf
- else
- echo "net.ipv6.conf.$WANDEV.accept_ra_defrtr = 1" >> /etc/sysctl.conf
- echo "net.ipv6.conf.$WANDEV.accept_ra_pinfo = 1" >> /etc/sysctl.conf
- echo "net.ipv6.conf.$WANDEV.autoconf = 1" >> /etc/sysctl.conf
- echo "net.ipv6.conf.$WANDEV.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf
- fi
-
- uci set network.${SWITCHDEV}_3=switch_vlan
- uci set network.${SWITCHDEV}_3.device=$SWITCHHW
- uci set network.${SWITCHDEV}_3.vlan=3
- uci set network.${SWITCHDEV}_3.ports="$BATMAN_PORTS"
-
- uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
-
- uci set network.ethmesh.ifname="$SWITCHDEV.3"
-
- if [[ "$WANDEV" = "$SWITCHDEV" ]]; then
- uci set network.wan.ifname=$WANDEV.2
- else
- uci set network.wan.ifname=$WANDEV
- fi
-
- uci commit
- /etc/init.d/network restart
-fi
-
-if [[ -n "$ETHMESHMAC" ]]; then
- if uci get network.ethmesh.macaddr
- then
- echo "MAC for ethmesh is set already"
- else
- echo "Fixing MAC on eth0.3 (ethmesh)"
- sleep 10
- NEW_MACADDR=$(cat /sys/class/net/$ETHMESHMAC/address)
- uci set network.ethmesh.macaddr=$NEW_MACADDR
- uci commit
- ifconfig eth0.3 down
- ifconfig eth0.3 hw ether $NEW_MACADDR
- ifconfig eth0.3 up
- /etc/init.d/network restart
- fi
-fi
-
-if [[ -n "$ROUTERMAC" ]]; then
- if uci get network.mesh.macaddr
- then
- echo "MAC for mesh is set already"
- else
- echo "Fixing MAC on br-mesh (mesh)"
- sleep 10
- NEW_MACADDR=$(cat /sys/class/net/$ROUTERMAC/address)
- uci set network.mesh.macaddr=$NEW_MACADDR
- uci commit
- ifconfig br-mesh down
- ifconfig br-mesh hw ether $NEW_MACADDR
- ifconfig br-mesh up
- /etc/init.d/network restart
- fi
-fi
-
-if [[ -n "$ETH0MAC" ]]; then
- echo "Fixing MAC on eth0"
- sleep 10
- NEW_MACADDR=$(cat "/sys/class/net/${ETH0MAC}/address")
- uci set network.eth0.macaddr=$NEW_MACADDR
- uci commit
- ifconfig eth0 down
- ifconfig eth0 hw ether $NEW_MACADDR
- ifconfig eth0 up
- /etc/init.d/network restart
-fi
-
-if uci get network.mesh.ip6addr
-then
- echo "IPv6 for mesh is set already"
-else
- # Some time needed :(
- sleep 5
-
- for ip in $(ip -6 addr show br-mesh | awk '/fdff/{ print $2 }'); do
- ip -6 addr del $ip dev br-mesh
- done
-
- prefix="fdff:0::/64"
- # Set $prefix::MAC as IP
- suffix=$(awk -F: '{ print $1$2":"$3$4":"$5$6 }' /sys/class/net/br-mesh/address)
- addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
- ip -6 addr add $addr dev br-mesh
-
- uci -q del network.globals
- uci -q set network.globals=globals
- uci -q set network.globals.ula_prefix=$prefix
- uci -q add_list network.mesh.ip6addr=$addr
- uci -q set network.mesh.proto=static
-
- # Set $prefix::1 as IP
- suffix="1"
- addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
- ip -6 addr add $addr dev br-mesh
- uci -q add_list network.mesh.ip6addr=$addr
-
- # Set $prefix::link-local as IP
- suffix=$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br-mesh/address)
- addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
- ip -6 addr add $addr dev br-mesh
- uci -q add_list network.mesh.ip6addr=$addr
-
- uci -q commit network
-
- /etc/init.d/fff-uradvd restart
-fi
diff --git a/bsp/default/root_file_system/etc/rc.local.tpl b/bsp/default/root_file_system/etc/rc.local.tpl
index cb8aa04..c76bb79 100755
--- a/bsp/default/root_file_system/etc/rc.local.tpl
+++ b/bsp/default/root_file_system/etc/rc.local.tpl
@@ -56,9 +56,7 @@ if ! uci get board.model.name; then
uci set board.model.name=$BOARD
fi
-. /etc/network.$BOARD
-
-. /etc/network.sh
+. /usr/sbin/configurehood
# Starting NTP-Client Daemon after 30s to ensure that the interface is up
( sleep 30 ; ntpd -p ${NTPD_IP} ) &
diff --git a/src/packages/fff/fff-network/Makefile b/src/packages/fff/fff-network/Makefile
new file mode 100644
index 0000000..a803afe
--- /dev/null
+++ b/src/packages/fff/fff-network/Makefile
@@ -0,0 +1,39 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=fff-network
+PKG_VERSION:=0.0.1
+PKG_RELEASE:=1
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/fff-network
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/fff-network
+ SECTION:=base
+ CATEGORY:=Freifunk
+ TITLE:= Freifunk-Franken network configuration
+ URL:=http://www.freifunk-franken.de
+ DEPENDS:=+fff-uradvd
+endef
+
+define Package/fff-network/description
+ This package configures the network interfaces
+endef
+
+define Build/Prepare
+ echo "all: " > $(PKG_BUILD_DIR)/Makefile
+endef
+
+define Build/Configure
+ # nothing
+endef
+
+define Build/Compile
+ # nothing
+endef
+
+define Package/fff-network/install
+ $(CP) ./files/* $(1)/
+endef
+
+$(eval $(call BuildPackage,fff-network))
diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
new file mode 100644
index 0000000..aadef59
--- /dev/null
+++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
@@ -0,0 +1,158 @@
+#!/bin/sh
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+BOARD="$(uci get board.model.name)"
+. /etc/network.$BOARD
+
+if ! uci get nodewatcher. at network[0].client_interfaces; then
+ echo "Setting nodewatchers client interfaces to: $CLIENTIF"
+ uci set nodewatcher. at network[0].client_interfaces="$CLIENTIF"
+ uci commit
+fi
+
+if ! uci get network.$SWITCHDEV.ifname; then
+
+ SWITCHHW=$(swconfig list | awk '{ print $4 }')
+
+ uci set network.$SWITCHDEV=switch
+ uci set network.$SWITCHDEV.name=$SWITCHHW
+ uci set network.$SWITCHDEV.enable=1
+ uci set network.$SWITCHDEV.reset=1
+ uci set network.$SWITCHDEV.enable_vlan=1
+
+ uci set network.${SWITCHDEV}_1=switch_vlan
+ uci set network.${SWITCHDEV}_1.device=$SWITCHHW
+ uci set network.${SWITCHDEV}_1.vlan=1
+ uci set network.${SWITCHDEV}_1.ports="$CLIENT_PORTS"
+
+ echo "# Allow IPv6 RAs on WAN Port" >> /etc/sysctl.conf
+
+ if [[ "$WANDEV" = "$SWITCHDEV" ]]; then
+ uci set network.${SWITCHDEV}_2=switch_vlan
+ uci set network.${SWITCHDEV}_2.device=$SWITCHHW
+ uci set network.${SWITCHDEV}_2.vlan=2
+ uci set network.${SWITCHDEV}_2.ports="$WAN_PORTS"
+
+ echo "net.ipv6.conf.$WANDEV.2.accept_ra_defrtr = 1" >> /etc/sysctl.conf
+ echo "net.ipv6.conf.$WANDEV.2.accept_ra_pinfo = 1" >> /etc/sysctl.conf
+ echo "net.ipv6.conf.$WANDEV.2.autoconf = 1" >> /etc/sysctl.conf
+ echo "net.ipv6.conf.$WANDEV.2.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf
+ else
+ echo "net.ipv6.conf.$WANDEV.accept_ra_defrtr = 1" >> /etc/sysctl.conf
+ echo "net.ipv6.conf.$WANDEV.accept_ra_pinfo = 1" >> /etc/sysctl.conf
+ echo "net.ipv6.conf.$WANDEV.autoconf = 1" >> /etc/sysctl.conf
+ echo "net.ipv6.conf.$WANDEV.accept_ra_rtr_pref = 1" >> /etc/sysctl.conf
+ fi
+
+ uci set network.${SWITCHDEV}_3=switch_vlan
+ uci set network.${SWITCHDEV}_3.device=$SWITCHHW
+ uci set network.${SWITCHDEV}_3.vlan=3
+ uci set network.${SWITCHDEV}_3.ports="$BATMAN_PORTS"
+
+ uci set network.mesh.ifname="$SWITCHDEV.1 bat0"
+
+ uci set network.ethmesh.ifname="$SWITCHDEV.3"
+
+ if [[ "$WANDEV" = "$SWITCHDEV" ]]; then
+ uci set network.wan.ifname=$WANDEV.2
+ else
+ uci set network.wan.ifname=$WANDEV
+ fi
+
+ uci commit
+ /etc/init.d/network restart
+fi
+
+if [[ -n "$ETHMESHMAC" ]]; then
+ if uci get network.ethmesh.macaddr
+ then
+ echo "MAC for ethmesh is set already"
+ else
+ echo "Fixing MAC on eth0.3 (ethmesh)"
+ sleep 10
+ NEW_MACADDR=$(cat /sys/class/net/$ETHMESHMAC/address)
+ uci set network.ethmesh.macaddr=$NEW_MACADDR
+ uci commit
+ ifconfig eth0.3 down
+ ifconfig eth0.3 hw ether $NEW_MACADDR
+ ifconfig eth0.3 up
+ /etc/init.d/network restart
+ fi
+fi
+
+if [[ -n "$ROUTERMAC" ]]; then
+ if uci get network.mesh.macaddr
+ then
+ echo "MAC for mesh is set already"
+ else
+ echo "Fixing MAC on br-mesh (mesh)"
+ sleep 10
+ NEW_MACADDR=$(cat /sys/class/net/$ROUTERMAC/address)
+ uci set network.mesh.macaddr=$NEW_MACADDR
+ uci commit
+ ifconfig br-mesh down
+ ifconfig br-mesh hw ether $NEW_MACADDR
+ ifconfig br-mesh up
+ /etc/init.d/network restart
+ fi
+fi
+
+if [[ -n "$ETH0MAC" ]]; then
+ echo "Fixing MAC on eth0"
+ sleep 10
+ NEW_MACADDR=$(cat "/sys/class/net/${ETH0MAC}/address")
+ uci set network.eth0.macaddr=$NEW_MACADDR
+ uci commit
+ ifconfig eth0 down
+ ifconfig eth0 hw ether $NEW_MACADDR
+ ifconfig eth0 up
+ /etc/init.d/network restart
+fi
+
+if uci get network.globals.ula_prefix
+then
+ # Some time needed :(
+ sleep 5
+
+ for ip in $(ip -6 addr show br-mesh | awk '/fdff/{ print $2 }'); do
+ ip -6 addr del $ip dev br-mesh
+ done
+
+ prefix="fdff:0::/64"
+ # Set $prefix::MAC as IP
+ suffix=$(awk -F: '{ print $1$2":"$3$4":"$5$6 }' /sys/class/net/br-mesh/address)
+ addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
+ ip -6 addr add $addr dev br-mesh
+
+ uci -q del network.globals
+ uci -q set network.globals=globals
+ uci -q set network.globals.ula_prefix=$prefix
+ uci -q add_list network.mesh.ip6addr=$addr
+ uci -q set network.mesh.proto=static
+
+ # Set $prefix::1 as IP
+ suffix="1"
+ addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
+ ip -6 addr add $addr dev br-mesh
+ uci -q add_list network.mesh.ip6addr=$addr
+
+ # Set $prefix::link-local as IP
+ suffix=$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br-mesh/address)
+ addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')
+ ip -6 addr add $addr dev br-mesh
+ uci -q add_list network.mesh.ip6addr=$addr
+
+ uci -q commit network
+
+ /etc/init.d/fff-uradvd restart
+else
+ echo "IPv6 Prefix is not set"
+fi
diff --git a/src/packages/fff/fff/Makefile b/src/packages/fff/fff/Makefile
index bbfa99e..45f034e 100644
--- a/src/packages/fff/fff/Makefile
+++ b/src/packages/fff/fff/Makefile
@@ -21,6 +21,7 @@ define Package/fff-base
+fff-batman-adv-legacy \
+fff-fastd \
+fff-firewall \
+ +fff-network \
+fff-hoods
endef
--
2.1.4
Mehr Informationen über die Mailingliste franken-dev