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

mail at adrianschmutzler.de mail at adrianschmutzler.de
Sa Jan 20 13:52:55 CET 2018


Hallo Tim,

ich habe die Änderung bewusst nicht eingebaut, weil es mir so lieber ist.

Meine Lösung stellt eine Verbesserung der alten Lösung dar, aber eine weniger weitreichende als dir vorschwebt. Ich möchte aber bewusst die Devices (zunächst) separat festlegen. Deine automatische Bestimmung stellt dann eine weitere Verallgemeinerung dar, die ich in einem eigenen Patch sehen (probieren, testen, ...) möchte. Dies ist auf Basis dieses Patches dann relativ einfach möglich.

Da wir also hier zunächst ein effektive Verbesserung haben, und das von dir beschriebene Problem etwas ist, was vorher schon da war, möchte ich diesen Patch gerne so lassen. Danach können wir gerne separat über die allgemeinere Lösung diskutieren. Entsprechend bitte ich, auf dieser Basis zu reviewen.

Ob ich iface oder interface schreibe ist mir hingegen egal, das kann ich gerne noch ändern.

Beste Grüße

Adrian


> -----Original Message-----
> From: Tim Niemeyer [mailto:tim at tn-x.org]
> Sent: Samstag, 20. Januar 2018 13:45
> To: Adrian Schmutzler <freifunk at adrianschmutzler.de>; franken-
> dev at freifunk.net
> Subject: Re: [PATCH v2 1/2] fff-network: Introduce function to set MAC on
> device
> 
> Moin Adrian
> 
> Von meinen bisherigen Review-Anmerkungen wurde offenbar nichts
> umgesetzt, vielleicht vergessen/übersehen. Daher hier nochmal.
> 
> Am Mittwoch, den 03.01.2018, 00:34 +0100 schrieb Adrian Schmutzler:
> > > Signed-off-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
> >
> > ---
> >
> > Changes in v2:
> > - Suppress output
> > ---
> >  .../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..a8d53b3 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)>
> <iface> würde ich in <interface> (entsprechend UCI) umbenennen <dev>
> hier ganz raus
> 
> > +	#
> > > +	# 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
> dev raus.
> 
> > +	local iface=$3
> > +	local overwrite=$4
> 
> Hier dann:
> network_get_physdev dev $interface
> 
> Und natürlich im Header noch ergänzen:
> . /lib/functions/network.sh
> 
> > +
> > > +	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 df50540..281f4d4 100755
> > --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> > +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> > @@ -159,40 +159,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"
> >  fi
> >
> >  if [[ -n "$ETH0MAC" ]]; then
> > --
> > 2.7.4
> >



Mehr Informationen über die Mailingliste franken-dev