#!/bin/sh
 
NETWORK_CONFIG_DIR=/etc/sysconfig/network-scripts/
 
function check_OCTET() {
 
byte1=`echo "${INPUT}"|xargs|cut -d "." -f1`
byte2=`echo "${INPUT}"|xargs|cut -d "." -f2`
byte3=`echo "${INPUT}"|xargs|cut -d "." -f3`
byte4=`echo "${INPUT}"|xargs|cut -d "." -f4`
 
}
 
function check_INPUT() {
 
check_OCTET
if [[ ${INPUT} =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$  && ${byte1} -ge 0 && ${byte1} -le 255 && ${byte2} -ge 0 && ${byte2} -le 255 && ${byte3} -ge 0 && ${byte3} -le 255 && ${byte4} -ge 0 && ${byte4} -le 255 ]] ; then
    echo "input value is valid"
else
    echo "input value is not vaild : ${INPUT}"
fi
 
}
 
 
function print_TITLE() {
 
echo "Configuring Network"
echo "======================================================================"
echo
 
}
 
function bonding_INPUT() {
 
echo "Input bonding parent interface :"
echo "(ex: bond0)"
echo "======================================================================"
read INPUT
ls /sys/class/net | egrep -v 'lo|tun|tap' | grep -w ${INPUT} &>/dev/null
while [ $? -eq 0 ] ; do
 echo "The input value is either an interface that already exists or an invalid value."
 echo "Input Again :"
 read INPUT
 ls /sys/class/net | egrep -v 'lo|tun|tap' | grep -w ${INPUT} &>/dev/null
done
BONDING_PARENT_INTERFACE=${INPUT}
echo
 
echo "Input bonding option :"
echo "======================================================================"
echo "Select bonding mode"
echo "1) LACP (mode=802.3ad miimon=100 lacp_rate=fast xmit_hash_policy=layer2+3)"
echo "2) Active-Backup (mode=1 miimon=100)"
while true ; do
 read ANSWER
 case "${ANSWER}" in
  1)
   BONDING_OPTS='mode=802.3ad miimon=100 lacp_rate=fast xmit_hash_policy=layer2+3'
   break
   ;;
  2)
   BONDING_OPTS='mode=1 miimon=100'
   break
   ;;
  *)
   echo "Please answer 1 or 2."
 esac
done
echo
 
echo "Input bonding slave interfaces :"
echo "======================================================================"
ls /sys/class/net | egrep -v 'bond|lo|tun|tap'
echo "Input interface1 :"
read INTERFACE1
ls /sys/class/net | egrep -v 'bond|lo|tun|tap' | grep -w ${INTERFACE1} &>/dev/null
while [ $? -eq 1 ] ; do
 echo "Invalid Input."
 echo "Input Again :"
 read INTERFACE1
 ls /sys/class/net | egrep -v 'bond|lo|tun|tap' | grep -w ${INTERFACE1} &>/dev/null
done
echo "Input interface2 :"
read INTERFACE2
ls /sys/class/net | egrep -v "bond|lo|tun|tap|${INTERFACE1}" | grep -w ${INTERFACE2} &>/dev/null
while [ $? -eq 1 ] ; do
 echo "Invalid Input."
 echo "Input Again :"
 read INTERFACE2
 ls /sys/class/net | egrep -v "bond|lo|tun|tap|${INTERFACE1}" | grep -w ${INTERFACE2} &>/dev/null
done
BONDING_SLAVE_INTERFACE1=${INTERFACE1}
BONDING_SLAVE_INTERFACE2=${INTERFACE2}
echo
 
}
 
function single_INPUT() {
 
echo "Choose network single interface :"
echo "======================================================================"
ls /sys/class/net | egrep -v 'lo|bond|tun|tap'
read INTERFACE
ls /sys/class/net | egrep -v 'lo|bond|tun|tap' | grep -w ${INTERFACE} &>/dev/null
while [ $? -eq 1 ] ; do
 echo "Invalid Input."
 echo "Input Again :"
 read INTERFACE
 ls /sys/class/net | egrep -v 'lo|bond|tun|tap' | grep -w ${INTERFACE} &>/dev/null
done
echo
 
}
 
function common_INPUT {
 
echo "Input ip address :"
echo "(ex: 192.168.0.100)"
echo "======================================================================"
read INPUT
while [ "$(check_INPUT ${INPUT})" == "input value is not vaild : ${INPUT}" ] ; do
 echo "Invalid Input."
 echo "Input Again :"
 read INPUT
done
check_OCTET
IPADDR=${INPUT}
echo
 
echo "Input subnet mask :"
echo "======================================================================"
echo "Input 255.255.255.0 (y|n) [y]"
 
while true ; do
 read ANSWER
 case "${ANSWER}" in
  y)
   NETMASK='255.255.255.0'
   break
   ;;
  n)
   echo "Input subnet mask :"
   read INPUT
   while [ "$(check_INPUT ${INPUT})" == "input value is not vaild : ${INPUT}" ] ; do
    echo "Invalid Input."
    echo "Input Again :"
    read INPUT
   done
   NETMASK=${INPUT}
   break
   ;;
  *)
   echo "Please answer y or n.";;
 esac
done
echo
 
echo "Input gateway :"
echo "(ex: 192.168.0.254)"
echo "======================================================================"
echo "Input ${byte1}.${byte2}.${byte3}.254 (y|n) [y]"
 
while true ; do
 read ANSWER
 case "${ANSWER}" in
  y)
   GATEWAY="${byte1}.${byte2}.${byte3}.254"
   break
   ;;
  n)
   echo "Input gateway :"
   read INPUT
   while [ "$(check_INPUT ${INPUT})" == "input value is not vaild : ${INPUT}" ] ; do
    echo "Invalid Input."
    echo "Input Again :"
    read INPUT
   done
   GATEWAY=${INPUT}
   break
   ;;
  *)
   echo "Please answer y or n.";;
 esac
