From patchwork Sun Mar 4 00:48:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [v4,1/2] fff-network: Introduce function to set MAC on device From: Adrian Schmutzler X-Patchwork-Id: 812 Message-Id: <1520124513-4029-1-git-send-email-freifunk@adrianschmutzler.de> To: franken-dev@freifunk.net Date: Sun, 4 Mar 2018 01:48:32 +0100 Signed-off-by: Adrian Schmutzler --- 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: 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