@@ -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
+}
@@ -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
Signed-off-by: Adrian Schmutzler <freifunk@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(-)