Message ID | 1507480134-29283-1-git-send-email-freifunk@adrianschmutzler.de |
---|---|
State | Superseded |
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 acac259..6ff7104 100755 --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood @@ -193,6 +193,43 @@ if [ -s /tmp/keyxchangev2data ]; then if hasInternet ; then sh /usr/sbin/vpn-select fi + + # now we load the prefix from the hoodfile and set this to br-mesh + json_select network + json_get_var prefix ula_prefix + # 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:]*:,::,')" + 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 + if ! ( ip -6 addr show dev br-mesh | grep -q "$addr" ) ; then + ip -6 addr add "$addr" dev br-mesh + echo "Set ULA address to br-mesh: $addr" + else + echo "Address already set." + fi + # Set $prefix::link-local as IP + if ! ( ip -6 addr show dev br-mesh | grep -q "$addr_eui" ) ; then + ip -6 addr add "$addr_eui" dev br-mesh + echo "Set ULA EUI-64 address to br-mesh: $addr_eui" + else + echo "Address already set." + fi + if ! ( ip -6 route show dev br-mesh | grep -q "fc00::" ) ; then + ip -6 route add fc00::/7 via fe80::1 dev br-mesh + echo "Set ULA route to br-mesh." + else + echo "Route already set." + fi + fi + json_select ".." # back to root else echo "We haven't got a file. We do nothing. We try it again in 5 minutes..."; exit 0
hi uff wurde das kompliziert... Ich muss gestehen ich versteh die hälfte nich mehr ich kann aber sagen das es augenscheinlich tut, daher: Tested-by: Christian Dresel <fff@chrisi01.de> auf 1043v2 und c25 Was mich bisschen wundert: root@Test:/www/public# ip -6 r s [...] fdff::/64 dev br-mesh proto kernel metric 256 pref medium unreachable fdff::/64 dev lo proto static metric 2147483647 error -148 pref medium [...] scheint nicht zu stören, ich komm problemlos über die fdff:: drauf (wie man sieht ist die richtige route ja auch da) aber woher kommts? Gesehen auf den 1043v2. mfg Christian On 08.10.2017 18:28, Adrian Schmutzler wrote: > Signed-off-by: Christian Dresel <fff@chrisi01.de> > Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > > Changes in v11: > - Evaluate ULA block more often > > Changes in v10: > - Replace zeros by :: in addresses > - Use ip addresses as selector for deletion > > Changes in v9: > - Add '0:' to suffix > - Do not delete ip addresses with same prefix > > Changes in v8: > - Do not delete new ip addresses (in case they don't differ) > - Fixed typo in br-mesh > - Fixed escape char in prefix > > Changes in v7: > - Add EUI64 address > - Change ifconfig to ip > > Changes in v6: > - Typo in echo > - Optimized sed > > Changes in v5: > - Only apply if ula_prefix is not empty > - Remove escape sign from ula_prefix > > Changes in v4: > - Optimized grep and sed > > Changes in v3: > - Added route block > - Inverted condition in address block > - Changed if style to "grep -q" > - Added some quotes > > Changes in v2: > - Rebased onto keyXchange v2 patchset v15 > - correctly handle keyxchangev2data without reloading > - added some quotes > --- > .../fff/fff-hoods/files/usr/sbin/configurehood | 37 ++++++++++++++++++++++ > 1 file changed, 37 insertions(+) > > diff --git a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > index acac259..6ff7104 100755 > --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood > @@ -193,6 +193,43 @@ if [ -s /tmp/keyxchangev2data ]; then > if hasInternet ; then > sh /usr/sbin/vpn-select > fi > + > + # now we load the prefix from the hoodfile and set this to br-mesh > + json_select network > + json_get_var prefix ula_prefix > + # 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:]*:,::,')" > + 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 > + if ! ( ip -6 addr show dev br-mesh | grep -q "$addr" ) ; then > + ip -6 addr add "$addr" dev br-mesh > + echo "Set ULA address to br-mesh: $addr" > + else > + echo "Address already set." > + fi > + # Set $prefix::link-local as IP > + if ! ( ip -6 addr show dev br-mesh | grep -q "$addr_eui" ) ; then > + ip -6 addr add "$addr_eui" dev br-mesh > + echo "Set ULA EUI-64 address to br-mesh: $addr_eui" > + else > + echo "Address already set." > + fi > + if ! ( ip -6 route show dev br-mesh | grep -q "fc00::" ) ; then > + ip -6 route add fc00::/7 via fe80::1 dev br-mesh > + echo "Set ULA route to br-mesh." > + else > + echo "Route already set." > + fi > + fi > + json_select ".." # back to root > else > echo "We haven't got a file. We do nothing. We try it again in 5 minutes..."; > exit 0 >