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

Adrian Schmutzler mail at adrianschmutzler.de
Mo Jan 1 14:04:04 CET 2018


Hallo Tim,

ich glaube, ich habe verstanden.

Ich würde es allerdings bevorzugen, wenn wir dafür einen eigenen patch auf Basis meines jetzigen machen. Dann haben wir das kleinschrittiger.

So können wir erstmal das w2mesh im 2/2 loswerden und dann können wir das ganze noch schöner machen.

Grüße

Adrian

On January 1, 2018 12:55:57 PM GMT+01:00, Tim Niemeyer <tim at tn-x.org> wrote:
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 HTML-Daten wurde abgetrennt...
URL: <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20180101/1a927954/attachment.html>


Mehr Informationen über die Mailingliste franken-dev