#!/bin/bash

#find the eth0:# and add the ip to the system

addIPv6() {
	if echo "$2" | grep -q '/'; then
		MASK="$2"
	else
		MASK="/64"
	fi

	if ! ip addr add "${1}${MASK}" dev "${ETH_DEV}" preferred_lft 0 >/dev/null 2>&1; then
		exit 1
	fi

	exit 0
}

netmaskToPrefixIPv4() {
	NM1=$(echo "${NETMASK}" | cut -d. -f1)
	NM2=$(echo "${NETMASK}" | cut -d. -f2)
	NM3=$(echo "${NETMASK}" | cut -d. -f3)
	NM4=$(echo "${NETMASK}" | cut -d. -f4)

	NM1BIN=$(perl -e "printf \"%b\n\",${NM1}")
	NM2BIN=$(perl -e "printf \"%b\n\",${NM2}")
	NM3BIN=$(perl -e "printf \"%b\n\",${NM3}")
	NM4BIN=$(perl -e "printf \"%b\n\",${NM4}")

	echo "${NM1BIN}${NM2BIN}${NM3BIN}${NM4BIN}" | grep -o '1' | wc -l
}

DIRECTADMIN_BIN=/usr/local/directadmin/directadmin
DIRECTADMIN_CONF=/usr/local/directadmin/conf/directadmin.conf

if [ $# -lt 1 ]; then # we need at least ip
	echo "Usage: $0 <ip> (<netmask> (<eth dev>))";
	echo "example: $0 1.2.3.4 255.255.255.0 eth0";
	exit 1
fi

#echo "have device: $3";
if [ $# -gt "2" ]; then
    ETH_DEV="$3"
else
	if [ -s "${DIRECTADMIN_CONF}" ] && [ -x "${DIRECTADMIN_BIN}" ]; then
			ETH_DEV=$("${DIRECTADMIN_BIN}" config | grep "^ethernet_dev=" | cut -d= -f2)
	fi
	if [ -z "${ETH_DEV}" ]; then
			ETH_DEV=$(ip route show | awk '/^default/ && NR==1 {print $5}')
	fi
fi

IP_FILE="/usr/local/directadmin/data/admin/ips/$1"
if [ -s "${IP_FILE}" ] && grep -q "add_to_device=no" "${IP_FILE}"; then
	echo "IP $1 has add_to_device=no set. Skipping"
	exit 0
fi

#check to make sure it isn't already running
if ip a | grep -q " $1/"; then
	echo "IP $1 already exists"
	exit 1
fi

if echo "$1" | grep -q ':'; then
	addIPv6 "$1" "$2"
fi

if [ $# -gt "1" ]; then
	#echo "have netmask: $2";
	NETMASK="$2"
	if ! echo "${NETMASK}" | grep -q '/'; then
		PREFIX="/$(netmaskToPrefixIPv4 "${NETMASK}")"
	else
		PREFIX="${NETMASK}"
		NETMASK=
	fi
else
	NETMASK=255.255.255.0
	PREFIX=/24
fi

if ! ip addr add "${1}${PREFIX}" dev "${ETH_DEV}" >/dev/null 2>&1 && [ -n "${NETMASK}" ]; then 
	exit 1
fi

exit 0
