xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/rockchip_wlan/ssv6xxx/script/p2p-action.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1#!/bin/sh
2
3IFNAME=$1
4CMD=$2
5
6kill_daemon() {
7    NAME=$1
8    PF=$2
9
10    if [ ! -r $PF ]; then
11	return
12    fi
13
14    PID=`cat $PF`
15    if [ $PID -gt 0 ]; then
16	if ps $PID | grep -q $NAME; then
17	    kill $PID
18	fi
19    fi
20    rm $PF
21}
22
23
24echo "$1 $2 $3 $4"
25if [ "$CMD" = "P2P-GROUP-STARTED" ]; then
26    GIFNAME=$3
27    echo "P2P-GROUP-STARTED $3 $4"
28    if [ "$4" = "GO" ]; then
29	kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
30	rm /var/run/dhclient.leases-$GIFNAME
31	kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
32	ifconfig $GIFNAME 192.168.42.1 up
33	if ! dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
34	    -i $GIFNAME \
35	    -F192.168.42.11,192.168.42.99; then
36	    # another dnsmasq instance may be running and blocking us; try to
37	    # start with -z to avoid that
38	    dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
39		-i $GIFNAME \
40		-F192.168.42.11,192.168.42.99 --listen-address 192.168.42.1 -z -p 0
41	fi
42    fi
43    if [ "$4" = "client" ]; then
44	kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
45	rm /var/run/dhclient.leases-$GIFNAME
46	kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
47	ipaddr=`echo "$*" | sed 's/.* ip_addr=\([^ ]*\).*/\1/'`
48	ipmask=`echo "$*" | sed 's/.* ip_mask=\([^ ]*\).*/\1/'`
49	goipaddr=`echo "$*" | sed 's/.* go_ip_addr=\([^ ]*\).*/\1/'`
50	if echo "$ipaddr$ipmask$goipaddr" | grep -q ' '; then
51	    ipaddr=""
52	    ipmask=""
53	    goipaddr=""
54	fi
55	if [ -n "$ipaddr" ]; then
56	    sudo ifconfig $GIFNAME "$ipaddr" netmask "$ipmask"
57	    sudo ip ro re default via "$goipaddr"
58	    exit 0
59	fi
60	dhclient -pf /var/run/dhclient-$GIFNAME.pid \
61	    -lf /var/run/dhclient.leases-$GIFNAME \
62	    -nw \
63	    $GIFNAME
64    fi
65fi
66#if [ "$CMD" = "CONNECTED" ]; then
67
68#   echo connect $IFNAME, dhclient for it > /dev/console
69
70#   dhclient $IFNAME
71
72#fi
73
74#if [ "$CMD" = "DISCONNECTED" ]; then
75
76#   echo disconnect $IFNAME, kill dhclient for it > /dev/console
77
78#   killall dhclient
79
80#fi
81
82if [ "$CMD" = "P2P-GROUP-REMOVED" ]; then
83    GIFNAME=$3
84    if [ "$4" = "GO" ]; then
85	kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
86	ifconfig $GIFNAME 0.0.0.0
87    fi
88    if [ "$4" = "client" ]; then
89	kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
90	rm /var/run/dhclient.leases-$GIFNAME
91	ifconfig $GIFNAME 0.0.0.0
92    fi
93fi
94
95if [ "$CMD" = "P2P-CROSS-CONNECT-ENABLE" ]; then
96    GIFNAME=$3
97    UPLINK=$4
98    echo "p2p-corss-connect-enable ifname=$GIFNAME upLink=$UPLINK"
99    # enable NAT/masquarade $GIFNAME -> $UPLINK
100    iptables -P FORWARD DROP
101    iptables -t nat -A POSTROUTING -o $UPLINK -j MASQUERADE
102    iptables -A FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT
103    iptables -A FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT
104    sysctl net.ipv4.ip_forward=1
105fi
106
107if [ "$CMD" = "P2P-CROSS-CONNECT-DISABLE" ]; then
108    GIFNAME=$3
109    UPLINK=$4
110    # disable NAT/masquarade $GIFNAME -> $UPLINK
111    sysctl net.ipv4.ip_forward=0
112    iptables -t nat -D POSTROUTING -o $UPLINK -j MASQUERADE
113    iptables -D FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT
114    iptables -D FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT
115fi
116