[PATCH 1/2] fff-network: Introduce function to set MAC on device

Tim Niemeyer tim at tn-x.org
Mo Jan 1 12:55:57 CET 2018


Hi

Am Sonntag, den 31.12.2017, 16:18 +0100 schrieb mail at adrianschmutzler.de:
[..]
> > > +
> > > +fixMac() {
> > > +	# Update MAC address on device/interface
> > > +	#
> > > +	# fixMac <newmac> <dev> <iface> <overwrite (optional)>
> > 
> > <dev> ist hier mehr oder weniger überflüssig.
> > <iface> würde ich in <interface> (entsprechend UCI) umbenennen
> > 
> > Wir können <dev> weg lassen, da ifname im UCI ein Pflicht-Feld ist.
> > Lediglich einige Sondersachen wie z.B. pptp oder wifi devices haben
> > das
> > nicht. Natürlich wird die Funktion damit eingeschränkt und wir
> > können sie
> > nicht auf WiFi devices einsetzen. Aber ich bin mir da eh nicht so
> > sicher, ob das
> > überhaupt so problemlos geht die MAC auf unseren WiFi devices zu
> > ändern.
> > Wir haben das nie gemacht.
> > 
> > Ich würde es also wirklich lieber weg lassen und im Kommentar
> > erwähnen,
> > dass das nicht auf WiFi devices geht.
> 
> Bei meinem 1043 ist ifname für 'mesh': 'eth0.1 bat0'. Ich will aber
> mit ifconfig $dev die MAC von br-mesh ändern.
Stimmt. Hast du vollkommen Recht!

Dann könnten wir das vielleicht so machen:
---
# cat /tmp/test.sh
#!/bin/sh

. /lib/functions/network.sh
network_get_physdev var "mesh"
echo $var
network_get_physdev var "ethmesh"
echo $var
network_get_physdev var "w2mesh"
echo $var
---
# /tmp/test.sh
br-mesh
eth0.3
w2mesh
---

Tim

> 
> > 
> > > +	#
> > > +	# newmac: MAC address to be set
> > > +	# dev: Device to be updated (e.g. br-mesh)
> > > +	# iface: Interface to be updated (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 get "network.${iface}.macaddr" && [ ! -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 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 96c223d..7f34d6f 100755
> > > --- a/src/packages/fff/fff-
> > > network/files/usr/sbin/configurenetwork
> > > +++ b/src/packages/fff/fff-
> > > network/files/usr/sbin/configurenetwork
> > > @@ -157,40 +157,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"
> > 
> > Da durch, dass wir hier das harte Interface dann nicht mehr
> > brauchen,
> > könnten wir bei den ONE_PORT's auch einfach die ETHMESHMAC auf
> > "$(macFlipLocalBit "$ROUTERMAC")"
> > setzen.
> > 
> > Tim
> > 
> > >  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"
> 
> Hier wird das Ganze ausgelöst. Da brauchen wir dev und iface, oder?
> 
> Grüße
> 
> Adrian
> 
> > >  fi
> > > 
> > >  if [[ -n "$ETH0MAC" ]]; then
> > > --
> > > 2.7.4
> > > 
> 
> 
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 488 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20180101/0f6900a7/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev