[PATCH] fff-network/fff-hoods: Create functions for IPv6 rewriting

Tim Niemeyer tim at tn-x.org
Do Nov 2 22:28:23 CET 2017


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 at adrianschmutzler.de>
> 
> Tested-by: Adrian Schmutzler <freifunk at 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
> 

-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 473 bytes
Beschreibung: This is a digitally signed message part
URL         : <http://lists.freifunk.net/pipermail/franken-dev-freifunk.net/attachments/20171102/c4458859/attachment.sig>


Mehr Informationen über die Mailingliste franken-dev