Message ID | 1509697081-1911-1-git-send-email-freifunk@adrianschmutzler.de |
---|---|
State | Accepted |
Headers | show |
diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood index 3d0afc3..f785b7d 100755 --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood @@ -2,6 +2,7 @@ . /usr/share/libubox/jshn.sh . /lib/functions/fff/keyxchange +. /lib/functions/fff/network . /lib/functions/fff/wireless . /lib/functions/fff/timeserver @@ -242,12 +243,10 @@ if [ -s "$hoodfile" ]; then # Set $prefix::MAC as IP if [ -n "$prefix" ] ; then prefix="$(echo "$prefix" | sed -e 's,\\,,')" - suffix="$(awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }' /sys/class/net/br-mesh/address)" - suffix_eui="$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br-mesh/address)" - addr="$(echo "$prefix" | sed -e 's,/,'$suffix'/,')" - echo $addr | grep -q "::" || addr="$(echo "$addr" | sed -e 's,:[0:]*:,::,')" - addr_eui="$(echo "$prefix" | sed -e 's,/,'$suffix_eui'/,')" - echo $addr_eui | grep -q "::" || addr_eui="$(echo "$addr_eui" | sed -e 's,:[0:]*:,::,')" + addr="$(ipMacAssemble "$prefix" "br-mesh")" + addr="$(ipTidyColon "$addr")" + addr_eui="$(ipEUIAssemble "$prefix" "br-mesh")" + 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 done diff --git a/src/packages/fff/fff-network/files/lib/functions/fff/network b/src/packages/fff/fff-network/files/lib/functions/fff/network new file mode 100644 index 0000000..8dd9f77 --- /dev/null +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network @@ -0,0 +1,87 @@ +#!/bin/sh +# Copyright 2017 Adrian Schmutzler +# License GPLv3 + +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 + # + # Argument: name of interface (e.g. br-mesh) + + [ $# -ne "1" ] && return 1 + + local iface=$1 + + awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }' "/sys/class/net/${iface}/address" + 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 + # + # Argument: name of interface (e.g. br-mesh) + + [ $# -ne "1" ] && return 1 + + local iface=$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" + return 0 +} + +ipAssemble() { + # Concatenates a prefix (1st argument) and a suffix (2nd argument) to a merged IPv6 address + # (The prefix has to bear the subnet: fdff::/64) + # (The prefix must only contain the higher 64 bits (correct: 0:0:0:0: or 0:: - wrong: 0:0:0:0::) + + [ $# -ne "2" ] && return 1 + + local prefix=$1 + local suffix=$2 + + echo "$prefix" | sed -e 's,/,'$suffix'/,' + return 0 +} + +ipMacAssemble() { + # Concatenates a prefix (1st argument) and a MAC-based suffix (interface 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 + + suffix="$(ipMacSuffix "$iface")" + 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 + # (Details on prefix: Check ipAssemble(), details on suffix: Check ipEUISuffix()) + + [ $# -ne "2" ] && return 1 + + local prefix=$1 + local iface=$2 + + suffix="$(ipEUISuffix "$iface")" + ipAssemble "$prefix" "$suffix" + return 0 +} + +ipTidyColon() { + # Collapses zeros to :: to yield short but valid IPv6 addresses + # + # Argument: IPv6 address to be shortened + + [ $# -ne "1" ] && return 1 + + local addr=$1 + + echo "$addr" | grep -q "::" || addr="$(echo "$addr" | sed -e 's,:[0:]*:,::,')" + echo "$addr" + 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 c6b3113..d4866e4 100755 --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork @@ -9,6 +9,8 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. +. /lib/functions/fff/network + BOARD="$(uci get board.model.name)" . /etc/network.$BOARD @@ -218,8 +220,7 @@ else prefix="fdff:0::/64" # Set $prefix::MAC as IP - suffix=$(awk -F: '{ print $1$2":"$3$4":"$5$6 }' /sys/class/net/br-mesh/address) - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') + addr="$(ipMacAssemble "$prefix" "br-mesh")" ip -6 addr add $addr dev br-mesh uci -q del network.globals @@ -229,14 +230,12 @@ else uci -q set network.mesh.proto=static # Set $prefix::1 as IP - suffix="1" - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') + addr="$(ipAssemble "$prefix" "1")" ip -6 addr add $addr dev br-mesh uci -q add_list network.mesh.ip6addr=$addr # Set $prefix::link-local as IP - suffix=$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br-mesh/address) - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') + addr="$(ipEUIAssemble "$prefix" "br-mesh")" ip -6 addr add $addr dev br-mesh uci -q add_list network.mesh.ip6addr=$addr
Hi Danke. Und applied. Tim Am Freitag, den 03.11.2017, 09:18 +0100 schrieb Adrian Schmutzler: > This puts the code for creating IPv6 addresses from MAC > address and EUI into functions, so it can be reused. > > This should be particularly helpful if code is rewritten later. > > Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > > Reviewed-by: Tim Niemeyer <tim@tn-x.org> > > --- > > Changes in v2: > - Added comments to functions > > .../fff/fff-hoods/files/usr/sbin/configurehood | 11 ++- > .../fff-network/files/lib/functions/fff/network | 87 > ++++++++++++++++++++++ > .../fff-network/files/usr/sbin/configurenetwork | 11 ++- > 3 files changed, 97 insertions(+), 12 deletions(-) > create mode 100644 src/packages/fff/fff- > network/files/lib/functions/fff/network > > diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > index 3d0afc3..f785b7d 100755 > --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > @@ -2,6 +2,7 @@ > > . /usr/share/libubox/jshn.sh > . /lib/functions/fff/keyxchange > +. /lib/functions/fff/network > . /lib/functions/fff/wireless > . /lib/functions/fff/timeserver > > @@ -242,12 +243,10 @@ if [ -s "$hoodfile" ]; then > # Set $prefix::MAC as IP > if [ -n "$prefix" ] ; then > prefix="$(echo "$prefix" | sed -e 's,\\,,')" > - suffix="$(awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }' > /sys/class/net/br-mesh/address)" > - suffix_eui="$(awk -F: '{ > printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, > $6) }' /sys/class/net/br-mesh/address)" > - addr="$(echo "$prefix" | sed -e 's,/,'$suffix'/,')" > - echo $addr | grep -q "::" || addr="$(echo "$addr" | > sed -e 's,:[0:]*:,::,')" > - addr_eui="$(echo "$prefix" | sed -e > 's,/,'$suffix_eui'/,')" > - echo $addr_eui | grep -q "::" || addr_eui="$(echo > "$addr_eui" | sed -e 's,:[0:]*:,::,')" > + addr="$(ipMacAssemble "$prefix" "br-mesh")" > + addr="$(ipTidyColon "$addr")" > + addr_eui="$(ipEUIAssemble "$prefix" "br-mesh")" > + 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 > done > diff --git a/src/packages/fff/fff- > network/files/lib/functions/fff/network b/src/packages/fff/fff- > network/files/lib/functions/fff/network > new file mode 100644 > index 0000000..8dd9f77 > --- /dev/null > +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network > @@ -0,0 +1,87 @@ > +#!/bin/sh > +# Copyright 2017 Adrian Schmutzler > +# License GPLv3 > + > +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 > + # > + # Argument: name of interface (e.g. br-mesh) > + > + [ $# -ne "1" ] && return 1 > + > + local iface=$1 > + > + awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }' > "/sys/class/net/${iface}/address" > + 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 > + # > + # Argument: name of interface (e.g. br-mesh) > + > + [ $# -ne "1" ] && return 1 > + > + local iface=$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" > + return 0 > +} > + > +ipAssemble() { > + # Concatenates a prefix (1st argument) and a suffix (2nd > argument) to a merged IPv6 address > + # (The prefix has to bear the subnet: fdff::/64) > + # (The prefix must only contain the higher 64 bits (correct: > 0:0:0:0: or 0:: - wrong: 0:0:0:0::) > + > + [ $# -ne "2" ] && return 1 > + > + local prefix=$1 > + local suffix=$2 > + > + echo "$prefix" | sed -e 's,/,'$suffix'/,' > + return 0 > +} > + > +ipMacAssemble() { > + # Concatenates a prefix (1st argument) and a MAC-based > suffix (interface 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 > + > + suffix="$(ipMacSuffix "$iface")" > + 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 > + # (Details on prefix: Check ipAssemble(), details on suffix: > Check ipEUISuffix()) > + > + [ $# -ne "2" ] && return 1 > + > + local prefix=$1 > + local iface=$2 > + > + suffix="$(ipEUISuffix "$iface")" > + ipAssemble "$prefix" "$suffix" > + return 0 > +} > + > +ipTidyColon() { > + # Collapses zeros to :: to yield short but valid IPv6 > addresses > + # > + # Argument: IPv6 address to be shortened > + > + [ $# -ne "1" ] && return 1 > + > + local addr=$1 > + > + echo "$addr" | grep -q "::" || addr="$(echo "$addr" | sed -e > 's,:[0:]*:,::,')" > + echo "$addr" > + 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 c6b3113..d4866e4 100755 > --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork > +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork > @@ -9,6 +9,8 @@ > # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > # GNU General Public License for more details. > > +. /lib/functions/fff/network > + > BOARD="$(uci get board.model.name)" > . /etc/network.$BOARD > > @@ -218,8 +220,7 @@ else > > prefix="fdff:0::/64" > # Set $prefix::MAC as IP > - suffix=$(awk -F: '{ print $1$2":"$3$4":"$5$6 }' > /sys/class/net/br-mesh/address) > - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') > + addr="$(ipMacAssemble "$prefix" "br-mesh")" > ip -6 addr add $addr dev br-mesh > > uci -q del network.globals > @@ -229,14 +230,12 @@ else > uci -q set network.mesh.proto=static > > # Set $prefix::1 as IP > - suffix="1" > - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') > + addr="$(ipAssemble "$prefix" "1")" > ip -6 addr add $addr dev br-mesh > uci -q add_list network.mesh.ip6addr=$addr > > # Set $prefix::link-local as IP > - suffix=$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", > xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br- > mesh/address) > - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') > + addr="$(ipEUIAssemble "$prefix" "br-mesh")" > ip -6 addr add $addr dev br-mesh > uci -q add_list network.mesh.ip6addr=$addr > > -- > 2.7.4 >
Hi, huch, das ging jetzt aber schnell. Trotzdem noch ne kleine Anmerkung s. unten Am 03.11.2017 um 09:30 schrieb Tim Niemeyer: > Hi > > Danke. > > Und applied. > > Tim > > Am Freitag, den 03.11.2017, 09:18 +0100 schrieb Adrian Schmutzler: >> This puts the code for creating IPv6 addresses from MAC >> address and EUI into functions, so it can be reused. >> >> This should be particularly helpful if code is rewritten later. >> >> Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> >> >> Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> >> >> Reviewed-by: Tim Niemeyer <tim@tn-x.org> >> >> --- >> >> Changes in v2: >> - Added comments to functions >> >> .../fff/fff-hoods/files/usr/sbin/configurehood | 11 ++- >> .../fff-network/files/lib/functions/fff/network | 87 >> ++++++++++++++++++++++ >> .../fff-network/files/usr/sbin/configurenetwork | 11 ++- >> 3 files changed, 97 insertions(+), 12 deletions(-) >> create mode 100644 src/packages/fff/fff- >> network/files/lib/functions/fff/network >> >> diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood >> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood >> index 3d0afc3..f785b7d 100755 >> --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood >> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood >> @@ -2,6 +2,7 @@ >> >> . /usr/share/libubox/jshn.sh >> . /lib/functions/fff/keyxchange >> +. /lib/functions/fff/network >> . /lib/functions/fff/wireless >> . /lib/functions/fff/timeserver >> >> @@ -242,12 +243,10 @@ if [ -s "$hoodfile" ]; then >> # Set $prefix::MAC as IP >> if [ -n "$prefix" ] ; then >> prefix="$(echo "$prefix" | sed -e 's,\\,,')" >> - suffix="$(awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }' >> /sys/class/net/br-mesh/address)" >> - suffix_eui="$(awk -F: '{ >> printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, >> $6) }' /sys/class/net/br-mesh/address)" >> - addr="$(echo "$prefix" | sed -e 's,/,'$suffix'/,')" >> - echo $addr | grep -q "::" || addr="$(echo "$addr" | >> sed -e 's,:[0:]*:,::,')" >> - addr_eui="$(echo "$prefix" | sed -e >> 's,/,'$suffix_eui'/,')" >> - echo $addr_eui | grep -q "::" || addr_eui="$(echo >> "$addr_eui" | sed -e 's,:[0:]*:,::,')" >> + addr="$(ipMacAssemble "$prefix" "br-mesh")" >> + addr="$(ipTidyColon "$addr")" >> + addr_eui="$(ipEUIAssemble "$prefix" "br-mesh")" >> + 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 >> done >> diff --git a/src/packages/fff/fff- >> network/files/lib/functions/fff/network b/src/packages/fff/fff- >> network/files/lib/functions/fff/network >> new file mode 100644 >> index 0000000..8dd9f77 >> --- /dev/null >> +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network >> @@ -0,0 +1,87 @@ >> +#!/bin/sh >> +# Copyright 2017 Adrian Schmutzler >> +# License GPLv3 >> + >> +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 >> + # >> + # Argument: name of interface (e.g. br-mesh) >> + >> + [ $# -ne "1" ] && return 1 >> + >> + local iface=$1 >> + >> + awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }' >> "/sys/class/net/${iface}/address" >> + 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 >> + # >> + # Argument: name of interface (e.g. br-mesh) >> + >> + [ $# -ne "1" ] && return 1 >> + >> + local iface=$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" >> + return 0 >> +} >> + >> +ipAssemble() { >> + # Concatenates a prefix (1st argument) and a suffix (2nd >> argument) to a merged IPv6 address >> + # (The prefix has to bear the subnet: fdff::/64) >> + # (The prefix must only contain the higher 64 bits (correct: >> 0:0:0:0: or 0:: - wrong: 0:0:0:0::) mir gefällt die Vorgabe 0:0:0:0: nicht so gut. Man muss nen vollständigen Prefix dann z.B. so mitgeben fd43:5602:29bd:9:/64 , was keine gültige v6 Notierung ist. Könnte man vorher noch wegbügeln. z.B. so sed -e 's,\(\([[:digit:]]*:\)\{4\}\):,\1,' | sed -e 's,/,'$suffix'/,' Robert >> + >> + [ $# -ne "2" ] && return 1 >> + >> + local prefix=$1 >> + local suffix=$2 >> + >> + echo "$prefix" | sed -e 's,/,'$suffix'/,' >> + return 0 >> +} >> + >> +ipMacAssemble() { >> + # Concatenates a prefix (1st argument) and a MAC-based >> suffix (interface 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 >> + >> + suffix="$(ipMacSuffix "$iface")" >> + 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 >> + # (Details on prefix: Check ipAssemble(), details on suffix: >> Check ipEUISuffix()) >> + >> + [ $# -ne "2" ] && return 1 >> + >> + local prefix=$1 >> + local iface=$2 >> + >> + suffix="$(ipEUISuffix "$iface")" >> + ipAssemble "$prefix" "$suffix" >> + return 0 >> +} >> + >> +ipTidyColon() { >> + # Collapses zeros to :: to yield short but valid IPv6 >> addresses >> + # >> + # Argument: IPv6 address to be shortened >> + >> + [ $# -ne "1" ] && return 1 >> + >> + local addr=$1 >> + >> + echo "$addr" | grep -q "::" || addr="$(echo "$addr" | sed -e >> 's,:[0:]*:,::,')" >> + echo "$addr" >> + 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 c6b3113..d4866e4 100755 >> --- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork >> +++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork >> @@ -9,6 +9,8 @@ >> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> # GNU General Public License for more details. >> >> +. /lib/functions/fff/network >> + >> BOARD="$(uci get board.model.name)" >> . /etc/network.$BOARD >> >> @@ -218,8 +220,7 @@ else >> >> prefix="fdff:0::/64" >> # Set $prefix::MAC as IP >> - suffix=$(awk -F: '{ print $1$2":"$3$4":"$5$6 }' >> /sys/class/net/br-mesh/address) >> - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') >> + addr="$(ipMacAssemble "$prefix" "br-mesh")" >> ip -6 addr add $addr dev br-mesh >> >> uci -q del network.globals >> @@ -229,14 +230,12 @@ else >> uci -q set network.mesh.proto=static >> >> # Set $prefix::1 as IP >> - suffix="1" >> - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') >> + addr="$(ipAssemble "$prefix" "1")" >> ip -6 addr add $addr dev br-mesh >> uci -q add_list network.mesh.ip6addr=$addr >> >> # Set $prefix::link-local as IP >> - suffix=$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", >> xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br- >> mesh/address) >> - addr=$(echo $prefix | sed -e 's/\//'$suffix'\//') >> + addr="$(ipEUIAssemble "$prefix" "br-mesh")" >> ip -6 addr add $addr dev br-mesh >> uci -q add_list network.mesh.ip6addr=$addr >> >> -- >> 2.7.4 >> >>