done
echo
 
}
 
function print_RESULT() {
 
   # print config files
   echo "Network config files will be created in ${NETWORK_CONFIG_DIR}. Are you OK? (y|n)"
   echo "======================================================================"
   read ANSWER
   while true ; do
    case "${ANSWER}" in
    y)
      break
      ;;
    n)
      echo "Input Diretory you want."
      read NETWORK_CONFIG_DIR
      ls ${NETWORK_CONFIG_DIR} &>/dev/null
      while [ $? -ne 0 ] ; do
       echo "Not exist."
       echo "Input Again :"
       read NETWORK_CONFIG_DIR
       ls ${NETWORK_CONFIG_DIR} &>/dev/null
      done
      break
      ;;
    *)
    esac
   done
 
}
 
case $1 in
 
bonding)
 clear
 print_TITLE
 bonding_INPUT
 common_INPUT
 echo "bonding parent interface  : ${BONDING_PARENT_INTERFACE}"
 echo "bonding opts              : ${BONDING_OPTS}"
 echo "bonding slave interfaces  : ${BONDING_SLAVE_INTERFACE1} ${BONDING_SLAVE_INTERFACE2}"
 echo "ip address                : ${IPADDR}"
 echo "subnet mask               : ${NETMASK}"
 echo "gateway                   : ${GATEWAY}"
 echo
 echo "Are you OK? (y|n)"
 
 while true ; do
  read ANSWER
  case "${ANSWER}" in
  y)
   print_RESULT
   # creating bonding parent interface file
   echo "DEVICE=${BONDING_PARENT_INTERFACE}"      > ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_PARENT_INTERFACE}
   echo "BOOTPROTO=none"                         >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_PARENT_INTERFACE}
   echo "ONBOOT=yes"                             >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_PARENT_INTERFACE}
   echo "IPADDR=${IPADDR}"                       >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_PARENT_INTERFACE}
   echo "NETMASK=${NETMASK}"                     >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_PARENT_INTERFACE}
   echo "GATEWAY=${GATEWAY}"                     >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_PARENT_INTERFACE}
   echo "BONDING_OPTS=\"${BONDING_OPTS}\""       >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_PARENT_INTERFACE}
   echo "NM_CONTROLLED=no"                       >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_PARENT_INTERFACE}
   # creating bonding slave interface1 file
   echo "DEVICE=${BONDING_SLAVE_INTERFACE1}"      > ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE1}
   echo "BOOTPROTO=none"                         >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE1}
   echo "ONBOOT=yes"                             >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE1}
   echo "MASTER=${BONDING_PARENT_INTERFACE}"     >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE1}
   echo "SLAVE=yes"                              >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE1}
   echo "USERCTL=no"                             >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE1}
   echo "NM_CONTROLLED=no"                       >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE1}
   # creating bonding slave interface1 file
   echo "DEVICE=${BONDING_SLAVE_INTERFACE2}"      > ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE2}
   echo "BOOTPROTO=none"                         >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE2}
   echo "ONBOOT=yes"                             >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE2}
   echo "MASTER=${BONDING_PARENT_INTERFACE}"     >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE2}
   echo "SLAVE=yes"                              >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE2}
   echo "USERCTL=no"                             >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE2}
   echo "NM_CONTROLLED=no"                       >> ${NETWORK_CONFIG_DIR}/ifcfg-${BONDING_SLAVE_INTERFACE2}
   ls ${NETWORK_CONFIG_DIR}
   echo
   echo "If confirm it, run the command 'systemctl restart network'"
   break
   ;;
  n)
   echo "Aborted."
   break
   exit 0
   ;;
  *)
   echo "Please answer y or n.";;
  esac
 done
 
 ;;
 
single)
 clear
 print_TITLE
 single_INPUT
 common_INPUT
 echo "interface   : ${INTERFACE}"
 echo "ip address  : ${IPADDR}"
 echo "subnet mask : ${NETMASK}"
 echo "gateway     : ${GATEWAY}"
 echo
 echo "Are you OK? (y|n)"
 
 while true ; do
  read ANSWER
  case "${ANSWER}" in
  y)
   print_RESULT
   # creating single interface file
   echo "DEVICE=${INTERFACE}"                     > ${NETWORK_CONFIG_DIR}/ifcfg-${INTERFACE}
   echo "BOOTPROTO=none"                         >> ${NETWORK_CONFIG_DIR}/ifcfg-${INTERFACE}
   echo "ONBOOT=yes"                             >> ${NETWORK_CONFIG_DIR}/ifcfg-${INTERFACE}
   echo "IPADDR=${IPADDR}"                       >> ${NETWORK_CONFIG_DIR}/ifcfg-${INTERFACE}
   echo "NETMASK=${NETMASK}"                     >> ${NETWORK_CONFIG_DIR}/ifcfg-${INTERFACE}
   echo "GATEWAY=${GATEWAY}"                     >> ${NETWORK_CONFIG_DIR}/ifcfg-${INTERFACE}
   echo "NM_CONTROLLED=no"                       >> ${NETWORK_CONFIG_DIR}/ifcfg-${INTERFACE}
   ls ${NETWORK_CONFIG_DIR}
   echo
   echo "If confirm it, run the command 'systemctl restart network'"
   break
   ;;
  n)
   echo "Aborted."
   break
   exit 0
   ;;
  *)
   echo "Please answer y or n.";;
  esac
 done
 
 ;;
 
*)
 echo $"Usage: $0 {bonding|single}"
 exit 2
 
esac
 
exit 0
Creative Commons License