721 lines
24 KiB
Bash
Executable File
721 lines
24 KiB
Bash
Executable File
#!/bin/bash
|
|
# IBM(c) 2013 EPL license http://www.eclipse.org/legal/epl-v10.html
|
|
# Internal script used by confignics only
|
|
# xCAT post script for configuring ib adapters.
|
|
# Work for both IPv4 and IPv6
|
|
# The following are a sample of the env used:
|
|
# NIC_IBNICS=ib0,ib1
|
|
# NIC_IBAPORTS=1 (or 2)
|
|
# OSVER=sles11.1
|
|
# NICNODE=dxm360m4n04
|
|
# NICIPS='eth0!10.1.34.242,ib1!15.0.1.242,ib2!15.0.2.242'
|
|
# NICHOSTNAMESUFFIXES='eth1!-eth1,ib1!-ib1,ib2!-ib2'
|
|
# NICTYPES='eth1!ethernet,ib1!infiniband,ib2!infiniband'
|
|
# NICNETWORKS='eth0!10_1_0_0-255_255_255_0,ib1!ib1,ib2!ib2'
|
|
# NETWORKS_LINES=3
|
|
# NETWORKS_LINE1='netname=10_1_0_0-255_255_255_0||net=10.1.0.0||mask=255.255.255.0||mgtifname=eth1||gateway=<xcatmaster>||dhcpserver=10.1.0.205||tftpserver=10.1.0.205||nameservers=||ntpservers=||logservers=||dynamicrange=||staticrange=||staticrangeincrement=||nodehostname=||ddnsdomain=||vlanid=||domain=||disable=||comments='
|
|
# NETWORKS_LINE2='netname=ib1||net=15.0.1.0||mask=255.255.255.0||mgtifname=||gateway=15.0.1.254||dhcpserver=||tftpserver=||nameservers=||ntpservers=||logservers=||dynamicrange=||staticrange=||staticrangeincrement=||nodehostname=||ddnsdomain=||vlanid=||domain=||disable=||comments='
|
|
# NETWORKS_LINE3='netname=ib3||net=15.0.3.0||mask=255.255.255.0||mgtifname=||gateway=||dhcpserver=||tftpserver=||nameservers=||ntpservers=||logservers=||dynamicrange=||staticrange=||staticrangeincrement=||nodehostname=||ddnsdomain=||vlanid=||domain=||disable=||comments='
|
|
|
|
|
|
if [ "$(uname -s|tr 'A-Z' 'a-z')" = "linux" ];then
|
|
str_dir_name=`dirname $0`
|
|
. $str_dir_name/xcatlib.sh
|
|
fi
|
|
|
|
#This is the number of ports for each ib adpator.
|
|
portnum=1
|
|
if [ -n "$NIC_IBAPORTS" ]; then
|
|
portnum=$NIC_IBAPORTS
|
|
fi
|
|
|
|
# pmatch determines if 1st argument string is matched by 2nd argument pattern
|
|
pmatch ()
|
|
{
|
|
case $1 in
|
|
$2) return 0;; # zero return code means string matched by pattern
|
|
esac
|
|
|
|
return 1 # non-zero return code means string not matched by pattern
|
|
}
|
|
|
|
convert_netmask_to_cidr() {
|
|
let cidrnum=0
|
|
OLFIFS=$IFS
|
|
IFS=.
|
|
for x in $1
|
|
do
|
|
case $x in
|
|
255) cidrnum=$(expr $cidrnum + 8);;
|
|
254) cidrnum=$(expr $cidrnum + 7);;
|
|
252) cidrnum=$(expr $cidrnum + 6);;
|
|
248) cidrnum=$(expr $cidrnum + 5);;
|
|
240) cidrnum=$(expr $cidrnum + 4);;
|
|
224) cidrnum=$(expr $cidrnum + 3);;
|
|
192) cidrnum=$(expr $cidrnum + 2);;
|
|
128) cidrnum=$(expr $cidrnum + 1);;
|
|
0);;
|
|
esac
|
|
done
|
|
IFS=$OLDIFS
|
|
echo $cidrnum
|
|
}
|
|
|
|
|
|
# The extra parameter are specified in the nics.nicextraparams.
|
|
# It has the following format:
|
|
# eth2!MTU=65520 CONNECTED_MODE=yes,eth3!MTU=1500
|
|
# This function gets the values for the given nic,
|
|
# It stores each parameter values in a separate array.
|
|
function get_nic_extra_params() {
|
|
nic_temp=$1
|
|
if [ ! "$NICEXTRAPARAMS" ];then
|
|
return
|
|
fi
|
|
old_ifs=$IFS
|
|
IFS=$','
|
|
array_conf_temp=($NICEXTRAPARAMS)
|
|
IFS=$old_ifs
|
|
|
|
i=0
|
|
while [ $i -lt ${#array_conf_temp[@]} ]
|
|
do
|
|
token="${array_conf_temp[$i]}"
|
|
D=
|
|
if echo "$token" | grep "!"; then
|
|
D="!"
|
|
else
|
|
D=":"
|
|
fi
|
|
key=`echo "$token" | cut -d"$D" -f 1`
|
|
if [ "$key" == "$nic_temp" ]; then
|
|
str_temp_value=`echo "$token" | cut -d"$D" -f 2`
|
|
#echo "token=$token, str_temp_value=$str_temp_value"
|
|
old_ifs=$IFS
|
|
IFS=$'|'
|
|
nic_params_temp=($str_temp_value)
|
|
IFS=$old_ifs
|
|
j=0
|
|
while [ $j -lt ${#nic_params_temp[@]} ]
|
|
do
|
|
#token1="${nic_params_temp[$j]}"
|
|
#echo "token1=$token1"
|
|
old_ifs=$IFS
|
|
IFS=$' '
|
|
params_temp=(${nic_params_temp[$j]})
|
|
IFS=$old_ifs
|
|
k=0
|
|
while [ $k -lt ${#params_temp[@]} ]
|
|
do
|
|
token2="${params_temp[$k]}"
|
|
key=`echo "$token2" | cut -d'=' -f 1`
|
|
value=`echo "$token2" | cut -d'=' -f 2`
|
|
#echo "key=$key, value=$value"
|
|
if [ "$key" = "mtu" ] || [ "$key" = "MTU" ]; then
|
|
array_nic_mtu[$j]=$value
|
|
elif [ "$key" = "connected_mode" ] || [ "$key" = "CONNECTED_MODE" ]; then
|
|
array_nic_connected[$j]=$value
|
|
fi
|
|
k=$((k+1))
|
|
done
|
|
if [[ -z "${array_nic_mtu[$j]}" ]]; then
|
|
array_nic_mtu[$j]=$str_default_token
|
|
fi
|
|
if [[ -z "${array_nic_connected[$j]}" ]]; then
|
|
array_nic_connected[$j]=$str_default_token
|
|
fi
|
|
j=$((j+1))
|
|
done
|
|
fi
|
|
i=$((i+1))
|
|
done
|
|
}
|
|
|
|
|
|
#if $NIC_IBNICS is not defined, all ib nics' configuration files will be deleted.
|
|
if [ -z "$NIC_IBNICS" ]; then
|
|
echo "nothing to do."
|
|
fi
|
|
|
|
|
|
#find correct IB driver
|
|
PLTFRM=`uname`
|
|
if [[ $OSVER == rhels5* || "$OSVER" == rhels6* || "$OSVER" == ubuntu14* ]]
|
|
then
|
|
ib_driver="rdma"
|
|
#/sbin/service $ib_driver status
|
|
checkservicestatus $ib_driver
|
|
#if [ $? -eq 1 ]
|
|
if [ $? -ne 0 ]
|
|
then
|
|
ib_driver="openibd"
|
|
#/sbin/service $ib_driver status
|
|
checkservicestatus $ib_driver
|
|
#if [ $? -eq 1 ]
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "Not found the driver dameon: rdma or openibd"
|
|
logger -p local4.info -t xcat "Not found the driver dameon: rdma or openibd"
|
|
exit
|
|
fi
|
|
fi
|
|
else
|
|
ib_driver="openibd"
|
|
fi
|
|
|
|
#make changes to the confiuration file
|
|
if [ $PLTFRM == "Linux" ]
|
|
then
|
|
if [ -f "/etc/rdma/rdma.conf" ]
|
|
then
|
|
TMP1=`sed "s/SDP_LOAD=yes/SDP_LOAD=no/g" /etc/rdma/rdma.conf`
|
|
echo "$TMP1" > /etc/rdma/rdma.conf
|
|
elif [ -f "/etc/infiniband/openib.conf" ]
|
|
then
|
|
TMP1=`sed "s/SDP_LOAD=yes/SDP_LOAD=no/g" /etc/infiniband/openib.conf`
|
|
echo "$TMP1" > /etc/infiniband/openib.conf
|
|
fi
|
|
|
|
if [ -f "/etc/modprobe.conf" ]
|
|
then
|
|
if [ "$portnum" == "1" ]; then
|
|
TMP2=`sed "/options ib_ehca nr_ports/d" /etc/modprobe.conf`
|
|
echo "$TMP2" > /etc/modprobe.conf
|
|
echo 'options ib_ehca nr_ports=1' >> /etc/modprobe.conf
|
|
else
|
|
TMP2=`sed "/options ib_ehca nr_ports=1/d" /etc/modprobe.conf`
|
|
echo "$TMP2" > /etc/modprobe.conf
|
|
fi
|
|
TMP3=`sed "/options ib_ehca lock_hcalls/d" /etc/modprobe.conf`
|
|
echo "$TMP3" > /etc/modprobe.conf
|
|
echo 'options ib_ehca lock_hcalls=0' >> /etc/modprobe.conf
|
|
fi
|
|
#/sbin/chkconfig --level 2345 $ib_driver on > /dev/null 2>&1
|
|
enableservice $ib_driver > /dev/null 2>&1
|
|
#/sbin/service $ib_driver restart
|
|
restartservice $ib_driver
|
|
sysctl -p
|
|
fi
|
|
|
|
#clean up existing ib nic configrations
|
|
if [ $PLTFRM == "Linux" ]
|
|
then
|
|
if [ -f /etc/redhat-release ]
|
|
then
|
|
OS_name="redhat"
|
|
elif [ -f /etc/SuSE-release ]
|
|
then
|
|
OS_name="suse"
|
|
elif [ -f /etc/os-release ] && cat /etc/os-release |grep NAME|grep Ubuntu>/dev/null
|
|
then
|
|
OS_name="ubuntu"
|
|
else
|
|
echo "Unsupported to config IB on this OS!"
|
|
logger -p local4.info -t xcat "Unsupported to config IB on this OS!"
|
|
exit
|
|
fi
|
|
|
|
if [ $OS_name != 'ubuntu' ]; then
|
|
if [ $OS_name == 'suse' ]
|
|
then
|
|
dir="/etc/sysconfig/network"
|
|
else
|
|
dir="/etc/sysconfig/network-scripts"
|
|
fi
|
|
|
|
#`rm -f $dir/ifcfg-$nic` 2>&1 1>/dev/null
|
|
# nic aliases
|
|
`rm -f $dir/ifcfg-ib*` 2>&1 1>/dev/null
|
|
else
|
|
interfaces="/etc/network/interfaces"
|
|
|
|
for tmp in `sed -n "/auto ib/=" ${interfaces}`
|
|
do
|
|
startline=`sed -n "/auto ib/=" ${interfaces}| head -n 1`
|
|
endline=`sed -n "$startline,/^auto/p" ${interfaces} |wc -l`
|
|
|
|
if sed -n "$startline,/^auto/p" ${interfaces} |sed '$!d' |grep "auto" >/dev/null;then
|
|
endline=`expr $startline + $endline - 2`
|
|
else
|
|
endline=`expr $startline + $endline - 1`
|
|
fi
|
|
|
|
((startline--))
|
|
temp=`sed -n ${startline}p ${interfaces}`
|
|
while [[ $temp =~ ^# ]]
|
|
do
|
|
((startline--))
|
|
temp=`sed -n ${startline}p ${interfaces}`
|
|
done
|
|
((startline++))
|
|
|
|
temp=`sed -n ${endline}p ${interfaces}`
|
|
while [[ $temp =~ ^# ]]
|
|
do
|
|
((endline--))
|
|
temp=`sed -n ${endline}p ${interfaces}`
|
|
done
|
|
|
|
sed -i ${startline},${endline}d ${interfaces}
|
|
done
|
|
fi
|
|
else
|
|
loop_number=`lsdev | grep "IP over Infiniband Network Interface" | wc -l`
|
|
num=0
|
|
while [ $num -lt $loop_number ]
|
|
do
|
|
if [ "$portnum" == "2" ]; then
|
|
num0=`expr $num \* 2`
|
|
num1=`expr $num0 + 1`
|
|
`rmdev -d -l ib$num0 >/dev/null 2>&1`
|
|
`rmdev -d -l ib$num1 >/dev/null 2>&1`
|
|
`rmdev -d -l ml$num >/dev/null 2>&1`
|
|
num=`expr $num + 1`
|
|
else
|
|
`rmdev -d -l ib$num >/dev/null 2>&1`
|
|
n=`expr $num % 2`
|
|
if [ $n == 1 ]
|
|
then
|
|
mlnum=`expr $num / 2`
|
|
`rmdev -d -l ml$mlnum >/dev/null 2>&1`
|
|
fi
|
|
num=`expr $num + 1`
|
|
fi
|
|
done
|
|
|
|
`rmdev -dl icm >/dev/null 2>&1`
|
|
|
|
#restart the managers
|
|
mkdev -c management -s infiniband -t icm
|
|
cfgmgr
|
|
fi
|
|
|
|
|
|
declare -a array_nic_mtu
|
|
declare -a array_nic_connected
|
|
# This token is used for the value of an attributes that has not been assigned any value.
|
|
str_default_token="default"
|
|
|
|
goodnics=""
|
|
for nic in `echo "$NIC_IBNICS" | tr "," "\n"`
|
|
do
|
|
#Get nic ips
|
|
nicips=""
|
|
for tmp in `echo "$NICIPS" | tr "," "\n"`
|
|
do
|
|
nic_tmp=`echo "$tmp" | awk -F"!" '{print $1}'`;
|
|
if [ $nic_tmp == $nic ]; then
|
|
# nicips=ip1|ip2|ip3
|
|
nicips=`echo "$tmp" | awk -F"!" '{print $2}'`;
|
|
break
|
|
fi
|
|
done
|
|
# echo "nic=$nic, nicip=$nicip"
|
|
|
|
#get nic networks name
|
|
nicnets=""
|
|
for tmp in `echo "$NICNETWORKS" | tr "," "\n"`
|
|
do
|
|
nic_tmp=`echo "$tmp" | awk -F"!" '{print $1}'`;
|
|
if [ $nic_tmp == $nic ]; then
|
|
# nicnets=net1|net2|net3
|
|
nicnets=`echo "$tmp" | awk -F"!" '{print $2}'`;
|
|
break
|
|
fi
|
|
done
|
|
#echo "nic=$nic, nicnet=$nicnet"
|
|
|
|
if [ -z "$nicnets" ]; then
|
|
echo "No network defined for $nic"
|
|
logger -p local4.info -t xcat "No network defined for $nic"
|
|
continue
|
|
fi
|
|
|
|
array_nic_mtu=()
|
|
array_nic_connected=()
|
|
get_nic_extra_params $nic
|
|
|
|
ipindex=0
|
|
for nicip in `echo $nicips | tr "|" "\n"`
|
|
do
|
|
ipindex=`expr $ipindex + 1`
|
|
nicnet=`echo $nicnets | cut -d '|' -f$ipindex`
|
|
|
|
#get netmask and gateway
|
|
index=0;
|
|
found=0
|
|
while [ $index -lt $NETWORKS_LINES ]
|
|
do
|
|
index=$((index+1))
|
|
eval netline=\$NETWORKS_LINE$index
|
|
if [[ -n "$netline" ]]; then
|
|
for tmp in `echo "$netline" | tr "\|" "\n"`
|
|
do
|
|
key=`echo "$tmp" | awk -F"=" '{print $1}'`;
|
|
case $key in
|
|
netname)
|
|
netname=`echo "$tmp" | awk -F"=" '{print $2}'`
|
|
if [ "$netname" != "$nicnet" ];
|
|
then
|
|
break;
|
|
fi
|
|
;;
|
|
net)
|
|
net=`echo "$tmp" | awk -F"=" '{print $2}'`
|
|
;;
|
|
mask)
|
|
netmask=`echo "$tmp" | awk -F"=" '{print $2}'`
|
|
# remove the prefix "/" from ipv6 mask
|
|
if echo $netmask | grep "/" 2>&1 1>/dev/null
|
|
then
|
|
netmask=`echo $netmask | awk -F'/' '{print $2}'`
|
|
fi
|
|
;;
|
|
gateway)
|
|
gateway=`echo "$tmp" | awk -F"=" '{print $2}'`
|
|
found=1
|
|
;;
|
|
esac
|
|
if [ $found -eq 1 ]; then
|
|
break;
|
|
fi
|
|
done # end for tmp in `echo "$netline" | tr "\|" "\n"`
|
|
if [ $found -eq 1 ]; then
|
|
break;
|
|
fi
|
|
fi # end if [[ -n "$netline" ]]
|
|
done # end while [ $index -lt $NETWORKS_LINES ]
|
|
|
|
#echo "found=$found"
|
|
#echo "index=$index netname=$nicnet net=$net mask=$netmask gateway=$gateway"
|
|
|
|
# Setup goodnics list
|
|
if [ "$found" == "0" ]; then
|
|
echo "Cannot find network $nicnet for $nic"
|
|
logger -p local4.info -t xcat "Cannot find network $nicnet for $nic"
|
|
continue
|
|
else
|
|
if [ -z "$goodnics" ]; then
|
|
goodnics=$nic
|
|
else
|
|
goodnics="$goodnics,$nic"
|
|
fi
|
|
fi
|
|
|
|
#there should be only one gateway on a node and that should go through the to the xcat management node and would be set up from the install nic. Anything else should be a route
|
|
if [ "$gateway" == "<xcatmaster>" ]; then
|
|
gateway=''
|
|
fi
|
|
|
|
str_mtu=${array_nic_mtu[$ipindex-1]}
|
|
str_connect_mode=${array_nic_connected[$ipindex-1]}
|
|
|
|
if [ $PLTFRM == "Linux" ]
|
|
then
|
|
# Issue openibd for Linux at boot time
|
|
|
|
if [ -f /etc/sysctl.conf ]
|
|
then
|
|
TMP1=`sed "/net.ipv4.conf.$nic.arp_filter=1/d" /etc/sysctl.conf`
|
|
echo "$TMP1" > /etc/sysctl.conf
|
|
TMP2=`sed "/net.ipv4.conf.$nic.arp_ignore=1/d" /etc/sysctl.conf`
|
|
echo "$TMP2" > /etc/sysctl.conf
|
|
cfg="net.ipv4.conf.$nic.arp_filter=1"
|
|
grep "$cfg" /etc/sysctl.conf 2>&1 1>/dev/null
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "net.ipv4.conf.$nic.arp_filter=1" >> /etc/sysctl.conf
|
|
fi
|
|
cfg="net.ipv4.conf.$nic.arp_ignore=1"
|
|
grep "$cfg" /etc/sysctl.conf 2>&1 1>/dev/null
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "net.ipv4.conf.$nic.arp_ignore=1" >> /etc/sysctl.conf
|
|
fi
|
|
fi
|
|
|
|
if [ $OS_name == 'suse' ]
|
|
then
|
|
# First ip address
|
|
if [ $ipindex -eq 1 ]
|
|
then
|
|
# Write the info to the ifcfg file
|
|
echo "DEVICE=$nic
|
|
NM_CONTROLLED=no
|
|
BOOTPROTO=static
|
|
STARTMODE=onboot
|
|
IPADDR=$nicip" > $dir/ifcfg-$nic
|
|
# ipv6
|
|
if echo $nicip | grep : 2>&1 1>/dev/null
|
|
then
|
|
echo "PREFIXLEN=$netmask" >> $dir/ifcfg-$nic
|
|
else
|
|
echo "NETMASK=$netmask" >> $dir/ifcfg-$nic
|
|
fi
|
|
if [ -n "$gateway" ]; then
|
|
# Do not add duplicate default gateway entry
|
|
grep -E "default\\s+$gateway\\s+" /etc/sysconfig/network/routes 2>&1 1>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
echo "default $gateway - -" >> /etc/sysconfig/network/routes
|
|
fi
|
|
fi
|
|
if [ -n "$str_mtu" -a "$str_mtu" != "$str_default_token" ]; then
|
|
echo "MTU=${str_mtu}" >> $dir/ifcfg-$nic
|
|
fi
|
|
if [ -n "$str_connect_mode" -a "$str_connect_mode" != "$str_default_token" ]; then
|
|
echo "CONNECTED_MODE=${str_connect_mode}" >> $dir/ifcfg-$nic
|
|
fi
|
|
else # not the first ip address
|
|
echo "LABEL_$ipindex=$ipindex
|
|
IPADDR_$ipindex=$nicip" >> $dir/ifcfg-$nic
|
|
# ipv6
|
|
if echo $nicip | grep : 2>&1 1>/dev/null
|
|
then
|
|
echo "PREFIXLEN_$ipindex=$netmask" >> $dir/ifcfg-$nic
|
|
else
|
|
echo "NETMASK_$ipindex=$netmask" >> $dir/ifcfg-$nic
|
|
fi
|
|
if [ -n "$gateway" ]; then
|
|
# Do not add duplicate default gateway entry
|
|
grep -E "default\\s+$gateway\\s+" /etc/sysconfig/network/routes 2>&1 1>/dev/null
|
|
if [ $? -ne 0 ]; then
|
|
echo "default $gateway - -" >> /etc/sysconfig/network/routes
|
|
fi
|
|
fi
|
|
fi # end if [ $ipindex -eq 1 ]
|
|
elif [ $OS_name == 'redhat' ]
|
|
then
|
|
# First ip address
|
|
if [ $ipindex -eq 1 ]
|
|
then
|
|
# Write the info to the ifcfg file
|
|
echo "DEVICE=$nic
|
|
NM_CONTROLLED=no
|
|
BOOTPROTO=none
|
|
ONBOOT=yes
|
|
IPADDR=$nicip" > $dir/ifcfg-$nic
|
|
# ipv6
|
|
if echo $nicip | grep : 2>&1 1>/dev/null
|
|
then
|
|
echo "PREFIXLEN=$netmask" >> $dir/ifcfg-$nic
|
|
else
|
|
if [[ "$OSVER" == rhels6* ]]
|
|
then
|
|
#get prefix from netmask, this is for IPv4 only
|
|
prefix=24
|
|
prefix=$(convert_netmask_to_cidr $netmask)
|
|
echo "PREFIX=$prefix" >> $dir/ifcfg-$nic
|
|
else
|
|
echo "NETMASK=$netmask" >> $dir/ifcfg-$nic
|
|
fi
|
|
fi
|
|
if [ -n "$gateway" ]; then
|
|
echo "GATEWAY=$gateway" >> $dir/ifcfg-$nic
|
|
fi
|
|
if [ -n "$str_mtu" -a "$str_mtu" != "$str_default_token" ]; then
|
|
echo "MTU=${str_mtu}" >> $dir/ifcfg-$nic
|
|
fi
|
|
if [ -n "$str_connect_mode" -a "$str_connect_mode" != "$str_default_token" ]; then
|
|
echo "CONNECTED_MODE=${str_connect_mode}" >> $dir/ifcfg-$nic
|
|
fi
|
|
else # not the first ip address
|
|
# ipv6
|
|
if echo $nicip | grep : 2>&1 1>/dev/null
|
|
then
|
|
grep "IPV6INIT" $dir/ifcfg-$nic 2>&1 1>/dev/null
|
|
# The first ipv6 address
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "IPV6INIT=yes
|
|
IPV6ADDR=$nicip/$netmask" >> $dir/ifcfg-$nic
|
|
else
|
|
echo "IPV6ADDR_SECONDARIES=$nicip/$netmask" >> $dir/ifcfg-$nic
|
|
fi
|
|
if [ -n "$gateway" ]; then
|
|
echo "IPV6_DEFAULTGW=$gateway" >> $dir/ifcfg-$nic
|
|
fi
|
|
else # ipv4 address
|
|
echo "DEVICE=$nic:$ipindex
|
|
NM_CONTROLLED=no
|
|
BOOTPROTO=none
|
|
ONBOOT=yes
|
|
IPADDR=$nicip" > $dir/ifcfg-$nic:$ipindex
|
|
if [[ "$OSVER" == rhels6* ]]
|
|
then
|
|
#get prefix from netmask, this is for IPv4 only
|
|
prefix=24
|
|
prefix=$(convert_netmask_to_cidr $netmask)
|
|
echo "PREFIX=$prefix" >> $dir/ifcfg-$nic:$ipindex
|
|
else
|
|
echo "NETMASK=$netmask" >> $dir/ifcfg-$nic:$ipindex
|
|
fi
|
|
|
|
if [ -n "$gateway" ]; then
|
|
echo "GATEWAY=$gateway" >> $dir/ifcfg-$nic:$ipindex
|
|
fi
|
|
if [ -n "$str_mtu" -a "$str_mtu" != "$str_default_token" ]; then
|
|
echo "MTU=${str_mtu}" >> $dir/ifcfg-$nic:$ipindex
|
|
fi
|
|
if [ -n "$str_connect_mode" -a "$str_connect_mode" != "$str_default_token" ]; then
|
|
echo "CONNECTED_MODE=${str_connect_mode}" >> $dir/ifcfg-$nic:$ipindex
|
|
fi
|
|
# need to run ifup eth1:1 for RedHat
|
|
goodnics="$goodnics,$nic:$ipindex"
|
|
fi
|
|
fi # end not the first ip address
|
|
elif [ $OS_name == 'ubuntu' ]
|
|
then
|
|
# First ip address
|
|
if [ $ipindex -eq 1 ]; then
|
|
# ipv6
|
|
if echo $nicip | grep : 2>&1 1>/dev/null
|
|
then
|
|
echo "auto $nic
|
|
iface $nic inet6 static
|
|
address $nicip
|
|
netmask $netmask" >> /etc/network/interfaces
|
|
|
|
if [ -n "$gateway" ]; then
|
|
echo "gateway $gateway" >> /etc/network/interfaces
|
|
fi
|
|
# ipv4
|
|
else
|
|
# Write the info to the ifcfg file
|
|
echo "auto $nic
|
|
iface $nic inet static
|
|
address $nicip
|
|
netmask $netmask" >> /etc/network/interfaces
|
|
|
|
#if [ -n "$gateway" ]; then
|
|
# echo "gateway $gateway" >> /etc/network/interfaces
|
|
#fi
|
|
fi
|
|
else # Not the first ip address
|
|
# ipv6
|
|
if echo $nicip | grep : 2>&1 1>/dev/null
|
|
then
|
|
echo "auto $nic
|
|
iface $nic inet6 static
|
|
address $nicip
|
|
netmask $netmask" >> /etc/network/interfaces
|
|
|
|
if [ -n "$gateway" ]; then
|
|
echo "gateway $gateway" >> /etc/network/interfaces
|
|
fi
|
|
else # ipv4
|
|
echo "auto $nic:$ipindex
|
|
iface $nic:$ipindex inet static
|
|
address $nicip
|
|
netmask $netmask" >> /etc/network/interfaces
|
|
|
|
#if [ -n "$gateway" ]; then
|
|
# echo "gateway $gateway" >> /etc/network/interfaces
|
|
#fi
|
|
fi
|
|
|
|
if [ -n "$str_mtu" -a "$str_mtu" != "$str_default_token" ]; then
|
|
echo "mtu ${str_mtu}" >> /etc/network/interfaces
|
|
fi
|
|
if [ -n "$str_connect_mode" -a "$str_connect_mode" != "$str_default_token" ]; then
|
|
echo "connected_mode ${str_connect_mode}" >> /etc/network/interfaces
|
|
fi
|
|
fi
|
|
else
|
|
echo "Unsupported operating system"
|
|
logger -p local4.err -t xcat "Unsupported operating system"
|
|
fi
|
|
|
|
elif [ $PLTFRM == "AIX" ]; then
|
|
if ( pmatch $nic "ml*" ); then #for ml* interface
|
|
num=${nic##ml}
|
|
mlt="mlt$num"
|
|
#Check whether the mlt is available
|
|
lsdev -C | grep $mlt | grep Available 2>&1 >/dev/null
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo "$mltnum is not available."
|
|
logger -p local4.info -t xcat "$mltnum is not available."
|
|
continue
|
|
fi
|
|
|
|
#Check whether the ml0 is available
|
|
lsdev -C | grep $nic 2>&1 >/dev/null
|
|
if [ $? -ne 0 ]
|
|
then
|
|
cfgmgr 2>&1 >/dev/null
|
|
fi
|
|
|
|
chdev -l $nic -a state=detach 2>&1
|
|
chdev -l $nic -a netaddr=$nicip -a netmask=$netmask -a state=up 2>&1
|
|
else #assume it is ib*
|
|
#lsdev -C | grep icm | grep Available
|
|
#if [ $? -ne 0 ]
|
|
#then
|
|
# mkdev -c management -s infiniband -t icm
|
|
# if [ $? -ne 0 ]
|
|
# then
|
|
# mkdev -l icm
|
|
# if [ $? -ne 0 ]
|
|
# then
|
|
# exit $?
|
|
# fi
|
|
# fi
|
|
# fi
|
|
|
|
#Configure the IB interfaces. Customize the port num.
|
|
num=${nic##ib} #this assumes that all the nics starts with 'ib'
|
|
if [ "$portnum" == "1" ]; then
|
|
iba_num=$num
|
|
ib_adapter="iba$iba_num"
|
|
port=1
|
|
else
|
|
iba_num=`expr $num / 2`
|
|
ib_adapter="iba$iba_num"
|
|
if [ $(($num % 2)) == 0 ]
|
|
then
|
|
port=1
|
|
else
|
|
port=2
|
|
fi
|
|
fi
|
|
if [ $NODE ]; then
|
|
shortname=$NODE
|
|
else
|
|
shortname=`hostname -s`
|
|
fi
|
|
chdev -l $ib_adapter -a hostname=$shortname
|
|
mkiba -a $nicip -i $nic -A $ib_adapter -p $port -P -1 -S up -m $netmask
|
|
fi # end assume it is ib*
|
|
fi # end if AIX
|
|
done # end for nicip
|
|
done # end for nic
|
|
|
|
# echo "goodnics=$goodnics"
|
|
# Bringup all the ib interfaces
|
|
if [ $PLTFRM == "Linux" ]
|
|
then
|
|
#/sbin/service $ib_driver restart
|
|
restartservice $ib_driver
|
|
for nic in `echo "$goodnics" | tr "," "\n"|sort -u`
|
|
do
|
|
sleep 5
|
|
if [[ "$OSVER" == rhels6* ]]
|
|
then
|
|
ip link set dev $nic up
|
|
else
|
|
if [[ "$OSVER" == ubuntu14* ]]
|
|
then
|
|
interfaces="/etc/network/interfaces"
|
|
for tmp in `cat $interfaces |grep "auto ib" |sort -u|awk '{print $2}'`
|
|
do
|
|
ifdown $tmp > /dev/null 2>&1
|
|
sleep 2
|
|
ifup $tmp > /dev/null 2>&1
|
|
done
|
|
else
|
|
ifup $nic > /dev/null 2>&1
|
|
fi
|
|
fi
|
|
done
|
|
fi
|