[v2,1/2] fff-network/fff-hoods: Only use MAC address in network lib

Submitted by Adrian Schmutzler on Jan. 2, 2018, 11:37 p.m.

Details

Message ID 1514936228-49218-1-git-send-email-freifunk@adrianschmutzler.de
State Accepted
Headers show

Commit Message

Adrian Schmutzler Jan. 2, 2018, 11:37 p.m.
Previously, IPv6 addresses were constructed by reading from
the device config file in the function. To have more options,
it is better to use the address itself as parameter.

By this way we can decide what we use for getting the MAC when
calling.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
---
 .../fff/fff-hoods/files/usr/sbin/configurehood     |  5 ++--
 .../fff-network/files/lib/functions/fff/network    | 28 +++++++++++-----------
 .../fff-network/files/usr/sbin/configurenetwork    |  5 ++--
 3 files changed, 20 insertions(+), 18 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
index be81c48..3f74599 100755
--- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
+++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
@@ -284,9 +284,10 @@  if [ -s "$hoodfile" ]; then
 	# Set $prefix::MAC as IP
 	if [ -n "$prefix" ] ; then
 		prefix="$(echo "$prefix" | sed -e 's,\\,,')"
-		addr="$(ipMacAssemble "$prefix" "br-mesh")"
+		mac="$(cat "/sys/class/net/br-mesh/address")"
+		addr="$(ipMacAssemble "$prefix" "$mac")"
 		addr="$(ipTidyColon "$addr")"
-		addr_eui="$(ipEUIAssemble "$prefix" "br-mesh")"
+		addr_eui="$(ipEUIAssemble "$prefix" "$mac")"
 		addr_eui="$(ipTidyColon "$addr_eui")"
 		for ip in $(ip -6 addr show dev br-mesh | grep inet6 | grep -v -e " $addr" -e " $addr_eui" -e " fe80::" -e " fdff::" | cut -f6 -d " "); do
 			ip -6 addr del "$ip" dev br-mesh
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 a8d53b3..61cf7f1 100644
--- a/src/packages/fff/fff-network/files/lib/functions/fff/network
+++ b/src/packages/fff/fff-network/files/lib/functions/fff/network
@@ -4,29 +4,29 @@ 
 
 ipMacSuffix() {
 	# Returns the lower 64 bits of an IPv6 address (0:aabb:ccdd:eeff)
-	# based on the mac address (aa:bb:cc:bb:ee:ff) of a specified interface
+	# based on the provided MAC address (aa:bb:cc:bb:ee:ff)
 	#
-	# Argument: name of interface (e.g. br-mesh)
+	# Argument: MAC address (with colons)
 
 	[ $# -ne "1" ] && return 1
 
-	local iface=$1
+	local mac=$1
 
-	awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }' "/sys/class/net/${iface}/address"
+	echo "$mac" | awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }'
 	return 0
 }
 
 ipEUISuffix() {
 	# Returns the EUI (interface ID, a8bb:ccff:fedd:eeff)
-	# based on the mac address (aa:bb:cc:bb:ee:ff) of a specified interface
+	# based on the provided MAC address (aa:bb:cc:bb:ee:ff)
 	#
-	# Argument: name of interface (e.g. br-mesh)
+	# Argument: MAC address (with colons)
 
 	[ $# -ne "1" ] && return 1
 
-	local iface=$1
+	local mac=$1
 
-	awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }' "/sys/class/net/${iface}/address"
+	echo "$mac" | awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }'
 	return 0
 }
 
