分类: LINUX
2011-08-30 10:55:25
方法非常笨,连续尝试启动pppd拨号,如果总失败,则间歇一段时间继续尝试;如果拨上号了就自动启动网络检测,保证长期在线,如果检测到网络不通则自动调用重拨。
网络检测用的方法也非常笨,就间歇对GGSN结点ping几个包,不通则认为掉线,启动重拨。
在uclinux中的msh环境中多次尝试了数学运算,无奈只好写成下面那样的循环控制。正常的方法应该是:
LOOP=0
LOOP='expr $LOOP + 1'
这样控制循环的。但是目标板上的msh环境中好不容易调出expr功能,却不支持命令替换,如'Linux Cmd'或$(Linux Cmd),郁闷死了~~无法使变量在循环体中递增或递减。。。只好用字符串来控制了~
在uclinux文件系统中/home/下放ppp-auto-link脚本:
#!/bin/sh
######################################################################
RETRY_TIMES=11111
while [ "$RETRY_TIMES" != "$RETRY_TMP" ]; do
ifconfig ppp0 2> /dev/null
if [ $? -ne 0 ]; then #if ppp0 is not active
# echo "**************************************************"
# echo "PPP0 is not active, cleaning the link stuff now..."
killall pppd 2> /dev/null
RETRY_TMP=$RETRY_TMP\1
# echo "Dialing... $RETRY_TMP"
pppd nodetach call gprs
# if [ $? -eq 0 ]; then
# break
# fi
else
break
fi
done
if [ "$RETRY_TIMES" == "$RETRY_TMP" ]; then #after 3times trying,exit
echo ""
echo "------------------------------------------------------------------"
echo "Cann't establish the PPP link!! Wait for retrying after 10 mins..."
echo "------------------------------------------------------------------"
sleep 600 #wait for 10 miniutes, then try again
exec ./ppp-auto-link
fi
echo ""
echo "+++++++++++++++++++++++++++++++++++++++++++++"
echo "PPP0 has been established!"
sleep 5 #wait for a moment before monitoring
exec ./netmonitor
exit 0
以及netmonitor脚本:
#!/bin/sh
DES_TO_MONITOR=192.168.5.1
echo "------------------"
echo "Net monitoring..."
echo "------------------"
while [ 1 ]; do
# echo "**************************************"
echo "pinging $DES_TO_MONITOR"
ping -c 3 $DES_TO_MONITOR 2> /dev/null
if [ $? -eq 0 ]; then #net OK
echo "Net OK!"
sleep 600
else
echo "try again after 5s ..."
sleep 5
ping -c 2 $DES_TO_MONITOR 2> /dev/null
if [ $? -ne 0 ]; then
echo "Net error! Now starting redialing..."
killall pppd 2> /dev/null
exec ./ppp-auto-link
else
continue
fi
fi
done
然后把redhat linux中的/etc/ppp/ip-up和ip-down脚本拷到uclinux的/etc/ppp/下,在uclinux的该目录下写ip-up.local脚本,就一句话:
#!/bin/sh
exec /home/netmonitor
ppp连接成功后将自动检查/etc/ppp/ip-up是否存在,不存在则忽略,存在则执行之。killall pppd后也将检测/etc/ppp/ip-down,有则执行,无则忽略。
板子上电后,启动/home/ppp-auto-link&,就可以确保连接了。试验拔掉GPRS电源,能自动检测和重拨上去。实验用,里面的参数尚要修改,如ping的间歇时间等。
不知这样的检测程序是否会很占系统资源。。