<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Consolas",serif;
        color:black;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body bgcolor=white lang=DE link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Hallo Robert,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>wir hatten das vor einiger Zeit schon Mal diskutiert und die jetzigen falschen Prefixe als beste Lösung empfunden. Bei allen anderen (korrekten) Lösungen wird es dann wieder schwierig mit dem Parsen, je nachdem ob ein oder zwei Doppelpunkte vorkommen etc.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Die momentane Regel für den Prefix ist im Prinzip:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Den Prefix im hoodfile so angeben, dass man die unteren 64 bits (ohne führenden Doppelpunkt) ranpappen kann und dabei korrekte Adressen rauskommen.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Richtig im Sinne der Regel wären also<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>aaaa:bbbb:cccc:dddd:/64<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>aaaa:bbbb:cccc::/64<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>aaaa:bbbb:cccc:0:/64<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>a::/64<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Deshalb auch die führende Null bei der Mac-abgeleiteten Adresse: 0:aabb:ccdd:eeff<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Grüße<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Adrian<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:windowtext'> franken-dev [mailto:franken-dev-bounces@freifunk.net] <b>On Behalf Of </b>robert<br><b>Sent:</b> Freitag, 3. November 2017 10:42<br><b>To:</b> franken-dev@freifunk.net<br><b>Subject:</b> Re: [PATCH v2] fff-network/fff-hoods: Create functions for IPv6 rewriting<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><p>Hi,<o:p></o:p></p><p>huch, das ging jetzt aber schnell.<o:p></o:p></p><p>Trotzdem noch ne kleine Anmerkung s. unten<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>Am 03.11.2017 um 09:30 schrieb Tim Niemeyer:<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><pre>Hi<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Danke.<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Und applied.<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Tim<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Am Freitag, den 03.11.2017, 09:18 +0100 schrieb Adrian Schmutzler:<o:p></o:p></pre><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><pre>This puts the code for creating IPv6 addresses from MAC<o:p></o:p></pre><pre>address and EUI into functions, so it can be reused.<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>This should be particularly helpful if code is rewritten later.<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Signed-off-by: Adrian Schmutzler <a href="mailto:freifunk@adrianschmutzler.de"><freifunk@adrianschmutzler.de></a><o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Tested-by: Adrian Schmutzler <a href="mailto:freifunk@adrianschmutzler.de"><freifunk@adrianschmutzler.de></a><o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Reviewed-by: Tim Niemeyer <a href="mailto:tim@tn-x.org"><tim@tn-x.org></a><o:p></o:p></pre><pre><o:p> </o:p></pre><pre>---<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>Changes in v2:<o:p></o:p></pre><pre>- Added comments to functions<o:p></o:p></pre><pre><o:p> </o:p></pre><pre> .../fff/fff-hoods/files/usr/sbin/configurehood     | 11 ++-<o:p></o:p></pre><pre> .../fff-network/files/lib/functions/fff/network    | 87<o:p></o:p></pre><pre>++++++++++++++++++++++<o:p></o:p></pre><pre> .../fff-network/files/usr/sbin/configurenetwork    | 11 ++-<o:p></o:p></pre><pre> 3 files changed, 97 insertions(+), 12 deletions(-)<o:p></o:p></pre><pre> create mode 100644 src/packages/fff/fff-<o:p></o:p></pre><pre>network/files/lib/functions/fff/network<o:p></o:p></pre><pre><o:p> </o:p></pre><pre>diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood<o:p></o:p></pre><pre>b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood<o:p></o:p></pre><pre>index 3d0afc3..f785b7d 100755<o:p></o:p></pre><pre>--- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood<o:p></o:p></pre><pre>+++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood<o:p></o:p></pre><pre>@@ -2,6 +2,7 @@<o:p></o:p></pre><pre> <o:p></o:p></pre><pre> . /usr/share/libubox/jshn.sh<o:p></o:p></pre><pre> . /lib/functions/fff/keyxchange<o:p></o:p></pre><pre>+. /lib/functions/fff/network<o:p></o:p></pre><pre> . /lib/functions/fff/wireless<o:p></o:p></pre><pre> . /lib/functions/fff/timeserver<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>@@ -242,12 +243,10 @@ if [ -s "$hoodfile" ]; then<o:p></o:p></pre><pre>  # Set $prefix::MAC as IP<o:p></o:p></pre><pre>  if [ -n "$prefix" ] ; then<o:p></o:p></pre><pre>          prefix="$(echo "$prefix" | sed -e 's,\\,,')"<o:p></o:p></pre><pre>-         suffix="$(awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }'<o:p></o:p></pre><pre>/sys/class/net/br-mesh/address)"<o:p></o:p></pre><pre>-         suffix_eui="$(awk -F: '{<o:p></o:p></pre><pre>printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5,<o:p></o:p></pre><pre>$6) }' /sys/class/net/br-mesh/address)"<o:p></o:p></pre><pre>-         addr="$(echo "$prefix" | sed -e 's,/,'$suffix'/,')"<o:p></o:p></pre><pre>-         echo $addr | grep -q "::" || addr="$(echo "$addr" |<o:p></o:p></pre><pre>sed -e 's,:[0:]*:,::,')"<o:p></o:p></pre><pre>-         addr_eui="$(echo "$prefix" | sed -e<o:p></o:p></pre><pre>'s,/,'$suffix_eui'/,')"<o:p></o:p></pre><pre>-         echo $addr_eui | grep -q "::" || addr_eui="$(echo<o:p></o:p></pre><pre>"$addr_eui" | sed -e 's,:[0:]*:,::,')"<o:p></o:p></pre><pre>+         addr="$(ipMacAssemble "$prefix" "br-mesh")"<o:p></o:p></pre><pre>+         addr="$(ipTidyColon "$addr")"<o:p></o:p></pre><pre>+         addr_eui="$(ipEUIAssemble "$prefix" "br-mesh")"<o:p></o:p></pre><pre>+         addr_eui="$(ipTidyColon "$addr_eui")"<o:p></o:p></pre><pre>          for ip in $(ip -6 addr show dev br-mesh | grep inet6<o:p></o:p></pre><pre>| grep -v -e " $addr" -e " $addr_eui" -e " fe80::" -e " fdff::" | cut<o:p></o:p></pre><pre>-f6 -d " "); do<o:p></o:p></pre><pre>                  ip -6 addr del "$ip" dev br-mesh<o:p></o:p></pre><pre>          done<o:p></o:p></pre><pre>diff --git a/src/packages/fff/fff-<o:p></o:p></pre><pre>network/files/lib/functions/fff/network b/src/packages/fff/fff-<o:p></o:p></pre><pre>network/files/lib/functions/fff/network<o:p></o:p></pre><pre>new file mode 100644<o:p></o:p></pre><pre>index 0000000..8dd9f77<o:p></o:p></pre><pre>--- /dev/null<o:p></o:p></pre><pre>+++ b/src/packages/fff/fff-network/files/lib/functions/fff/network<o:p></o:p></pre><pre>@@ -0,0 +1,87 @@<o:p></o:p></pre><pre>+#!/bin/sh<o:p></o:p></pre><pre>+# Copyright 2017 Adrian Schmutzler<o:p></o:p></pre><pre>+# License GPLv3<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ipMacSuffix() {<o:p></o:p></pre><pre>+ # Returns the lower 64 bits of an IPv6 address<o:p></o:p></pre><pre>(0:aabb:ccdd:eeff)<o:p></o:p></pre><pre>+ # based on the mac address (aa:bb:cc:bb:ee:ff) of a<o:p></o:p></pre><pre>specified interface<o:p></o:p></pre><pre>+ #<o:p></o:p></pre><pre>+ # Argument: name of interface (e.g. br-mesh)<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ [ $# -ne "1" ] && return 1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ local iface=$1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }'<o:p></o:p></pre><pre>"/sys/class/net/${iface}/address"<o:p></o:p></pre><pre>+ return 0<o:p></o:p></pre><pre>+}<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ipEUISuffix() {<o:p></o:p></pre><pre>+ # Returns the EUI (interface ID, a8bb:ccff:fedd:eeff)<o:p></o:p></pre><pre>+ # based on the mac address (aa:bb:cc:bb:ee:ff) of a<o:p></o:p></pre><pre>specified interface<o:p></o:p></pre><pre>+ #<o:p></o:p></pre><pre>+ # Argument: name of interface (e.g. br-mesh)<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ [ $# -ne "1" ] && return 1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ local iface=$1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n",<o:p></o:p></pre><pre>xor(("0x"$1),2), $2, $3, $4, $5, $6) }'<o:p></o:p></pre><pre>"/sys/class/net/${iface}/address"<o:p></o:p></pre><pre>+ return 0<o:p></o:p></pre><pre>+}<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ipAssemble() {<o:p></o:p></pre><pre>+ # Concatenates a prefix (1st argument) and a suffix (2nd<o:p></o:p></pre><pre>argument) to a merged IPv6 address<o:p></o:p></pre><pre>+ # (The prefix has to bear the subnet: fdff::/64)<o:p></o:p></pre><pre>+ # (The prefix must only contain the higher 64 bits (correct:<o:p></o:p></pre><pre>0:0:0:0: or 0:: - wrong: 0:0:0:0::)<o:p></o:p></pre></blockquote></blockquote><p class=MsoNormal>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.<br><br>Könnte man vorher noch wegbügeln. z.B. so<br>sed -e 's,\(\([[:digit:]]*:\)\{4\}\):,\1,' | sed -e 's,/,'$suffix'/,'<br><br>Robert<br><br><o:p></o:p></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><pre><o:p> </o:p></pre><pre>+<o:p></o:p></pre><pre>+ [ $# -ne "2" ] && return 1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ local prefix=$1<o:p></o:p></pre><pre>+ local suffix=$2<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ echo "$prefix" | sed -e 's,/,'$suffix'/,'<o:p></o:p></pre><pre>+ return 0<o:p></o:p></pre><pre>+}<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ipMacAssemble() {<o:p></o:p></pre><pre>+ # Concatenates a prefix (1st argument) and a MAC-based<o:p></o:p></pre><pre>suffix (interface as 2nd argument) to a merged IPv6 address<o:p></o:p></pre><pre>+ # (Details on prefix: Check ipAssemble(), details on suffix:<o:p></o:p></pre><pre>Check ipMacSuffix())<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ [ $# -ne "2" ] && return 1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ local prefix=$1<o:p></o:p></pre><pre>+ local iface=$2<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ suffix="$(ipMacSuffix "$iface")"<o:p></o:p></pre><pre>+ ipAssemble "$prefix" "$suffix"<o:p></o:p></pre><pre>+ return 0<o:p></o:p></pre><pre>+}<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ipEUIAssemble() {<o:p></o:p></pre><pre>+ # Concatenates a prefix (1st argument) and an EUI-based<o:p></o:p></pre><pre>suffix (interface as 2nd argument) to a merged IPv6 address<o:p></o:p></pre><pre>+ # (Details on prefix: Check ipAssemble(), details on suffix:<o:p></o:p></pre><pre>Check ipEUISuffix())<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ [ $# -ne "2" ] && return 1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ local prefix=$1<o:p></o:p></pre><pre>+ local iface=$2<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ suffix="$(ipEUISuffix "$iface")"<o:p></o:p></pre><pre>+ ipAssemble "$prefix" "$suffix"<o:p></o:p></pre><pre>+ return 0<o:p></o:p></pre><pre>+}<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ipTidyColon() {<o:p></o:p></pre><pre>+ # Collapses zeros to :: to yield short but valid IPv6<o:p></o:p></pre><pre>addresses<o:p></o:p></pre><pre>+ #<o:p></o:p></pre><pre>+ # Argument: IPv6 address to be shortened<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ [ $# -ne "1" ] && return 1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ local addr=$1<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre>+ echo "$addr" | grep -q "::" || addr="$(echo "$addr" | sed -e<o:p></o:p></pre><pre>'s,:[0:]*:,::,')"<o:p></o:p></pre><pre>+ echo "$addr"<o:p></o:p></pre><pre>+ return 0<o:p></o:p></pre><pre>+}<o:p></o:p></pre><pre>diff --git a/src/packages/fff/fff-<o:p></o:p></pre><pre>network/files/usr/sbin/configurenetwork b/src/packages/fff/fff-<o:p></o:p></pre><pre>network/files/usr/sbin/configurenetwork<o:p></o:p></pre><pre>index c6b3113..d4866e4 100755<o:p></o:p></pre><pre>--- a/src/packages/fff/fff-network/files/usr/sbin/configurenetwork<o:p></o:p></pre><pre>+++ b/src/packages/fff/fff-network/files/usr/sbin/configurenetwork<o:p></o:p></pre><pre>@@ -9,6 +9,8 @@<o:p></o:p></pre><pre> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the<o:p></o:p></pre><pre> # GNU General Public License for more details.<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>+. /lib/functions/fff/network<o:p></o:p></pre><pre>+<o:p></o:p></pre><pre> BOARD="$(uci get board.model.name)"<o:p></o:p></pre><pre> . /etc/network.$BOARD<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>@@ -218,8 +220,7 @@ else<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>     prefix="fdff:0::/64"<o:p></o:p></pre><pre>     # Set $prefix::MAC as IP<o:p></o:p></pre><pre>-    suffix=$(awk -F: '{ print $1$2":"$3$4":"$5$6 }'<o:p></o:p></pre><pre>/sys/class/net/br-mesh/address)<o:p></o:p></pre><pre>-    addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')<o:p></o:p></pre><pre>+    addr="$(ipMacAssemble "$prefix" "br-mesh")"<o:p></o:p></pre><pre>     ip -6 addr add $addr dev br-mesh<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>     uci -q del network.globals<o:p></o:p></pre><pre>@@ -229,14 +230,12 @@ else<o:p></o:p></pre><pre>     uci -q set network.mesh.proto=static<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>     # Set $prefix::1 as IP<o:p></o:p></pre><pre>-    suffix="1"<o:p></o:p></pre><pre>-    addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')<o:p></o:p></pre><pre>+    addr="$(ipAssemble "$prefix" "1")"<o:p></o:p></pre><pre>     ip -6 addr add $addr dev br-mesh<o:p></o:p></pre><pre>     uci -q add_list network.mesh.ip6addr=$addr<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>     # Set $prefix::link-local as IP<o:p></o:p></pre><pre>-    suffix=$(awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n",<o:p></o:p></pre><pre>xor(("0x"$1),2), $2, $3, $4, $5, $6) }' /sys/class/net/br-<o:p></o:p></pre><pre>mesh/address)<o:p></o:p></pre><pre>-    addr=$(echo $prefix | sed -e 's/\//'$suffix'\//')<o:p></o:p></pre><pre>+    addr="$(ipEUIAssemble "$prefix" "br-mesh")"<o:p></o:p></pre><pre>     ip -6 addr add $addr dev br-mesh<o:p></o:p></pre><pre>     uci -q add_list network.mesh.ip6addr=$addr<o:p></o:p></pre><pre> <o:p></o:p></pre><pre>-- <o:p></o:p></pre><pre>2.7.4<o:p></o:p></pre><p class=MsoNormal><br><br><o:p></o:p></p></blockquote></blockquote><p class=MsoNormal><o:p> </o:p></p></div></div></body></html>