[PATCH v4 1/2] fff-network: Introduce function to set MAC on device
Adrian Schmutzler
freifunk at adrianschmutzler.de
So Mär 4 01:48:32 CET 2018
Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
---
Changes in v2:
- Suppress output
Changes in v3:
- Rename iface and dev in explanation. The variables were not
renamed, as shorter is better here.
Changes in v4:
- Rebased
---
.../fff-network/files/lib/functions/fff/network | 31 +++++++++++++++++++
.../fff-network/files/usr/sbin/configurenetwork | 36 +++-------------------
2 files changed, 35 insertions(+), 32 deletions(-)
diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/network b/src/packages/fff/fff-network/files/lib/functions/fff/network
index 2e1d6f8..881e335 100644
--- a/src/packages/fff/fff-network/files/lib/functions/fff/network
+++ b/src/packages/fff/fff-network/files/lib/functions/fff/network
@@ -130,3 +130,34 @@ disableAutoConf() {
setAutoConf "$iface" "0"
}
+
+fixMac() {
+ # Update MAC address on device/interface
+ #
+ # fixMac <newmac> <physdev> <interface> <overwrite (optional)>
+ #
+ # newmac: MAC address to be set
+ # physdev: Device name to be updated as in ifconfig (e.g. br-mesh)
+ # interface: Interface to be updated as in uci (e.g. mesh)
+ # overwrite: If non-zero, the MAC is always replaced; if not set, the MAC is only written if none is present
+
+ local newmac=$1
+ local dev=$2
+ local iface=$3
+ local overwrite=$4
+
+ if uci -q get "network.${iface}.macaddr" > /dev/null && [ ! -n "$overwrite" ] ; then
+ echo "MAC for ${iface} is already set"
+ else
+ echo "Fixing MAC on ${dev} (${iface})"
+ sleep 10
+
+ uci set "network.${iface}.macaddr=$newmac"
+ uci -q commit network
+
+ ifconfig "$dev" down
+ ifconfig "$dev" hw ether "$newmac"
+ ifconfig "$dev" up
+ /etc/init.d/network restart
+ fi
+}
diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
index 4658c04..f0fca4b 100755
--- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
+++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
@@ -142,40 +142,12 @@ fi
/etc/init.d/network restart
-if [[ -n "$ETHMESHMAC" ]]; then
- if uci get network.ethmesh.macaddr
- then
- echo "MAC for ethmesh is set already"
- else
- echo "Fixing MAC on $SWITCHDEV.3 (ethmesh)"
- sleep 10
-
- uci set network.ethmesh.macaddr=$ETHMESHMAC
- uci commit network
-
- ifconfig $SWITCHDEV.3 down
- ifconfig $SWITCHDEV.3 hw ether $ETHMESHMAC
- ifconfig $SWITCHDEV.3 up
- /etc/init.d/network restart
- fi
+if [ -n "$ETHMESHMAC" ]; then
+ fixMac "$ETHMESHMAC" "${SWITCHDEV}.3" "ethmesh"
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
-
- uci set network.mesh.macaddr=$ROUTERMAC
- uci commit network
-
- ifconfig br-mesh down
- ifconfig br-mesh hw ether $ROUTERMAC
- ifconfig br-mesh up
- /etc/init.d/network restart
- fi
+if [ -n "$ROUTERMAC" ]; then
+ fixMac "$ROUTERMAC" "br-mesh" "mesh"
fi
if [[ -n "$ETH0MAC" ]]; then
--
2.7.4
Mehr Informationen über die Mailingliste franken-dev