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

Tim Niemeyer tim at tn-x.org
So Dez 31 16:07:09 CET 2017


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.

> +	#
> +	# 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"
>  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/20171231/926863a5/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev