#!/bin/sh #find the eth0:# and add the ip to the system OS=`uname` addIPv6() { MASK=/64 if echo $2 | grep -m1 -q '/'; then MASK=$2 fi if [ "${OS}" = "FreeBSD" ]; then /sbin/ifconfig $ETH_DEV inet6 add ${1}${MASK} else /sbin/ip addr add ${1}${MASK} dev $ETH_DEV preferred_lft 0 >/dev/null 2>&1 if [ "$?" -ne 0 ]; then /sbin/ifconfig $ETH_DEV inet6 add ${1}${MASK} fi fi exit 0; } getBroadcast() { IP1=`echo $1 | cut -d. -f1`; IP2=`echo $1 | cut -d. -f2`; IP3=`echo $1 | cut -d. -f3`; IP4=`echo $1 | cut -d. -f4`; NM1=`echo $2 | cut -d. -f1`; NM2=`echo $2 | cut -d. -f2`; NM3=`echo $2 | cut -d. -f3`; NM4=`echo $2 | cut -d. -f4`; BC1=$((($IP1 & $NM1) | (255 & ~$NM1))); BC2=$((($IP2 & $NM2) | (255 & ~$NM2))); BC3=$((($IP3 & $NM3) | (255 & ~$NM3))); BC4=$((($IP4 & $NM4) | (255 & ~$NM4))); BROADCAST="$BC1.$BC2.$BC3.$BC4"; } ETH_DEV=eth0 if [ $# -lt 1 ]; then # we need the ip echo "Usage: $0 ( ( ()))"; echo "example: $0 1.2.3.4 255.255.255.0 eth0"; exit 1; fi IP_FILE=/usr/local/directadmin/data/admin/ips/$1 if [ -s ${IP_FILE} ]; then C=`grep -c 'add_to_device=no' ${IP_FILE}` if [ "${C}" -gt 0 ]; then echo "IP $1 has add_to_device=no set. Skipping" exit 0; fi fi #check to make sure it isn't already running IP_ALREADY_EXISTS=false if [ "${OS}" = "FreeBSD" ]; then if /sbin/ifconfig | grep -m1 -q " $1 "; then IP_ALREADY_EXISTS=true fi else if /sbin/ip a | grep -m1 -q " $1/"; then IP_ALREADY_EXISTS=true fi fi if ${IP_ALREADY_EXISTS}; then echo "IP $1 already exists on eth0" exit 1 fi #echo "have device: $3"; if [ $# -gt "2" ]; then ETH_DEV=$3; fi if echo $1 | grep -m1 -q ':'; then addIPv6 $1 $2 fi 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 } NETMASK=255.255.255.0 PREFIX="/24" SET_BROADCAST=true if [ $# -gt "1" ]; then #echo "have netmask: $2"; NETMASK=$2 if ! echo "${NETMASK}" | grep -m1 -q '/'; then PREFIX="/`netmaskToPrefixIPv4 ${NETMASK}`" else PREFIX="${NETMASK}" SET_BROADCAST=false fi fi if [ $# -gt "3" ]; then BROADCAST=$4 elif ${SET_BROADCAST}; then getBroadcast $1 $2 fi if [ "${OS}" = "FreeBSD" ]; then ifconfig $ETH_DEV inet $1 netmask $NETMASK broadcast $BROADCAST alias else /sbin/ip addr add ${1}${PREFIX} dev $ETH_DEV >/dev/null 2>&1 if [ "$?" -ne 0 ] && ${SET_BROADCAST}; then DEVNUM=0 while [ `/sbin/ifconfig $ETH_DEV:$DEVNUM | grep -F -c inet` -gt "0" ] do { DEVNUM=$(($DEVNUM+1)); } done; /sbin/ifconfig $ETH_DEV:$DEVNUM $1 netmask $NETMASK broadcast $BROADCAST /sbin/route add -host $1 dev $ETH_DEV:$DEVNUM fi fi exit 0