blob: 8b5e889b219c99e42204a577c35bf8c0281a4623 [file] [log] [blame]
#!/bin/sh
# para 1 add/del/bypass --- para 2&3&4 needed only in add
# para 2 cid --- translate specific skb from v4 to v6
# para 3 local v4 addr --- default is 192.0.0.1/32 if not assign
# para 4 remote v6 prefix --- default is 64:ff9b::/96 if not assign
network_cfg() {
if [ "$PIPE" == "1" ]; then
uci set network.lan.ipaddr=$gw
uci set network.lan.netmask=255.255.255.0
uci commit network
/etc/init.d/network reload
option=`uci get dhcp.lan.dhcp_option`
for i in $option
do
uci del_list dhcp.lan.dhcp_option="$i"
done
uci set dhcp.lan.start=$host
uci set dhcp.lan.limit=1
uci add_list dhcp.lan.dhcp_option=3,$gw
uci add_list dhcp.lan.dhcp_option=6,8.8.8.8,114.114.114.114
uci add_list dhcp.lan.dhcp_option=1,255.255.255.0
uci commit dhcp
/etc/init.d/dnsmasq reload
else
ifconfig $iface $ipaddr
ip route add default dev $iface
fi
}
if [ -d /sys/kernel/debug/tel/psd/data-pathv1 ]; then
psd_ver=data-pathv1
elif [ -d /sys/kernel/debug/tel/psd/data-pathv3 ]; then
psd_ver=data-pathv3
else
echo "464xlat:wrong datapath version" > /dev/kmsg
exit 0
fi
if [ $1 == "del" ]; then
echo del nat46 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
exit 0
fi
if [ $1 == "bypass" ]; then
echo 1 > /sys/kernel/debug/tel/psd/$psd_ver/bypass_nat46
exit 0
fi
[ $1 == "add" ] || exit 0
if [ -z $3 ]; then
ipaddr=192.0.0.1
else
ipaddr=$3
fi
if [ -z $4 ]; then
remote=64:ff9b::/96
else
remote=$4
fi
iface=ccinet$2
PIPE=`uci get cmdline.PIPE 2> /dev/null`
if [ "$PIPE" == "1" ]; then
host=`echo $ipaddr | awk -F "." '{print $4}'`
gw_host=$((255 - $((host)) ))
net=`echo $ipaddr | awk '{split($ipaddr, a, "."); print a[1]"."a[2]"."a[3]}'`
gw=$net.$gw_host
network_cfg
echo "464xlat:ver=$psd_ver,cid=$2,local.v4=$ipaddr,remote.v6=$remote,pipe=$PIPE" > /dev/kmsg
local_v6=`cat /sys/kernel/mpipe/devices/$iface/gb6addr`
echo $ipaddr > /sys/kernel/mpipe/devices/$iface/ipaddr
echo 1 > /sys/kernel/mpipe/devices/$iface/up
else
PIPE=0
network_cfg
local_v6=`ifconfig ccinet0 | grep Global | awk '{print $3}' | awk -F "/" '{print $1}'`
echo "464xlat:ver=$psd_ver,cid=$2,local.v4=$ipaddr,remote.v6=$remote,pipe=$PIPE" > /dev/kmsg
fi
echo add nat46 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
echo config nat46 local.v4 $ipaddr/32 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
echo config nat46 local.v6 $local_v6/96 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
echo config nat46 local.style RFC6052 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
echo config nat46 remote.v6 $remote | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control
echo config nat46 remote.style RFC6052 | tee /sys/kernel/debug/tel/psd/$psd_ver/nat46_control