[PATCH v2] fff-network/fff-hoods: Create functions for IPv6 rewriting
robert
rlanghammer at web.de
Fr Nov 3 10:42:07 CET 2017
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 at adrianschmutzler.de>
>>
>> Tested-by: Adrian Schmutzler <freifunk at adrianschmutzler.de>
>>
>> Reviewed-by: Tim Niemeyer <tim at 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
>>
>>
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20171103/492fefb9/attachment.html>
Mehr Informationen über die Mailingliste franken-dev