xref: /freebsd/contrib/wpa/wpa_supplicant/examples/p2p-action.sh (revision c1d255d3ffdbe447de3ab875bf4e7d7accc5bfc5)
1f05cddf9SRui Paulo#!/bin/sh
2f05cddf9SRui Paulo
3f05cddf9SRui PauloIFNAME=$1
4f05cddf9SRui PauloCMD=$2
5f05cddf9SRui Paulo
6f05cddf9SRui Paulokill_daemon() {
7f05cddf9SRui Paulo    NAME=$1
8f05cddf9SRui Paulo    PF=$2
9f05cddf9SRui Paulo
10f05cddf9SRui Paulo    if [ ! -r $PF ]; then
11f05cddf9SRui Paulo	return
12f05cddf9SRui Paulo    fi
13f05cddf9SRui Paulo
14f05cddf9SRui Paulo    PID=`cat $PF`
15f05cddf9SRui Paulo    if [ $PID -gt 0 ]; then
16f05cddf9SRui Paulo	if ps $PID | grep -q $NAME; then
17f05cddf9SRui Paulo	    kill $PID
18f05cddf9SRui Paulo	fi
19f05cddf9SRui Paulo    fi
20f05cddf9SRui Paulo    rm $PF
21f05cddf9SRui Paulo}
22f05cddf9SRui Paulo
23f05cddf9SRui Pauloif [ "$CMD" = "P2P-GROUP-STARTED" ]; then
24f05cddf9SRui Paulo    GIFNAME=$3
25f05cddf9SRui Paulo    if [ "$4" = "GO" ]; then
26f05cddf9SRui Paulo	kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
27f05cddf9SRui Paulo	rm /var/run/dhclient.leases-$GIFNAME
28f05cddf9SRui Paulo	kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
29f05cddf9SRui Paulo	ifconfig $GIFNAME 192.168.42.1 up
30f05cddf9SRui Paulo	if ! dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
31f05cddf9SRui Paulo	    -i $GIFNAME \
32f05cddf9SRui Paulo	    -F192.168.42.11,192.168.42.99; then
33f05cddf9SRui Paulo	    # another dnsmasq instance may be running and blocking us; try to
34f05cddf9SRui Paulo	    # start with -z to avoid that
35f05cddf9SRui Paulo	    dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
36f05cddf9SRui Paulo		-i $GIFNAME \
375b9c547cSRui Paulo		-F192.168.42.11,192.168.42.99 --listen-address 192.168.42.1 -z -p 0
38f05cddf9SRui Paulo	fi
39f05cddf9SRui Paulo    fi
40f05cddf9SRui Paulo    if [ "$4" = "client" ]; then
41f05cddf9SRui Paulo	kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
42f05cddf9SRui Paulo	rm /var/run/dhclient.leases-$GIFNAME
43f05cddf9SRui Paulo	kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
445b9c547cSRui Paulo	ipaddr=`echo "$*" | sed 's/.* ip_addr=\([^ ]*\).*/\1/'`
455b9c547cSRui Paulo	ipmask=`echo "$*" | sed 's/.* ip_mask=\([^ ]*\).*/\1/'`
465b9c547cSRui Paulo	goipaddr=`echo "$*" | sed 's/.* go_ip_addr=\([^ ]*\).*/\1/'`
475b9c547cSRui Paulo	if echo "$ipaddr$ipmask$goipaddr" | grep -q ' '; then
485b9c547cSRui Paulo	    ipaddr=""
495b9c547cSRui Paulo	    ipmask=""
505b9c547cSRui Paulo	    goipaddr=""
515b9c547cSRui Paulo	fi
525b9c547cSRui Paulo	if [ -n "$ipaddr" ]; then
535b9c547cSRui Paulo	    sudo ifconfig $GIFNAME "$ipaddr" netmask "$ipmask"
545b9c547cSRui Paulo	    sudo ip ro re default via "$goipaddr"
555b9c547cSRui Paulo	    exit 0
565b9c547cSRui Paulo	fi
57f05cddf9SRui Paulo	dhclient -pf /var/run/dhclient-$GIFNAME.pid \
58f05cddf9SRui Paulo	    -lf /var/run/dhclient.leases-$GIFNAME \
59f05cddf9SRui Paulo	    -nw \
60f05cddf9SRui Paulo	    $GIFNAME
61f05cddf9SRui Paulo    fi
62f05cddf9SRui Paulofi
63f05cddf9SRui Paulo
64f05cddf9SRui Pauloif [ "$CMD" = "P2P-GROUP-REMOVED" ]; then
65f05cddf9SRui Paulo    GIFNAME=$3
66f05cddf9SRui Paulo    if [ "$4" = "GO" ]; then
67f05cddf9SRui Paulo	kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
68f05cddf9SRui Paulo	ifconfig $GIFNAME 0.0.0.0
69f05cddf9SRui Paulo    fi
70f05cddf9SRui Paulo    if [ "$4" = "client" ]; then
71f05cddf9SRui Paulo	kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
72f05cddf9SRui Paulo	rm /var/run/dhclient.leases-$GIFNAME
73f05cddf9SRui Paulo	ifconfig $GIFNAME 0.0.0.0
74f05cddf9SRui Paulo    fi
75f05cddf9SRui Paulofi
76f05cddf9SRui Paulo
77f05cddf9SRui Pauloif [ "$CMD" = "P2P-CROSS-CONNECT-ENABLE" ]; then
78f05cddf9SRui Paulo    GIFNAME=$3
79f05cddf9SRui Paulo    UPLINK=$4
80*c1d255d3SCy Schubert    # enable NAT/masquerade $GIFNAME -> $UPLINK
81f05cddf9SRui Paulo    iptables -P FORWARD DROP
82f05cddf9SRui Paulo    iptables -t nat -A POSTROUTING -o $UPLINK -j MASQUERADE
83f05cddf9SRui Paulo    iptables -A FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT
84f05cddf9SRui Paulo    iptables -A FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT
85f05cddf9SRui Paulo    sysctl net.ipv4.ip_forward=1
86f05cddf9SRui Paulofi
87f05cddf9SRui Paulo
88f05cddf9SRui Pauloif [ "$CMD" = "P2P-CROSS-CONNECT-DISABLE" ]; then
89f05cddf9SRui Paulo    GIFNAME=$3
90f05cddf9SRui Paulo    UPLINK=$4
91*c1d255d3SCy Schubert    # disable NAT/masquerade $GIFNAME -> $UPLINK
92f05cddf9SRui Paulo    sysctl net.ipv4.ip_forward=0
93f05cddf9SRui Paulo    iptables -t nat -D POSTROUTING -o $UPLINK -j MASQUERADE
94f05cddf9SRui Paulo    iptables -D FORWARD -i $UPLINK -o $GIFNAME -m state --state RELATED,ESTABLISHED -j ACCEPT
95f05cddf9SRui Paulo    iptables -D FORWARD -i $GIFNAME -o $UPLINK -j ACCEPT
96f05cddf9SRui Paulofi
97