firmware/src/packages/fff/fff-network/files/lib/functions/fff/network
Adrian Schmutzler 6ad42be496 fff-network/fff-hoods: Only use MAC address in network lib
Previously, IPv6 addresses were constructed by reading from
the device config file in the function. To have more options,
it is better to use the address itself as parameter.

By this way we can decide what we use for getting the MAC when
calling.

Signed-off-by: Adrian Schmutzler <freifunk@adrianschmutzler.de>
Reviewed-by: Tim Niemeyer <tim@tn-x.org>
2018-01-20 14:47:58 +01:00

99 lines
2.2 KiB
Bash

#!/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 provided MAC address (aa:bb:cc:bb:ee:ff)
#
# Argument: MAC address (with colons)
[ $# -ne "1" ] && return 1
local mac=$1
echo "$mac" | awk -F: '{ print "0:"$1$2":"$3$4":"$5$6 }'
return 0
}
ipEUISuffix() {
# Returns the EUI (interface ID, a8bb:ccff:fedd:eeff)
# based on the provided MAC address (aa:bb:cc:bb:ee:ff)
#
# Argument: MAC address (with colons)
[ $# -ne "1" ] && return 1
local mac=$1
echo "$mac" | awk -F: '{ printf("%02x%s:%sff:fe%s:%s%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }'
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::)
[ $# -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 (MAC address 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 mac=$2
suffix="$(ipMacSuffix "$mac")"
ipAssemble "$prefix" "$suffix"
return 0
}
ipEUIAssemble() {
# Concatenates a prefix (1st argument) and an EUI-based suffix (MAC address 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 mac=$2
suffix="$(ipEUISuffix "$mac")"
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
}
macFlipLocalBit() {
# Returns given MAC-address with locally administered bit flipped
#
# Argument: MAC-address
local mac=$1
echo "$mac" | awk -F: '{ printf("%02x:%s:%s:%s:%s:%s\n", xor(("0x"$1),2), $2, $3, $4, $5, $6) }'
return 0
}