From patchwork Sat Nov 11 11:31:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [v2, 1/2] fff-network: Get MAC from wifi device instead of wifi network From: Adrian Schmutzler X-Patchwork-Id: 678 Message-Id: <8B8A8710-645B-47DD-86EB-E12F072FAF68@adrianschmutzler.de> To: =?ISO-8859-1?Q?Fabian_Bl=E4se?= , franken-dev@freifunk.net Date: Sat, 11 Nov 2017 12:31:53 +0100 Kann mir jemand den link zu dem pad nochmal schicken, wo wir das damals gesammelt haben? On November 11, 2017 11:39:00 AM GMT+01:00, "Fabian Bläse" wrote: From: Fabian Blaese Using wifi devices makes it possible to get mac address without having to configure wifi networks. Signed-off-by: Fabian Bläse --- Changes in v2: - function for flipping locally administered bit - use awk This patch should be tested extensively. It's important, that - br-mesh has the mac address printed on the device - w2mesh, w5mesh and ethmesh have unique mac addresses The changes for the following devices have been verified: - tl-wa850re-v1: Christian Dresel - tl-wa901nd-v2: Fabian Bläse - tl-wdr3500-v1: Tim Niemeyer - tl-wdr3600-v1: Adrian Schmutzler - tl-wdr4300-v1: Christian Dresel - tl-wdr4900-v1: Fabian Bläse - ubnt-bullet-m: Christian Dresel - ubnt-nano-m: Christian Dresel Everything from here hasn't been verified on a real device. The following devices only have one phy, so phy0 should have the same address as wXmesh: - tl-wa860re-v1 - tl-wr740n-v4 - tl-wr741nd-v2 - tl-wr741nd-v4 - ubnt-loco-m-xw - ubnt-unifi The following devices have multiple phy, so it has been systematically guessed, which phy is the correct one: - tl-wdr4310-v1 The following devices used wXap before, which should have the mac address of phyX with it's locally administered bit flipped: - tl-wr1043nd-v1 - cpe210 - cpe510 src/packages/fff/fff-network/ar71xx/network.cpe210 | 7 ++++++- src/packages/fff/fff-network/ar71xx/network.cpe510 | 7 ++++++- src/packages/fff/fff-network/ar71xx/network.tl-wa850re-v1 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wa860re-v1 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wa901nd-v2 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wdr3500-v1 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wdr3600-v1 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wdr4300-v1 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wdr4310-v1 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v1 | 7 ++++++- src/packages/fff/fff-network/ar71xx/network.tl-wr740n-v4 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v2 | 2 +- src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v4 | 2 +- src/packages/fff/fff-network/ar71xx/network.ubnt-bullet-m | 2 +- src/packages/fff/fff-network/ar71xx/network.ubnt-loco-m-xw | 2 +- src/packages/fff/fff-network/ar71xx/network.ubnt-nano-m | 2 +- src/packages/fff/fff-network/ar71xx/network.ubnt-unifi | 2 +- src/packages/fff/fff-network/files/lib/functions/fff/network | 11 +++++++++++ src/packages/fff/fff-network/mpc85xx/network.tl-wdr4900-v1 | 7 ++++++- 19 files changed, 49 insertions(+), 18 deletions(-) /sys/class/ieee80211/phy1/macaddress)") ROUTERMAC=$(cat /sys/class/net/eth0/address) diff --git a/src/packages/fff/fff-network/ar71xx/network.cpe210 b/src/packages/fff/fff-network/ar71xx/network.cpe210 index a7a91bc..7b00994 100644 --- a/src/packages/fff/fff-network/ar71xx/network.cpe210 +++ b/src/packages/fff/fff-network/ar71xx/network.cpe210 @@ -1,3 +1,5 @@ +. /lib/functions/fff/network + PORTORDER="5 4" WANDEV=eth0 @@ -6,8 +8,11 @@ CLIENT_PORTS="0t" WAN_PORTS="0t" BATMAN_PORTS="0t" +# use mac address from phy0 with 'locally administered' bit set to '1' +# only possible, because wXmesh is created first and therefore gets the 'universally administered address' + +ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/ieee80211/phy0/macaddress)") ROUTERMAC=$(cat /sys/class/net/eth0/address) -ETHMESHMAC=$(cat /sys/class/net/w2ap/address) . /etc/network.mode diff --git a/src/packages/fff/fff-network/ar71xx/network.cpe510 b/src/packages/fff/fff-network/ar71xx/network.cpe510 index d5f946f..597eb45 100644 --- a/src/packages/fff/fff-network/ar71xx/network.cpe510 +++ b/src/packages/fff/fff-network/ar71xx/network.cpe510 @@ -1,3 +1,5 @@ +. /lib/functions/fff/network + PORTORDER="5 4" WANDEV=eth0 @@ -6,7 +8,10 @@ CLIENT_PORTS="0t" WAN_PORTS="0t" BATMAN_PORTS="0t" -ETHMESHMAC=$(cat /sys/class/net/w2ap/address) +# use mac address from phy0 with 'locally administered' bit set to '1' +# only possible, because wXmesh is created first and therefore gets the 'universally administered address' + +ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/ieee80211/phy0/macaddress)") . /etc/network.mode diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wa850re-v1 b/src/packages/fff/fff-network/ar71xx/network.tl-wa850re-v1 index 7c342a6..372750c 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wa850re-v1 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wa850re-v1 @@ -7,4 +7,4 @@ ONE_PORT="YES" . /etc/network.mode -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wa860re-v1 b/src/packages/fff/fff-network/ar71xx/network.tl-wa860re-v1 index 7c342a6..372750c 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wa860re-v1 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wa860re-v1 @@ -7,4 +7,4 @@ ONE_PORT="YES" . /etc/network.mode -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wa901nd-v2 b/src/packages/fff/fff-network/ar71xx/network.tl-wa901nd-v2 index 7c342a6..372750c 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wa901nd-v2 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wa901nd-v2 @@ -7,4 +7,4 @@ ONE_PORT="YES" . /etc/network.mode -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wdr3500-v1 b/src/packages/fff/fff-network/ar71xx/network.tl-wdr3500-v1 index e859a9b..59b96df 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wdr3500-v1 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wdr3500-v1 @@ -4,4 +4,4 @@ CLIENT_PORTS="0t 1 2" WAN_PORTS= BATMAN_PORTS="0t 3 4" -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wdr3600-v1 b/src/packages/fff/fff-network/ar71xx/network.tl-wdr3600-v1 index 1ba9c24..73e7703 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wdr3600-v1 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wdr3600-v1 @@ -4,4 +4,4 @@ CLIENT_PORTS="0t 4 5" WAN_PORTS="0t 1" BATMAN_PORTS="0t 2 3" -ROUTERMAC=$(cat /sys/class/net/w5mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wdr4300-v1 b/src/packages/fff/fff-network/ar71xx/network.tl-wdr4300-v1 index 1ba9c24..73e7703 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wdr4300-v1 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wdr4300-v1 @@ -4,4 +4,4 @@ CLIENT_PORTS="0t 4 5" WAN_PORTS="0t 1" BATMAN_PORTS="0t 2 3" -ROUTERMAC=$(cat /sys/class/net/w5mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wdr4310-v1 b/src/packages/fff/fff-network/ar71xx/network.tl-wdr4310-v1 index 1ba9c24..73e7703 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wdr4310-v1 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wdr4310-v1 @@ -4,4 +4,4 @@ CLIENT_PORTS="0t 4 5" WAN_PORTS="0t 1" BATMAN_PORTS="0t 2 3" -ROUTERMAC=$(cat /sys/class/net/w5mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy1/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v1 b/src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v1 index 12f49e2..7caeaa1 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v1 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wr1043nd-v1 @@ -1,8 +1,13 @@ +. /lib/functions/fff/network + WANDEV=eth0 SWITCHDEV=eth0 CLIENT_PORTS="3 4 5t" WAN_PORTS="0 5t" BATMAN_PORTS="1 2 5t" -ETHMESHMAC=$(cat /sys/class/net/w2ap/address) +# use mac address from phy0 with 'locally administered' bit set to '1' +# only possible, because wXmesh is created first and therefore gets the 'universally administered address' + +ETHMESHMAC=$(macFlipLocalBit "$(cat /sys/class/ieee80211/phy0/macaddress)") ROUTERMAC=$(cat /sys/class/net/eth0/address) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wr740n-v4 b/src/packages/fff/fff-network/ar71xx/network.tl-wr740n-v4 index 114ba49..334e498 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wr740n-v4 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wr740n-v4 @@ -6,4 +6,4 @@ WAN_PORTS= BATMAN_PORTS="2 3 0t" ETHMESHMAC=$(cat /sys/class/net/eth1/address) -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v2 b/src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v2 index 5f2300d..c8ddd0f 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v2 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v2 @@ -6,4 +6,4 @@ WAN_PORTS= BATMAN_PORTS="3 4 0t" ETHMESHMAC=$(cat /sys/class/net/eth1/address) -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v4 b/src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v4 index 114ba49..334e498 100644 --- a/src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v4 +++ b/src/packages/fff/fff-network/ar71xx/network.tl-wr741nd-v4 @@ -6,4 +6,4 @@ WAN_PORTS= BATMAN_PORTS="2 3 0t" ETHMESHMAC=$(cat /sys/class/net/eth1/address) -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.ubnt-bullet-m b/src/packages/fff/fff-network/ar71xx/network.ubnt-bullet-m index 7c342a6..372750c 100644 --- a/src/packages/fff/fff-network/ar71xx/network.ubnt-bullet-m +++ b/src/packages/fff/fff-network/ar71xx/network.ubnt-bullet-m @@ -7,4 +7,4 @@ ONE_PORT="YES" . /etc/network.mode -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.ubnt-loco-m-xw b/src/packages/fff/fff-network/ar71xx/network.ubnt-loco-m-xw index 7c342a6..372750c 100644 --- a/src/packages/fff/fff-network/ar71xx/network.ubnt-loco-m-xw +++ b/src/packages/fff/fff-network/ar71xx/network.ubnt-loco-m-xw @@ -7,4 +7,4 @@ ONE_PORT="YES" . /etc/network.mode -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.ubnt-nano-m b/src/packages/fff/fff-network/ar71xx/network.ubnt-nano-m index 7c342a6..372750c 100644 --- a/src/packages/fff/fff-network/ar71xx/network.ubnt-nano-m +++ b/src/packages/fff/fff-network/ar71xx/network.ubnt-nano-m @@ -7,4 +7,4 @@ ONE_PORT="YES" . /etc/network.mode -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) diff --git a/src/packages/fff/fff-network/ar71xx/network.ubnt-unifi b/src/packages/fff/fff-network/ar71xx/network.ubnt-unifi index 7c342a6..372750c 100644 --- a/src/packages/fff/fff-network/ar71xx/network.ubnt-unifi +++ b/src/packages/fff/fff-network/ar71xx/network.ubnt-unifi @@ -7,4 +7,4 @@ ONE_PORT="YES" . /etc/network.mode -ROUTERMAC=$(cat /sys/class/net/w2mesh/address) +ROUTERMAC=$(cat /sys/class/ieee80211/phy0/macaddress) 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 8dd9f77..dc26938 100644 --- a/src/packages/fff/fff-network/files/lib/functions/fff/network +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network @@ -85,3 +85,14 @@ ipTidyColon() { echo "$addr" return 0 } + +macFlipLocalBit() { + # Returns given MAC-address with locally administered bit flipped + # + # Argument: MAC-address + + local mac=$1 + + echo "$mac" | awk -F: '{ printf("%02x:%s:%s:%s:%s:%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }' + return 0 +} diff --git a/src/packages/fff/fff-network/mpc85xx/network.tl-wdr4900-v1 b/src/packages/fff/fff-network/mpc85xx/network.tl-wdr4900-v1 index d293f06..9caa6af 100644 --- a/src/packages/fff/fff-network/mpc85xx/network.tl-wdr4900-v1 +++ b/src/packages/fff/fff-network/mpc85xx/network.tl-wdr4900-v1 @@ -1,8 +1,13 @@ +. /lib/functions/fff/network + WANDEV=eth0 SWITCHDEV=eth0 CLIENT_PORTS="0t 4 5" WAN_PORTS="0t 1" BATMAN_PORTS="0t 2 3" -ETHMESHMAC=$(cat /sys/class/net/w2ap/address) +# use mac address from phy1 with 'locally administered' bit set to '1' +# only possible, because wXmesh is created first and therefore gets the 'universally administered address' + +ETHMESHMAC=$(macFlipLocalBit "$(cat