Updated through tag hostap_2_5 from git://w1.fi/hostap.git
[mech_eap.git] / libeap / wpa_supplicant / examples / p2p-action.sh
1 #!/bin/sh
2
3 IFNAME=$1
4 CMD=$2
5
6 kill_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 if [ "$CMD" = "P2P-GROUP-STARTED" ]; then
24     GIFNAME=$3
25     if [ "$4" = "GO" ]; then
26         kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
27         rm /var/run/dhclient.leases-$GIFNAME
28         kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
29         ifconfig $GIFNAME 192.168.42.1 up
30         if ! dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
31             -i $GIFNAME \
32             -F192.168.42.11,192.168.42.99; then
33             # another dnsmasq instance may be running and blocking us; try to
34             # start with -z to avoid that
35             dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
36                 -i $GIFNAME \
37                 -F192.168.42.11,192.168.42.99 --listen-address 192.168.42.1 -z -p 0
38         fi
39     fi
40     if [ "$4" = "client" ]; then
41         kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
42         rm /var/run/dhclient.leases-$GIFNAME
43         kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
44         ipaddr=`echo "$*" | sed 's/.* ip_addr=\([^ ]*\).*/\1/'`
45         ipmask=`echo "$*" | sed 's/.* ip_mask=\([^ ]*\).*/\1/'`
46         goipaddr=`echo "$*" | sed 's/.* go_ip_addr=\([^ ]*\).*/\1/'`
47         if echo "$ipaddr$ipmask$goipaddr" | grep -q ' '; then
48             ipaddr=""
49             ipmask=""
50             goipaddr=""
51         fi
52         if [ -n "$ipaddr" ]; then
53             sudo ifconfig $GIFNAME "$ipaddr" netmask "$ipmask"
54             sudo ip ro re default via "$goipaddr"
55             exit 0
56         fi
57         dhclient -pf /var/run/dhclient-$GIFNAME.pid \
58             -lf /var/run/dhclient.leases-$GIFNAME \
59             -nw \
60             $GIFNAME
61     fi
62 fi
63
64 if [ "$CMD" = "P2P-GROUP-REMOVED" ]; then
65     GIFNAME=$3
66     if [ "$4" = "GO" ]; then
67         kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
68         ifconfig $GIFNAME 0.0.0.0
69     fi
70     if [ "$4" = "client" ]; then
71         kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
72         rm /var/run/dhclient.leases-$GIFNAME
73         ifconfig $GIFNAME 0.0.0.0
74     fi
75 fi
76
77 if [ "$CMD" = "P2P-CROSS-CONNECT-ENABLE" ]; then
78     GIFNAME=$3
79     UPLINK=$4
80     # enable NAT/masquarade $GIFNAME -> $UPLINK
81     iptables -P FORWARD DROP
82     iptables -t nat -A POSTROUTING -o $UPLINK -j MASQUERADE
83     iptables -A FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT
84     iptables -A FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT
85     sysctl net.ipv4.ip_forward=1
86 fi
87
88 if [ "$CMD" = "P2P-CROSS-CONNECT-DISABLE" ]; then
89     GIFNAME=$3
90     UPLINK=$4
91     # disable NAT/masquarade $GIFNAME -> $UPLINK
92     sysctl net.ipv4.ip_forward=0
93     iptables -t nat -D POSTROUTING -o $UPLINK -j MASQUERADE
94     iptables -D FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT
95     iptables -D FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT
96 fi