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

mail at adrianschmutzler.de mail at adrianschmutzler.de
So Dez 31 16:18:52 CET 2017


Hallo Tim,

mir ist nicht klar, wie das ohne <dev> für mesh/br-mesh funktionieren soll. Siehe unten...

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf
> Of Tim Niemeyer
> Sent: Sonntag, 31. Dezember 2017 16:07
> To: Adrian Schmutzler <freifunk at adrianschmutzler.de>; franken-
> dev at freifunk.net
> Subject: Re: [PATCH 1/2] fff-network: Introduce function to set MAC on
> device
> 
> Hi Adrian
> 
> Am Freitag, den 22.12.2017, 18:03 +0100 schrieb Adrian Schmutzler:
> > Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
> >
> > ---
> >
> > This patch requires the patch
> > - fff-network: Commit only network
> > which must be applied BEFOREHAND.
> > ---
> >  .../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 dc26938..95edba1 100644
> > --- a/src/packages/fff/fff-network/files/lib/functions/fff/network
> > +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network
> > @@ -96,3 +96,34 @@ macFlipLocalBit() {
> >  	echo "$mac" | awk -F: '{ printf("%02x:%s:%s:%s:%s:%s\n",
> > xor(("0x"$1),2), $2, $3, $4, $5, $6) }'
> >  	return 0
> >  }
> > +
> > +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.

> 
> > +	#
> > +	# 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
> >



Mehr Informationen über die Mailingliste franken-dev