Message ID | 1508351692-24675-1-git-send-email-freifunk@adrianschmutzler.de |
---|---|
State | Changes Requested |
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 88c0daa..e60812d 100755 --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood @@ -1,6 +1,7 @@ #!/bin/sh . /usr/share/libubox/jshn.sh +. /lib/functions/fff/network . /lib/functions/fff/wireless . /lib/functions/fff/timeserver @@ -205,12 +206,10 @@ if [ -s /tmp/keyxchangev2data ]; 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..f16d671 --- /dev/null +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network @@ -0,0 +1,63 @@ +#!/bin/sh +# Copyright 2017 Adrian Schmutzler +# License GPLv3 + +ipMacSuffix() { + [ $# -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() { + [ $# -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() { + [ $# -ne "2" ] && return 1 + + local prefix=$1 + local suffix=$2 + + echo "$prefix" | sed -e 's,/,'$suffix'/,' + return 0 +} + +ipMacAssemble() { + [ $# -ne "2" ] && return 1 + + local prefix=$1 + local iface=$2 + + suffix="$(ipMacSuffix "$iface")" + ipAssemble "$prefix" "$suffix" + return 0 +} + +ipEUIAssemble() { + [ $# -ne "2" ] && return 1 + + local prefix=$1 + local iface=$2 + + suffix="$(ipEUISuffix "$iface")" + ipAssemble "$prefix" "$suffix" + return 0 +} + +ipTidyColon() { + [ $# -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 Wenn du mir noch Kommentare an die Funktionen schreibst, kannst du mein Reviewed-by gern anhängen. Tim Am Mittwoch, den 18.10.2017, 20:34 +0200 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> > --- > .../fff/fff-hoods/files/usr/sbin/configurehood | 11 ++-- > .../fff-network/files/lib/functions/fff/network | 63 ++++++++++++++++++++++ > .../fff-network/files/usr/sbin/configurenetwork | 11 ++-- > 3 files changed, 73 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 88c0daa..e60812d 100755 > --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > @@ -1,6 +1,7 @@ > #!/bin/sh > > . /usr/share/libubox/jshn.sh > +. /lib/functions/fff/network > . /lib/functions/fff/wireless > . /lib/functions/fff/timeserver > > @@ -205,12 +206,10 @@ if [ -s /tmp/keyxchangev2data ]; 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..f16d671 > --- /dev/null > +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network > @@ -0,0 +1,63 @@ > +#!/bin/sh > +# Copyright 2017 Adrian Schmutzler > +# License GPLv3 > + > +ipMacSuffix() { > + [ $# -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() { > + [ $# -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() { > + [ $# -ne "2" ] && return 1 > + > + local prefix=$1 > + local suffix=$2 > + > + echo "$prefix" | sed -e 's,/,'$suffix'/,' > + return 0 > +} > + > +ipMacAssemble() { > + [ $# -ne "2" ] && return 1 > + > + local prefix=$1 > + local iface=$2 > + > + suffix="$(ipMacSuffix "$iface")" > + ipAssemble "$prefix" "$suffix" > + return 0 > +} > + > +ipEUIAssemble() { > + [ $# -ne "2" ] && return 1 > + > + local prefix=$1 > + local iface=$2 > + > + suffix="$(ipEUISuffix "$iface")" > + ipAssemble "$prefix" "$suffix" > + return 0 > +} > + > +ipTidyColon() { > + [ $# -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 >
Bin mir nicht ganz sicher, ob ich dich richtig verstanden habe: Ich soll zu den Funktionen Kommentare schreiben, was sie tun? Und dann den Patch nochmal schicken, mit deinem Reviewed-by gleich drin? Grüße Adrian > -----Original Message----- > From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf > Of Tim Niemeyer > Sent: Donnerstag, 2. November 2017 22:28 > To: Adrian Schmutzler <freifunk@adrianschmutzler.de>; franken- > dev@freifunk.net > Subject: Re: [PATCH] fff-network/fff-hoods: Create functions for IPv6 > rewriting > > Hi > > Wenn du mir noch Kommentare an die Funktionen schreibst, kannst du mein > Reviewed-by gern anhängen. > > Tim > > Am Mittwoch, den 18.10.2017, 20:34 +0200 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> > > --- > > .../fff/fff-hoods/files/usr/sbin/configurehood | 11 ++-- > > .../fff-network/files/lib/functions/fff/network | 63 > ++++++++++++++++++++++ > > .../fff-network/files/usr/sbin/configurenetwork | 11 ++-- > > 3 files changed, 73 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 88c0daa..e60812d 100755 > > --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > > +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > > @@ -1,6 +1,7 @@ > > #!/bin/sh > > > > . /usr/share/libubox/jshn.sh > > +. /lib/functions/fff/network > > . /lib/functions/fff/wireless > > . /lib/functions/fff/timeserver > > > > @@ -205,12 +206,10 @@ if [ -s /tmp/keyxchangev2data ]; 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..f16d671 > > --- /dev/null > > +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network > > @@ -0,0 +1,63 @@ > > +#!/bin/sh > > +# Copyright 2017 Adrian Schmutzler > > +# License GPLv3 > > + > > +ipMacSuffix() { > > + [ $# -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() { > > + [ $# -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() { > > + [ $# -ne "2" ] && return 1 > > + > > + local prefix=$1 > > + local suffix=$2 > > + > > + echo "$prefix" | sed -e 's,/,'$suffix'/,' > > + return 0 > > +} > > + > > +ipMacAssemble() { > > + [ $# -ne "2" ] && return 1 > > + > > + local prefix=$1 > > + local iface=$2 > > + > > + suffix="$(ipMacSuffix "$iface")" > > + ipAssemble "$prefix" "$suffix" > > + return 0 > > +} > > + > > +ipEUIAssemble() { > > + [ $# -ne "2" ] && return 1 > > + > > + local prefix=$1 > > + local iface=$2 > > + > > + suffix="$(ipEUISuffix "$iface")" > > + ipAssemble "$prefix" "$suffix" > > + return 0 > > +} > > + > > +ipTidyColon() { > > + [ $# -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 Am 3. November 2017 08:12:28 MEZ schrieb mail@adrianschmutzler.de: >Bin mir nicht ganz sicher, ob ich dich richtig verstanden habe: > >Ich soll zu den Funktionen Kommentare schreiben, was sie tun? Genau, welche Parameter gegen rein, was kommt raus. Was ist der Sinn der Funktion. Das ist wichtig, damit andere die Funktionen schneller verwenden können. >Und dann den Patch nochmal schicken, mit deinem Reviewed-by gleich >drin? Genau. Der Code schaut ja gut aus. Tim >Grüße > >Adrian > >> -----Original Message----- >> From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf >> Of Tim Niemeyer >> Sent: Donnerstag, 2. November 2017 22:28 >> To: Adrian Schmutzler <freifunk@adrianschmutzler.de>; franken- >> dev@freifunk.net >> Subject: Re: [PATCH] fff-network/fff-hoods: Create functions for IPv6 >> rewriting >> >> Hi >> >> Wenn du mir noch Kommentare an die Funktionen schreibst, kannst du >mein >> Reviewed-by gern anhängen. >> >> Tim >> >> Am Mittwoch, den 18.10.2017, 20:34 +0200 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> >> > --- >> > .../fff/fff-hoods/files/usr/sbin/configurehood | 11 ++-- >> > .../fff-network/files/lib/functions/fff/network | 63 >> ++++++++++++++++++++++ >> > .../fff-network/files/usr/sbin/configurenetwork | 11 ++-- >> > 3 files changed, 73 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 88c0daa..e60812d 100755 >> > --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood >> > +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood >> > @@ -1,6 +1,7 @@ >> > #!/bin/sh >> > >> > . /usr/share/libubox/jshn.sh >> > +. /lib/functions/fff/network >> > . /lib/functions/fff/wireless >> > . /lib/functions/fff/timeserver >> > >> > @@ -205,12 +206,10 @@ if [ -s /tmp/keyxchangev2data ]; 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..f16d671 >> > --- /dev/null >> > +++ b/src/packages/fff/fff-network/files/lib/functions/fff/network >> > @@ -0,0 +1,63 @@ >> > +#!/bin/sh >> > +# Copyright 2017 Adrian Schmutzler >> > +# License GPLv3 >> > + >> > +ipMacSuffix() { >> > + [ $# -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() { >> > + [ $# -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() { >> > + [ $# -ne "2" ] && return 1 >> > + >> > + local prefix=$1 >> > + local suffix=$2 >> > + >> > + echo "$prefix" | sed -e 's,/,'$suffix'/,' >> > + return 0 >> > +} >> > + >> > +ipMacAssemble() { >> > + [ $# -ne "2" ] && return 1 >> > + >> > + local prefix=$1 >> > + local iface=$2 >> > + >> > + suffix="$(ipMacSuffix "$iface")" >> > + ipAssemble "$prefix" "$suffix" >> > + return 0 >> > +} >> > + >> > +ipEUIAssemble() { >> > + [ $# -ne "2" ] && return 1 >> > + >> > + local prefix=$1 >> > + local iface=$2 >> > + >> > + suffix="$(ipEUISuffix "$iface")" >> > + ipAssemble "$prefix" "$suffix" >> > + return 0 >> > +} >> > + >> > +ipTidyColon() { >> > + [ $# -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 >> >