Wi-Fi direct
WiFi direct is a wireless standard that allows devices to connect with each other without requiring a wireless access point. Wi-Fi Direct negotiates the link with a Wi-Fi Protected Setup (WPS) system that assigns each device a limited wireless access point .
Establishing a peer-to-peer (P2P) link has the following phases:
- P2P discovery, which allows to search for P2P devices in the vicinity
- P2P group formation, a P2P group is formed with the identification of one of the devices as group owner. A device can either become group owner (GO) autonomously if configured to do so or it can be negotiated between devices with the exchange of GO intents.
- P2P provisioning, which authenticates the link by using either Push Button Configuration (PBC) or PIN authentication.
- P2P connection, when the connection between a Group Owner (GO) and a Group Client (GC) is actually established.
The QCA6564 driver on load creates a p2p0 interface that is used by the wpa supplicant for P2P group formation. Once a group is formed, virtual p2p-p2p0-N interfaces are created, where N is an index starting at 0. These virtual interfaces are then used for provisioning.
- Group additions, find and connect operations happen on the p2p0 interface
- Provisioning occurs on the virtual p2p-p2p0-N interfaces
- This configuration requires MAC addresses to be different and unique. Configure the virtual interfaces before attempting to connect more than one device.
By default, Digi Embedded Yocto configures the WiFi Direct functionality by adding a p2p0 interface in /etc/network/interfaces. The interface is not automatically brought up.
The following instructions show how to configure the device to use Wi-Fi Direct.
1. Delete the wlan1 interface to make sure we can assign a virtual MAC address to the interface p2p-p2p0-0 that will be created new. To delete the interface wlan1, use the following command.
# iw dev wlan1 del
2. Bring up the p2p0 interface.
# ifup p2p0
The following examples will use two ConnectCore 6UL devices to establish P2P connections. For more information about the wpa-supplicant P2P specific commands, see the wpa_supplicant and Wi-Fi P2P readme.
Autonomous GO creation
Create Autonomous Group Owner (GO) and join using PBC method
Peer (GO) ---- PBC --- Peer (GC)
Steps |
Peer CC6UL1 |
Peer CC6UL2 |
---|---|---|
1 |
wpa_cli -ip2p0 |
wpa_cli -ip2p0 |
2 |
p2p_group_add |
|
3 |
|
p2p_find |
4 |
|
p2p_connect <CC6UL1_go_mac_addr> pbc join |
5 |
Ctrl-c to exit |
Ctrl-c to exit |
6 |
wpa_cli -i p2p-p2p0-0 wps_pbc |
|
7 |
ifconfig p2p-p2p0-0 <CC6UL1_ip_addr> |
ifconfig p2p-p2p0-0 <CC6UL2_ip_addr> |
8 |
ping <CC6UL2_ip_addr> |
ping <CC6UL1_ip_addr> |
Create Autonomous GO and join using PIN from GO
Peer (GO) ---- PIN --- Peer (GC)
Steps |
Peer CC6UL1 |
Peer CC6UL2 |
---|---|---|
1 |
wpa_cli -ip2p0 |
wpa_cli -ip2p0 |
2 |
p2p_group_add |
|
3 |
|
p2p_find |
4 |
Ctrl-c to exit |
|
5 |
wpa_cli -ip2p-p2p0-0 wps_pin any (shows <pin>) |
|
6 |
|
p2p_connect <cc6ul_go_mac_addr> <pin> join |
7 |
|
Ctrl-c to exit |
8 |
ifconfig p2p-p2p0-0 <CC6UL1_ip_addr> |
ifconfig p2p-p2p0-0 <CC6UL2_ip_addr> |
9 |
ping <CC6UL2_ip_addr> |
ping <CC6UL1_ip_addr> |
Create Autonomous GO and join using PIN from GC
Peer (GO) ---- PIN --- Peer (GC)
Steps |
Peer CC6UL1 |
Peer CC6UL2 |
---|---|---|
1 |
wpa_cli -ip2p0 |
wpa_cli -ip2p0 |
2 |
p2p_group_add |
|
3 |
|
p2p_find |
4 |
|
p2p_connect <cc6ul_go_mac_addr> pin join (shows <pin>) |
5 |
Ctrl-c to exit |
Ctrl-c to exit |
6 |
wpa_cli -ip2p-p2p0-0 wps_pin any <pin> |
|
7 |
ifconfig p2p-p2p0-0 <CC6UL1_ip_addr> |
ifconfig p2p-p2p0-0 <CC6UL2_ip_addr> |
8 |
ping <CC6UL2_ip_addr> |
ping <CC6UL1_ip_addr> |
Create Autonomous GO and invite GC using PBC
Peer (GO) ---- PBC --- Peer (GC)
Steps |
Peer CC6UL1 |
Peer CC6UL2 |
---|---|---|
1 |
wpa_cli -ip2p0 |
wpa_cli -ip2p0 |
2 |
p2p_group_add |
|
3 |
|
p2p_find |
4 |
p2p_invite group=p2p-p2p0-0 peer=<CC6UL2_mac_addr> |
|
5 |
|
p2p_connect <CC6UL1_go_mac_addr> pbc join |
6 |
Ctrl-c to exit |
Ctrl-c to exit |
7 |
wpa_cli -i p2p-p2p0-0 wps_pbc |
|
8 |
ifconfig p2p-p2p0-0 <CC6UL1_ip_addr> |
ifconfig p2p-p2p0-0 <CC6UL2_ip_addr> |
9 |
ping <CC6UL2_ip_addr> |
ping <CC6UL1_ip_addr> |
Note For any of these methods, if you want to use the 5GHz frequency, issue p2p_group_add freq=5180 in step two.
Negotiated GO
Negotiate GO and join using PIN
Peer (GO | GC) ---- PIN --- Peer (GO | GC)
Steps |
Peer CC6UL1 |
Peer CC6UL2 |
---|---|---|
1 |
wpa_cli -ip2p0 |
wpa_cli -ip2p0 |
2 |
p2p_find |
|
3 |
|
p2p_find |
4 |
p2p_connect <CC6UL2_go_mac_addr> pin go_intent=1 |
|
5 |
|
p2p_connect <CC6UL1_go_mac_addr> <pin> go_intent=15 |
6 |
Ctrl-c to exit |
Ctrl-c to exit |
7 |
ifconfig p2p-p2p0-0 <CC6UL1_ip_addr> |
ifconfig p2p-p2p0-0 <CC6UL2_ip_addr> |
8 |
ping <CC6UL2_ip_addr> |
ping <CC6UL1_ip_addr> |
Negotiate GO and join using PBC
Peer (GO | GC) ---- PBC --- Peer (GO | GC)
Steps |
Peer CC6UL1 |
Peer CC6UL2 |
---|---|---|
1 |
wpa_cli -ip2p0 |
wpa_cli -ip2p0 |
2 |
p2p_find |
|
3 |
|
p2p_find |
4 |
p2p_connect <CC6UL2_go_mac_addr> pbc go_intent=1 |
|
5 |
|
p2p_connect <CC6UL1_go_mac_addr> pbc go_intent=14 |
6 |
Ctrl-c to exit |
Ctrl-c to exit |
7 |
ifconfig p2p-p2p0-0 <CC6UL1_ip_addr> |
ifconfig p2p-p2p0-0 <CC6UL2_ip_addr> |
8 |
ping <CC6UL2_ip_addr> |
ping <CC6UL1_ip_addr> |