#r!/bin/bash


CONFFILE=/etc/systemd/network/omg.network
#CONFFILE=/root/try

mask2cidr() {
    nbits=0
    IFS=.
    for dec in $1 ; do
        case $dec in
            255) let nbits+=8;;
            254) let nbits+=7;;
            252) let nbits+=6;;
            248) let nbits+=5;;
            240) let nbits+=4;;
            224) let nbits+=3;;
            192) let nbits+=2;;
            128) let nbits+=1;;
            0);;
            *) echo "Error: $dec is not recognised"; exit 1
        esac
    done
    echo "$nbits"
}




echo "$0 start: $(date)" >> /tmp/sequence


# Don't run when installing
if grep -q debian-installer </proc/cpuinfo; then
        exit 0
fi

# Don't run when OEM
if [ "x${OEM}" = "x1" ]; then
    exit 0
fi


test -f /tmp/cmdline && . /tmp/cmdline


test -f /data/eeprom && . /data/eeprom

if test -f "${CONFFILE}" && grep -q '^#FULLYLOCKED$' "${CONFFILE}"; then
    echo "OMG: Networkd configuration is intentionally locked"
    exit
fi

if test -z "$IP_DHCPMODE" ; then
    echo "EEPROM has no IP_CONFIG forcing DHCP"
    IP_DHCPMODE="CLIENT"
    #echo "#force dhcp eeprom has no IP_CONFIG" >> /etc/network/interfaces.omg
fi

if test -z "$IP_DHCPMODE_6" ; then
    echo "EEPROM has no IPV6_CONFIG use IPV6 in AUTO mode"
    IP_DHCPMODE_6="AUTO"
fi

if test "${IP_DHCPMODE}" != "STATIC" -a "${IP_DHCPMODE}" != "CLIENT"; then
    echo "OMG: Unknown DHCP Mode \"${IP_DHCPMODE}\", falling back to DHCP"
    IP_DHCPMODE="CLIENT"
fi
if test "${IP_DHCPMODE_6}" != "STATIC" -a "${IP_DHCPMODE_6}" != "AUTO" -a "${IP_DHCPMODE_6}" != "OFF"; then
    echo "OMG: Unknown DHCP Mode \"${IP_DHCPMODE_6}\", falling back to Auto mode"
    IP_DHCPMODE_6="AUTO"
fi


if test "${IP_DHCPMODE}" = "STATIC"; then
    if test  -z "${IP_ADDRESS}" ; then
        echo "Static ip address but missing value for IP_ADDRESS, falling back to DHCP"
        IP_DHCPMODE="CLIENT"
    fi
    if test  -z "${IP_MASK}" ; then
        echo "Static ip address but missing value for IP_MASK, falling back to DHCP"
        IP_DHCPMODE="CLIENT"
    fi
    if test  -z "${IP_GW}" ; then
        echo "Static ip address but missing value for IP_GW, falling back to DHCP"
        IP_DHCPMODE="CLIENT"
    fi
fi

if test "$IP_DHCPMODE_6" = "STATIC"; then
    if test  -z "$IP_ADDRESS_6" ; then
        echo "Static ip address but missing value for IP_ADDRESS_6, falling back to off"
        IP_DHCPMODE_6="OFF"
    fi
    if test  -z "$IP_MASK_6" ; then
        echo "Static ip address but missing value for IP_MASK_6, falling back to off"
        IP_DHCPMODE_6="OFF"
    fi
    if test  -z "${IP_GW_6}" ; then
        echo "Static ip address but missing value for IP_GW_6, falling back to off"
        IP_DHCPMODE_6="OFF"
    fi
fi

cidr=$(mask2cidr ${IP_MASK})


if [ ${IP_DHCPMODE_6} = "OFF" ]; then
  echo '1' > /proc/sys/net/ipv6/conf/all/disable_ipv6
else
  echo '0' > /proc/sys/net/ipv6/conf/all/disable_ipv6
fi

#UUID=$(uuidgen)
echo "[Match]" > ${CONFFILE}
echo "Name=eth0" >> ${CONFFILE}

#echo "[Network]" >> ${CONFFILE}

