P2P: wpa_cli action calls for P2P group started/removed events
authorJouni Malinen <jouni.malinen@atheros.com>
Sun, 18 Jul 2010 21:30:26 +0000 (14:30 -0700)
committerJouni Malinen <j@w1.fi>
Thu, 9 Sep 2010 14:17:18 +0000 (07:17 -0700)
wpa_supplicant/examples/p2p-action.sh [new file with mode: 0755]
wpa_supplicant/wpa_cli.c

diff --git a/wpa_supplicant/examples/p2p-action.sh b/wpa_supplicant/examples/p2p-action.sh
new file mode 100755 (executable)
index 0000000..ee645cb
--- /dev/null
@@ -0,0 +1,56 @@
+#!/bin/sh
+
+IFNAME=$1
+CMD=$2
+
+kill_daemon() {
+    NAME=$1
+    PF=$2
+
+    if [ ! -r $PF ]; then
+       return
+    fi
+
+    PID=`cat $PF`
+    if [ $PID -gt 0 ]; then
+       if ps $PID | grep -q $NAME; then
+           kill $PID
+       fi
+    fi
+    rm $PF
+}
+
+if [ "$CMD" = "P2P-GROUP-STARTED" ]; then
+    GIFNAME=$3
+    if [ "$4" = "GO" ]; then
+       kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
+       rm /var/run/dhclient.leases-$GIFNAME
+       kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
+       ifconfig $GIFNAME 192.168.42.1 up
+       dnsmasq -x /var/run/dnsmasq.pid-$GIFNAME \
+           -i $GIFNAME \
+           -F192.168.42.11,192.168.42.99
+    fi
+    if [ "$4" = "client" ]; then
+       kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
+       rm /var/run/dhclient.leases-$GIFNAME
+       kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
+       dhclient -pf /var/run/dhclient-$GIFNAME.pid \
+           -lf /var/run/dhclient.leases-$GIFNAME \
+           -nw \
+           $GIFNAME
+    fi
+fi
+
+if [ "$CMD" = "P2P-GROUP-REMOVED" ]; then
+    GIFNAME=$3
+    if [ "$4" = "GO" ]; then
+       kill_daemon dnsmasq /var/run/dnsmasq.pid-$GIFNAME
+       ifconfig $GIFNAME 0.0.0.0
+    fi
+    if [ "$4" = "client" ]; then
+       kill_daemon dhclient /var/run/dhclient-$GIFNAME.pid
+       rm /var/run/dhclient.leases-$GIFNAME
+       ifconfig $GIFNAME 0.0.0.0
+    fi
+fi
index 0d5d9b9..d062fab 100644 (file)
@@ -2544,6 +2544,10 @@ static void wpa_cli_action_process(const char *msg)
                        wpa_cli_connected = 0;
                        wpa_cli_exec(action_file, ctrl_ifname, "DISCONNECTED");
                }
+       } else if (str_match(pos, P2P_EVENT_GROUP_STARTED)) {
+               wpa_cli_exec(action_file, ctrl_ifname, pos);
+       } else if (str_match(pos, P2P_EVENT_GROUP_REMOVED)) {
+               wpa_cli_exec(action_file, ctrl_ifname, pos);
        } else if (str_match(pos, WPA_EVENT_TERMINATING)) {
                printf("wpa_supplicant is terminating - stop monitoring\n");
                wpa_cli_quit = 1;