From 6ad42be496f169e28d7eae2e19261fe111030870 Mon Sep 17 00:00:00 2001 From: Adrian Schmutzler Date: Wed, 3 Jan 2018 00:37:07 +0100 Subject: [PATCH] fff-network/fff-hoods: Only use MAC address in network lib 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 Reviewed-by: Tim Niemeyer --- .../fff-hoods/files/usr/sbin/configurehood | 5 ++-- .../files/lib/functions/fff/network | 28 +++++++++---------- .../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 00f2d1c..7f16f4e 100755 --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood @@ -288,9 +288,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 dc26938..af9b343 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 9be93cf..c706242 100755 --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork @@ -220,7 +220,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 @@ -235,7 +236,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