if test "${IP_DHCPMODE}" = "STATIC"; then
    if test "${IP_DHCPMODE_6}" = "OFF"; then
        # v4 static, v6 off
        echo "[Network]" >> ${CONFFILE}
        echo "DHCP=none" >> ${CONFFILE}
        if [ ! -z "${IP_DNS1}" ]; then
            echo "DNS=${IP_DNS1}" >> ${CONFFILE}
        fi
        if [ ! -z "${IP_DNS2}" ]; then
            echo "DNS=${IP_DNS2}" >> ${CONFFILE}
        fi
        echo "Gateway=${IP_GW}" >> ${CONFFILE}
        echo "Address=${IP_ADDRESS}/${cidr}" >> ${CONFFILE}
    elif test "${IP_DHCPMODE_6}" = "STATIC"; then
        # stat stat
        echo "[Network]" >> ${CONFFILE}
        echo "DHCP=none" >> ${CONFFILE}
        if [ ! -z "${IP_DNS1}" ]; then
            echo "DNS=${IP_DNS1}" >> ${CONFFILE}
        fi
        if [ ! -z "${IP_DNS2}" ]; then
            echo "DNS=${IP_DNS2}" >> ${CONFFILE}
        fi
        if [ ! -z "${IP_DNS1_6}" ]; then
            echo "DNS=${IP_DNS1_6}" >> ${CONFFILE}
        fi
        if [ ! -z "${IP_DNS2_6}" ]; then
            echo "DNS=${IP_DNS2_6}" >> ${CONFFILE}
        fi
        echo "Gateway=${IP_GW}" >> ${CONFFILE}
        echo "Gateway=${IP_GW_6}" >> ${CONFFILE}
        echo "[Address]" >> ${CONFFILE}
        echo "Address=${IP_ADDRESS}/${cidr}" >> ${CONFFILE}
        echo "[Address]" >> ${CONFFILE}
        echo "Address=${IP_ADDRESS_6}/${IP_MASK_6}" >> ${CONFFILE}
    else
        # stat dyn
        echo "[Network]" >> ${CONFFILE}
        echo "DHCP=v6" >> ${CONFFILE}
        if [ ! -z "${IP_DNS1}" ]; then
            echo "DNS=${IP_DNS1}" >> ${CONFFILE}
        fi
        if [ ! -z "${IP_DNS2}" ]; then
            echo "DNS=${IP_DNS2}" >> ${CONFFILE}
        fi
        echo "Gateway=${IP_GW}" >> ${CONFFILE}
        echo "[Address]" >> ${CONFFILE}
        echo "Address=${IP_ADDRESS}/${cidr}" >> ${CONFFILE}
    fi
else # ipv4 dynamic
    if test "${IP_DHCPMODE_6}" = "OFF"; then
        # dyn off
        echo "[Network]" >> ${CONFFILE}
        echo "DHCP=v4" >> ${CONFFILE}
        echo "IPv4LL=true" >> ${CONFFILE}
    elif test "${IP_DHCPMODE_6}" = "STATIC"; then
        # dyn stat
        echo "[Network]" >> ${CONFFILE}
        echo "DHCP=v4" >> ${CONFFILE}
        echo "IPv4LL=true" >> ${CONFFILE}
        echo "Gateway=${IP_GW_6}" >> ${CONFFILE}
        if [ ! -z "${IP_DNS1_6}" ]; then
            echo "DNS=${IP_DNS1_6}" >> ${CONFFILE}
        fi
        if [ ! -z "${IP_DNS2_6}" ]; then
            echo "DNS=${IP_DNS2_6}" >> ${CONFFILE}
        fi
        echo "[Address]" >> ${CONFFILE}
        echo "Address=${IP_ADDRESS_6}/${IP_MASK_6}" >> ${CONFFILE}
    else
        # dyn dyn
        echo "[Network]" >> ${CONFFILE}
        echo "DHCP=both" >> ${CONFFILE}
        echo "IPv4LL=true" >> ${CONFFILE}
    fi
fi




# When using dhcp send my hostname
if $( ! grep -q 'send host-name "<hostname>";' /etc/dhcp/dhclient.conf); then
    echo 'send host-name "<hostname>";' >> /etc/dhcp/dhclient.conf
fi




















echo "$0 stop: $(date)" >> /tmp/sequence

exit 0
