#!/bin/bash
set -e
set -x
IFACE=$1

source /etc/libvirt/hooks/$IFACE
echo CLUSTER=$CLUSTER
echo IP=$IP

maxprefixv6=64
maxprefixv4=25

publicmac=52:54:00:00:00:11


if [ -z $IP ]; then
        echo "got nothing back from the API"
	exit 10
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}
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
   echo $IP
   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
        echo matched ${BASH_REMATCH[1]}
        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]}"
	ip route add ${IP} dev ${IFACE}

     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]}"
	ip route add ${IP} dev ${IFACE} via $(eui64 $publicmac)

     else										### don't know what we have but something we can't work with
        echo "Unable to detect with what prefix I'm working with"
   fi
done