#!/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