Wi-Fi direct
Wi-Fi 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.
Note Remember:
- Group additions, find and connect operations happen on the p2p0 interface
- Provisioning happens on the virtual p2p-p2p0-N interfaces
By default the Wi-Fi Direct functionality in the ConnectCore 6UL is disabled. To enable it, configure your Digi Embedded Yocto project by adding the following lines to your conf/local.conf file:
WLAN_P2P_INTERFACE = "p2p0" WLAN_P2P_AUTO = "1"
The above will configure the /etc/network/interfaces file with a p2p0 interface and will start a wpa-supplicant instance with a default /etc/wpa_supplicant_p2p.conf configuration file.
The following examples will use two ConnectCore 6UL devices to establish P2P connections. For more information about the wpa-supplicant P2P specific commands refer to this document.
Autonomous GO creation
Create Autonomous Group Owner (GO) and join using PBC method
Peer (GO) ---- PBC --- Peer (GC)
Steps |
Peer 1 |
Peer 2 |
---|---|---|
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 1 |
Peer 2 |
---|---|---|
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 1 |
Peer 2 |
---|---|---|
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 1 |
Peer 2 |
---|---|---|
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> |
Negotiated GO
Negotiate GO and join using PIN
Peer (GO | GC) ---- PIN --- Peer (GO | GC)
Steps |
Peer 1 |
Peer 2 |
---|---|---|
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 1 |
Peer 2 |
---|---|---|
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> |