2018-07-26 03:57:41 -05:00
|
|
|
#!/bin/bash
|
2019-01-29 12:51:02 -06:00
|
|
|
set -Eeuo pipefail
|
2018-07-26 03:57:41 -05:00
|
|
|
IFACE=$1
|
|
|
|
|
2019-01-29 12:51:02 -06:00
|
|
|
source /etc/libvirt/hooks/$IFACE || true
|
|
|
|
|
|
|
|
: ${PUBLICMAC:=52:54:00:00:00:11}
|
2018-10-05 13:29:12 -05:00
|
|
|
|
2018-07-26 03:57:41 -05:00
|
|
|
maxprefixv6=64
|
2018-10-05 13:29:12 -05:00
|
|
|
maxprefixv4=25
|
2018-07-26 03:57:41 -05:00
|
|
|
|
|
|
|
if [ -z $IP ]; then
|
|
|
|
echo "got nothing back from the API"
|
2019-02-20 19:02:35 -06:00
|
|
|
exit 10
|
2018-07-26 03:57:41 -05:00
|
|
|
fi
|
|
|
|
|
|
|
|
eui64() {
|
|
|
|
local macaddr="$1"
|
|
|
|
printf "%02x%s" $(( 16#${macaddr:0:2} ^ 2#00000010 )) "${macaddr:2}" \
|
|
|
|
| sed -E -e 's/([0-9a-zA-Z]{2})*/0x\0|/g' \
|
|
|
|
| tr -d ':\n' \
|
|
|
|
| xargs -d '|' \
|
|
|
|
printf "fe80::%02x%02x:%02xff:fe%02x:%02x%02x"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ip link set up ${IFACE}
|
2019-01-29 12:51:02 -06:00
|
|
|
ip addr add fe80::1/64 dev ${IFACE}
|
2018-07-26 03:57:41 -05:00
|
|
|
arp -i ${IFACE} -Ds 169.254.0.1 ${IFACE} netmask 255.255.255.255 pub
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IFS=',' read -ra IPS <<< "$IP"
|
|
|
|
for IP in "${IPS[@]}"; do
|
2018-10-08 11:22:22 -05:00
|
|
|
if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/([0-9]{2})$ ]]; then ### we got a IPv4 prefix < maxprefixv4
|
2018-07-26 03:57:41 -05:00
|
|
|
if [ ${BASH_REMATCH[1]} -lt $maxprefixv4 ]; then
|
|
|
|
echo "we don't support such a big customer net?"
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ${BASH_REMATCH[1]} -gt 32 ]; then
|
|
|
|
echo "prefix is invalid"
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "we got IPv4 with prefix ${BASH_REMATCH[0]}"
|
2019-02-20 19:02:35 -06:00
|
|
|
ip route add ${IP} dev ${IFACE}
|
2018-07-26 03:57:41 -05:00
|
|
|
|
|
|
|
elif [[ $IP =~ ^2604:bbc0:[0-9,a-f,:]{1,444}/([0-9]{2,3})$ ]]; then ### we got a PIv6 prefix < masprefixv6
|
|
|
|
|
|
|
|
if [ ${BASH_REMATCH[1]} -lt $maxprefixv6 ]; then
|
|
|
|
echo "we don't support such a big customer net?"
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ${BASH_REMATCH[1]} -gt 128 ]; then
|
|
|
|
echo "prefix is invalid"
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "we got IPv6 with prefix ${BASH_REMATCH[0]}"
|
2019-02-20 19:02:35 -06:00
|
|
|
ip route add ${IP} dev ${IFACE} via $(eui64 $PUBLICMAC)
|
2018-07-26 03:57:41 -05:00
|
|
|
|
2019-02-20 19:02:35 -06:00
|
|
|
elif [[ $IP =~ ^\ *$ ]]; then
|
|
|
|
echo "we just got an empty string. so not gonna do anything. probably due to splitting the comma"
|
|
|
|
|
|
|
|
else
|
2018-07-26 03:57:41 -05:00
|
|
|
echo "Unable to detect with what prefix I'm working with"
|
2019-02-20 19:02:35 -06:00
|
|
|
exit 10
|
2018-07-26 03:57:41 -05:00
|
|
|
fi
|
|
|
|
done
|