由于上层应用的网络配置功能存在bug,以及用户的不留心,导致设备网络配置失败,网卡起不来了。
完善了之前写的开机网络配置脚本,新增了网络信息合法性检测,记录一下。
#!/bin/sh
#filepath="/etc/init.d/net.conf"
netdev="eth0"
dhcp=0
ipaddr="192.168.100.88"
netmask="255.255.255.0"
gateway="192.168.100.1"
fdns="192.168.100.1"
macaddr="D4:E0:8E:DB:18:06"
netconf_path="/data/net.conf"
state=1
flag=0
default_netconf() {
echo -n -e "dhcp=0\n" > ${netconf_path}
echo -n -e "ipaddr=192.168.100.88\n" >> ${netconf_path}
echo -n -e "netmask=255.255.255.0\n" >> ${netconf_path}
echo -n -e "gateway=192.168.100.1\n" >> ${netconf_path}
echo -n -e "fdns=192.168.100.1\n" >> ${netconf_path}
echo -n -e "macaddr=D4:E0:8E:DB:18:06\n" >> ${netconf_path}
chmod 755 ${netconf_path}
}
check_ip()
{
echo $1 | grep "^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}$" > /dev/null
if [ $? = 1 ]; then
return 0;
else
a=`echo $1 | awk -F. '{print $1}'`
b=`echo $1 | awk -F. '{print $2}'`
c=`echo $1 | awk -F. '{print $3}'`
d=`echo $1 | awk -F. '{print $4}'`
#echo $a $b $c $d
if [ ${a} = 0 ] || [ ${d} = 0 ]; then
return 0;
fi
for loop in $a $b $c $d
do
if [ $loop -ge 255 ] || [ $loop -lt 0 ]; then
return 0;
fi
done
fi
return 1;
}
check_mask()
{
#echo $1 | grep "^(254|252|248|240|224|192|128|0)\.0\.0\.0|255\.(254|252|248|240|224|192|128|0)\.0\.0|255\.255\.(254|252|248|240|224|192|128|0)\.0|255\.255\.255\.(254|252|248|240|224|192|128|0)$" > /dev/null
echo $1 | grep "^\(254\|252\|248\|240\|224\|192\|128\|0\)\.0\.0\.0\|255\.\(254\|252\|248\|240\|224\|192\|128\|0\)\.0\.0\|255\.255\.\(254\|252\|248\|240\|224\|192\|128\|0\)\.0\|255\.255\.255\.\(254\|252\|248\|240\|224\|192\|128\|0\)$" > /dev/null
if [ $? = 1 ]; then
return 0;
else
return 1;
fi
}
check_mac_addr()
{
#if echo $1 | grep -qiP "^([\dA-F]{2}:){5}[\dA-F]{2}$"; then
echo $1 | grep "^[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}\:[A-Fa-f0-9]\{2\}$" > /dev/null
if [ $? = 1 ]; then
return 0;
else
return 1;
fi
}
check_ip_gateway()
{
ip_sbit0=`echo $1 | awk -F. '{print $1}'`
ip_sbit1=`echo $1 | awk -F. '{print $2}'`
ip_sbit2=`echo $1 | awk -F. '{print $3}'`
ip_sbit3=`echo $1 | awk -F. '{print $4}'`
#echo ${ip_sbit0} ${ip_sbit1} ${ip_sbit2} ${ip_sbit3}
mask_sbit0=`echo $2 | awk -F. '{print $1}'`
mask_sbit1=`echo $2 | awk -F. '{print $2}'`
mask_sbit2=`echo $2 | awk -F. '{print $3}'`
mask_sbit3=`echo $2 | awk -F. '{print $4}'`
#echo ${mask_sbit0} ${mask_sbit1} ${mask_sbit2} ${mask_sbit3}
gw_sbit0=`echo $3 | awk -F. '{print $1}'`
gw_sbit1=`echo $3 | awk -F. '{print $2}'`
gw_sbit2=`echo $3 | awk -F. '{print $3}'`
gw_sbit3=`echo $3 | awk -F. '{print $4}'`
#echo ${gw_sbit0} ${gw_sbit1} ${gw_sbit2} ${gw_sbit3}
ip_sbit0=$((${ip_sbit0} & ${mask_sbit0}))
ip_sbit1=$((${ip_sbit1} & ${mask_sbit1}))
ip_sbit2=$((${ip_sbit2} & ${mask_sbit2}))
ip_sbit3=$((${ip_sbit3} & ${mask_sbit3}))
gw_sbit0=$((${gw_sbit0} & ${mask_sbit0}))
gw_sbit1=$((${gw_sbit1} & ${mask_sbit1}))
gw_sbit2=$((${gw_sbit2} & ${mask_sbit2}))
gw_sbit3=$((${gw_sbit3} & ${mask_sbit3}))
#echo ${ip_sbit0} ${ip_sbit1} ${ip_sbit2} ${ip_sbit3}
#echo ${gw_sbit0} ${gw_sbit1} ${gw_sbit2} ${gw_sbit3}
if [ ${ip_sbit0} = ${gw_sbit0} ] && [ ${ip_sbit1} = ${gw_sbit1} ] && [ ${ip_sbit2} = ${gw_sbit2} ] && [ ${ip_sbit3} = ${gw_sbit3} ]; then
return 1;
else
return 0;
fi
}
if [ "$1" ];then
netconf_path=$1
fi
if [ -f ${netconf_path} ];then
echo "exist ${netconf_path}"
else
echo "not exitst ${netconf_path}"
echo "use default netconf"
default_netconf
fi
for ipinfo in `cat ${netconf_path}`
do
case "${ipinfo}" in
dhcp*)
dhcp=`echo ${ipinfo} | cut -d = -f 2`
if [ ${dhcp} != "0" ] && [ ${dhcp} != "1" ]; then
echo ${dhcp}
echo "dhcp format error"
dhcp="0"
state=0
fi
let flag+=1
;;
fdns*)
fdns=`echo ${ipinfo} | cut -d = -f 2`
check_ip ${fdns}
ret=$?
if [ ${ret} = 0 ]; then
echo ${fdns}
echo "fdns format error"
fdns="192.168.100.1"
state=0
fi
let flag+=1
;;
ipaddr*)
ipaddr=`echo ${ipinfo} | cut -d = -f 2`
check_ip ${ipaddr}
ret=$?
if [ ${ret} = 0 ]; then
echo ${ipaddr}
echo "ipaddr format error"
ipaddr="192.168.100.88"
state=0
fi
d=`echo ${ipaddr} | awk -F. '{print $4}'`
if [ ${d} = 0 ]; then
echo ${ipaddr}
echo "ipaddr format error"
ipaddr="192.168.100.88"
state=0
fi
let flag+=1
#echo "ip = "${ipaddr}
;;
netmask*)
netmask=`echo ${ipinfo} | cut -d = -f 2`
check_mask ${netmask}
ret=$?
if [ ${ret} = 0 ]; then
echo ${netmask}
echo "netmask format error"
netmask="255.255.255.0"
state=0
fi
let flag+=1
#echo "netmask = "${netmask}
;;
gateway*)
gateway=`echo ${ipinfo} | cut -d = -f 2`
check_ip ${gateway}
ret=$?
if [ ${ret} = 0 ]; then
echo ${gateway}
echo "gateway format error"
gateway="192.168.100.1"
state=0
fi
let flag+=1
#echo "gateway = "${gateway}
;;
macaddr*)
macaddr=`echo ${ipinfo} | cut -d = -f 2`
check_mac_addr ${macaddr}
ret=$?
if [ ${ret} = 0 ]; then
echo ${macaddr}
echo "macaddr format error"
macaddr="D4:E0:8E:DB:18:06"
state=0
fi
let flag+=1
#echo "macaddr = "${macaddr}
;;
esac
done
check_ip_gateway ${ipaddr} ${netmask} ${gateway}
ret=$?
if [ ${ret} = 0 ]; then
echo "ipaddr:"${ipaddr}
echo "netmask:"${netmask}
echo "gateway:"${gateway}
echo "ipaddr_gateway check failed"
ipaddr="192.168.100.88"
netmask="255.255.255.0"
gateway="192.168.100.1"
state=0
fi
#echo "flag = "${flag}
if [ ${state} = 0 ] || [ ${flag} != 6 ]; then
echo -n -e "dhcp=${dhcp}\n" > ${netconf_path}
echo -n -e "ipaddr=${ipaddr}\n" >> ${netconf_path}
echo -n -e "netmask=${netmask}\n" >> ${netconf_path}
echo -n -e "gateway=${gateway}\n" >> ${netconf_path}
echo -n -e "fdns=${fdns}\n" >> ${netconf_path}
echo -n -e "macaddr=${macaddr}\n" >> ${netconf_path}
chmod 755 ${netconf_path}
echo "write netinfo success"
fi
echo "ip = "${ipaddr}
echo "netmask = "${netmask}
echo "gateway = "${gateway}
echo "macaddr = "${macaddr}
#check_ip_gateway "192.168.10.238" "255.255.255.0" "192.168.100.1"
#echo $?
#set network
ifconfig lo up
ifconfig ${netdev} hw ether ${macaddr}
ifconfig ${netdev} up
ifconfig ${netdev} ${ipaddr} netmask ${netmask}
route add default gw "${gateway}" dev ${netdev}
echo "init ${netdev} finish"