@@ -45,29 +45,29 @@  ipAssemble() {
 }
 
 ipMacAssemble() {
-	# Concatenates a prefix (1st argument) and a MAC-based suffix (interface as 2nd argument) to a merged IPv6 address
+	# Concatenates a prefix (1st argument) and a MAC-based suffix (MAC address as 2nd argument) to a merged IPv6 address
 	# (Details on prefix: Check ipAssemble(), details on suffix: Check ipMacSuffix())
 
 	[ $# -ne "2" ] && return 1
 
 	local prefix=$1
-	local iface=$2
+	local mac=$2
 
-	suffix="$(ipMacSuffix "$iface")"
+	suffix="$(ipMacSuffix "$mac")"
 	ipAssemble "$prefix" "$suffix"
 	return 0
 }
 
 ipEUIAssemble() {
-	# Concatenates a prefix (1st argument) and an EUI-based suffix (interface as 2nd argument) to a merged IPv6 address
+	# Concatenates a prefix (1st argument) and an EUI-based suffix (MAC address as 2nd argument) to a merged IPv6 address
 	# (Details on prefix: Check ipAssemble(), details on suffix: Check ipEUISuffix())
 
 	[ $# -ne "2" ] && return 1
 
 	local prefix=$1
-	local iface=$2
+	local mac=$2
 
-	suffix="$(ipEUISuffix "$iface")"
+	suffix="$(ipEUISuffix "$mac")"
 	ipAssemble "$prefix" "$suffix"
 	return 0
 }
diff --git a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
index ef8dee1..ac17514 100755
--- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
+++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
@@ -166,7 +166,8 @@  else
 
     prefix="fdff:0::/64"
     # Set $prefix::MAC as IP
-    addr="$(ipMacAssemble "$prefix" "br-mesh")"
+    mac="$(cat "/sys/class/net/br-mesh/address")"
+    addr="$(ipMacAssemble "$prefix" "$mac")"
     ip -6 addr add $addr dev br-mesh
 
     uci -q del network.globals
@@ -181,7 +182,7 @@  else
     uci -q add_list network.mesh.ip6addr=$addr
 
     # Set $prefix::link-local as IP
-    addr="$(ipEUIAssemble "$prefix" "br-mesh")"
+    addr="$(ipEUIAssemble "$prefix" "$mac")"
     ip -6 addr add $addr dev br-mesh
     uci -q add_list network.mesh.ip6addr=$addr
 

Comments

Tim Niemeyer Jan. 20, 2018, 1:48 p.m.
Hi

Reviewed und applied.

Tim

Am Mittwoch, den 03.01.2018, 00:37 +0100 schrieb Adrian Schmutzler:
> Previously, IPv6 addresses were constructed by reading from
> the device config file in the function. To have more options,
> it is better to use the address itself as parameter.
> 
> By this way we can decide what we use for getting the MAC when
> calling.
> 
> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
> ---
>  .../fff/fff-hoods/files/usr/sbin/configurehood     |  5 ++--
>  .../fff-network/files/lib/functions/fff/network    | 28 +++++++++++-
> ----------
>  .../fff-network/files/usr/sbin/configurenetwork    |  5 ++--
>  3 files changed, 20 insertions(+), 18 deletions(-)
> 
> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> index be81c48..3f74599 100755
> --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> @@ -284,9 +284,10 @@ if [ -s "$hoodfile" ]; then
>  	# Set $prefix::MAC as IP
>  	if [ -n "$prefix" ] ; then
>  		prefix="$(echo "$prefix" | sed -e 's,\\,,')"
> -		addr="$(ipMacAssemble "$prefix" "br-mesh")"
> +		mac="$(cat "/sys/class/net/br-mesh/address")"
> +		addr="$(ipMacAssemble "$prefix" "$mac")"
>  		addr="$(ipTidyColon "$addr")"
> -		addr_eui="$(ipEUIAssemble "$prefix" "br-mesh")"
> +		addr_eui="$(ipEUIAssemble "$prefix" "$mac")"
>  		addr_eui="$(ipTidyColon "$addr_eui")"
>  		for ip in $(ip -6 addr show dev br-mesh | grep inet6
> | grep -v -e " $addr" -e " $addr_eui" -e " fe80::" -e " fdff::" | cut
> -f6 -d " "); do
>  			ip -6 addr del "$ip" dev br-mesh
> 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 a8d53b3..61cf7f1 100644
> --- a/src/packages/fff/fff-network/files/lib/functions/fff/network
> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network
> @@ -4,29 +4,29 @@
>  
>  ipMacSuffix() {
>  	# Returns the lower 64 bits of an IPv6 address
> (0:aabb:ccdd:eeff)
> -	# based on the mac address (aa:bb:cc:bb:ee:ff) of a
> specified interface
> +	# based on the provided MAC address (aa:bb:cc:bb:ee:ff)
>  	#
> -	# Argument: name of interface (e.g. br-mesh)
> +	# Argument: MAC address (with colons)
>  
>  	[ $# -ne "1" ] && return 1
>  
> -	local iface=$1
> +	local mac=$1
>  
> -	awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }'
> "/sys/class/net/${iface}/address"
> +	echo "$mac" | awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }'
>  	return 0
>  }
>  
>  ipEUISuffix() {
>  	# Returns the EUI (interface ID, a8bb:ccff:fedd:eeff)
> -	# based on the mac address (aa:bb:cc:bb:ee:ff) of a
> specified interface
> +	# based on the provided MAC address (aa:bb:cc:bb:ee:ff)
>  	#
> -	# Argument: name of interface (e.g. br-mesh)
> +	# Argument: MAC address (with colons)
>  
>  	[ $# -ne "1" ] && return 1
>  
> -	local iface=$1
> +	local mac=$1
>  
> -	awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n",
> xor(("0x"$1),2), $2, $3, $4, $5, $6) }'
> "/sys/class/net/${iface}/address"
> +	echo "$mac" | awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n",
> xor(("0x"$1),2), $2, $3, $4, $5, $6) }'
>  	return 0
>  }
>  
> @@ -45,29 +45,29 @@ ipAssemble() {
>  }
>  
>  ipMacAssemble() {
> -	# Concatenates a prefix (1st argument) and a MAC-based
> suffix (interface as 2nd argument) to a merged IPv6 address
> +	# Concatenates a prefix (1st argument) and a MAC-based
> suffix (MAC address as 2nd argument) to a merged IPv6 address
>  	# (Details on prefix: Check ipAssemble(), details on suffix:
> Check ipMacSuffix())
>  
>  	[ $# -ne "2" ] && return 1
>  
>  	local prefix=$1
> -	local iface=$2
> +	local mac=$2
>  
> -	suffix="$(ipMacSuffix "$iface")"
> +	suffix="$(ipMacSuffix "$mac")"
>  	ipAssemble "$prefix" "$suffix"
>  	return 0
>  }
>  
>  ipEUIAssemble() {
> -	# Concatenates a prefix (1st argument) and an EUI-based
> suffix (interface as 2nd argument) to a merged IPv6 address
> +	# Concatenates a prefix (1st argument) and an EUI-based
> suffix (MAC address as 2nd argument) to a merged IPv6 address
>  	# (Details on prefix: Check ipAssemble(), details on suffix:
> Check ipEUISuffix())
>  
>  	[ $# -ne "2" ] && return 1
>  
>  	local prefix=$1
> -	local iface=$2
> +	local mac=$2
>  
> -	suffix="$(ipEUISuffix "$iface")"
> +	suffix="$(ipEUISuffix "$mac")"
>  	ipAssemble "$prefix" "$suffix"
>  	return 0
>  }
> diff --git a/src/packages/fff/fff-
> network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-
> network/files/usr/sbin/configurenetwork
> index ef8dee1..ac17514 100755
> --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork
> @@ -166,7 +166,8 @@ else
>  
>      prefix="fdff:0::/64"
>      # Set $prefix::MAC as IP
> -    addr="$(ipMacAssemble "$prefix" "br-mesh")"
> +    mac="$(cat "/sys/class/net/br-mesh/address")"
> +    addr="$(ipMacAssemble "$prefix" "$mac")"
>      ip -6 addr add $addr dev br-mesh
>  
>      uci -q del network.globals
> @@ -181,7 +182,7 @@ else
>      uci -q add_list network.mesh.ip6addr=$addr
>  
>      # Set $prefix::link-local as IP
> -    addr="$(ipEUIAssemble "$prefix" "br-mesh")"
> +    addr="$(ipEUIAssemble "$prefix" "$mac")"
>      ip -6 addr add $addr dev br-mesh
>      uci -q add_list network.mesh.ip6addr=$addr
>  
> -- 
> 2.7.4
>