blob: d0f79aa724ba16cd164770d824a5471c2daaec83 [file] [log] [blame]
#!/bin/sh
test_log=`nv get telog_path`
if [ "$test_log" == "" ]; then
test_log=`nv get path_log`"te.log"
fi
echo "Info: psext_up.sh $1 start" >> $test_log
path_conf=`nv get path_conf`
dhcps_in_cap=`nv get dhcps_in_cap`
echo 1 > /proc/sys/net/ipv4/ip_forward
c_id=$1
ps_if=`nv get pswan`$c_id
eth_if=`nv get "ps_ext"$c_id`
ext_br="br"$c_id
pidfile=$path_conf"/udhcpd"$c_id".pid"
confile=$path_conf"/udhcpd"$c_id".conf"
leases=$path_conf"/udhcpd"$c_id".leases"
arp_proxy_set()
{
(zte_arp_proxy -i $ext_br 2>> $test_log || echo "Error: zte_arp_proxy -i $ext_br failed." >> $test_log) &
}
dhcp_set()
{
mask=`nv get $ext_br"_nm"`
ifconfig $ext_br netmask $mask 2>>$test_log
if [ $? -ne 0 ];then
echo "Error: ifconfig $eth_br netmask $mask failed." >> $test_log
fi
if [ "x$dhcps_in_cap" != "x1" ]; then
if [ -e ${pidfile} ]; then
kill `cat $pidfile`
rm -f $pidfile
fi
touch $leases
udhcpd -f $confile &
fi
}
#»ñÈ¡ip²¢ÅäÖÃps¡¢eth
get_ipaddr()
{
pdp_ip=`nv get $ps_if"_pdp_ip"`
ps_ip=`nv get $ps_if"_ip"`
br_ip=`nv get $ext_br"_ip"`
ifconfig $ps_if $ps_ip netmask 255.255.255.0 up 2>>$test_log
if [ $? -ne 0 ];then
echo "Error: ifconfig $ps_if $ps_ip up failed." >> $test_log
fi
nv set default_wan_rel=$ps_if
#nv set default_cid=$c_id
nv set $ext_br"_ip"=$br_ip
ifconfig $ext_br $br_ip 2>>$test_log
if [ $? -ne 0 ];then
echo "Error: ifconfig $ext_br $br_ip up failed." >> $test_log
fi
}
#·ÓɹæÔò£¬psÓëeth¼¶Áª
route_set()
{
marknum=`expr $c_id + 20`
iptables -t mangle -A PREROUTING -i $ps_if -j MARK --set-mark $marknum
rt_num=`expr $c_id + 120`
ip route add default dev $ext_br table $rt_num
ip rule add to $pdp_ip fwmark $marknum table $rt_num
marknum=`expr $c_id + 10`
iptables -t mangle -A PREROUTING -i $ext_br -j MARK --set-mark $marknum
rt_num=`expr $c_id + 100`
ip route add default dev $ps_if table $rt_num
ip rule add from $pdp_ip fwmark $marknum table $rt_num
ip route flush cache
#±¾µØÍøÂçÅäÖÃ
iptables -t nat -I POSTROUTING -s $ps_ip -o $ps_if -j SNAT --to $pdp_ip
route_info=`ip route|grep default`
if [ "$route_info" == "" ];then
route add default dev $ps_if
else
echo "Debug: default route already exist." >> $test_log
fi
}
mtu=`nv get mtu`
ifconfig $ps_if mtu $mtu
brctl addbr $ext_br
brctl setfd $ext_br 0.1
brctl addif $ext_br $eth_if
ifconfig $ext_br up
get_ipaddr
dhcp_set
route_set
arp_proxy_set
ifconfig $eth_if up
ismbim=`ps |grep -v grep |grep -w mbim |awk '{printf $1}'`
if [ "-$ismbim" != "-" ]; then
eth_mac=`cat "/sys/class/net/"$eth_if"/address"`
arp -s $pdp_ip $eth_mac -i $ext_br 2>>$test_log
fi
tc_tbf.sh up $c_id