[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