Concurrent mode shares the Wi-Fi interface between multiple functionalities — for example station, access point, and Wi-Fi Direct — using different virtual interfaces for each. By default, Digi Embedded Yocto configures the Wi-Fi interface in client infrastructure mode. Refer to Access point mode or Wi-Fi Direct to enable that interface.

Maximum performance is achieved on the physical wlan0 when the Wi-Fi interface is not shared between multiple functionalities. Digi recommends you always use the physical wlan0 interface and only configure virtual interfaces when using concurrent modes.
Digi programs one MAC address for the Wi-Fi interface during manufacturing of the SOM. This is the MAC address used for the wlan0 interface. The Wi-Fi chip supports up to three other virtual MAC addresses that you must program before use (otherwise they have default values). See Wireless virtual MAC addresses for instructions.

Inspecting valid combinations

To determine the supported modes and combinations (STA, AP, P2P, AP+P2P, etc), run the iw phy command.

# iw phy
.....
        valid interface combinations:
                 * #{ managed, AP, monitor, P2P-client, P2P-GO } <= 4,
                   total <= 4, #channels <= 1
                 * #{ managed } <= 2, #{ P2P-device } <= 1, #{ P2P-client, P2P-GO } <= 1,
                   total <= 3, #channels <= 2

In this generic example:

  • Combination 1 can work simultaneously with up to four interfaces as STA, AP or P2P; additionally, those interfaces are restricted to work in the same channel.

  • Combination 2 can work simultaneously with up to two STA interfaces plus one P2P interface, and they can work in different channels.

Multi client station

You can configure the ConnectCore 8M Nano as two simultaneous client stations in infrastructure mode: one Wi-Fi interface connected to an access point and another Wi-Fi interface connected to a different access point.

NetworkManager cannot manage access points, so DEY configures it not to manage wlan1 by default. Create the virtual interface wlan1 with the following command:

# iw dev wlan0 interface add wlan1 type managed

Create a new configuration file /etc/wpa_supplicant_wlan1.conf for the second Wi-Fi interface. To create the file, use the following command and add the necessary information.

# vi /etc/wpa_supplicant_wlan1.conf
/etc/wpa_supplicant_wlan1.conf
ctrl_interface=/var/run/wpa_supplicant
update_config=1

network={
        ssid="SSID"
        scan_ssid=1
        key_mgmt=WPA-PSK
        psk="PASSWORD"
}

Now configure the interface to load the configuration file. To do so, modify the /etc/network/interfaces with the information of the wlan1 interface.

# vi /etc/network/interfaces
/etc/network/interfaces
auto wlan1
iface wlan1 inet static
        address 192.168.46.30
        netmask 255.255.255.0
        wpa-driver nl80211
        wpa-conf /etc/wpa_supplicant_wlan1.conf

Now bring the interface up to load the configuration. Reboot the system to load the new configuration.

# ifup wlan1

This causes the second Wi-Fi interface to connect to the AP specified in the wpa_suplicant_wlan1 file.

Multi access point

You can configure the ConnectCore 8M Nano as two simultaneous access points working on the same band. To do this, you must disable the default STA behavior of wlan0. Bring the interface down with:

# nmcli con down wlan0

Since NetworkManager cannot manage access points, you must configure it not to manage wlan0, which will now work as another access point.

Add wlan0 to the list of unmanaged-devices in the configuration file /etc/NetworkManager/NetworkManager.conf. After the change, the file will look like this:

[main]
plugins=ifupdown,keyfile
no-auto-default=type:ethernet

[ifupdown]
managed=false

[keyfile]
unmanaged-devices=interface-name:p2p*;interface-name:wlan1;interface-name:wlan0

Now configure the /etc/network/interfaces file as follows:

  • Configure wlan0 to work as access point, with a static IP.

  • Assign a second post-up service to launch the hostapd instance. Make sure to pass the correct interface name to the service; in this case, it should be hostapd@wlan0.service.

  • Assign one pre-down service to stop the hostapd instance.

/etc/network/interfaces
auto wlan0
iface wlan0 inet static
address 192.168.43.30
netmask 255.255.255.0
post-up systemctl start hostapd@wlan0.service
pre-down systemctl stop hostapd@wlan0.service

auto wlan1
iface wlan1 inet static
address 192.168.46.30
netmask 255.255.255.0
post-up systemctl start hostapd@wlan1.service
pre-down systemctl stop hostapd@wlan1.service

Create a /etc/hostapd_wlan0.conf file with your desired SoftAP configuration for wlan0. For example:

ctrl_interface=/var/run/hostapd
ctrl_interface_group=0
interface=wlan0
driver=nl80211

# WPA2-AES encryption
ssid=My_AP_wlan0
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP
wpa_passphrase=MyPassword

# IEEE 802.11ac
hw_mode=a
channel=36
ieee80211ac=1
ieee80211n=1

Bring up the wlan0 and wlan1 interfaces:

# ifup wlan0
# ifup wlan1

Wi-Fi Direct concurrent modes

The ConnectCore 8M Nano supports simultaneous group owner and group client configuration.

Add the following configuration change to the /etc/wpa_supplicant_p2p.conf file on both devices:

p2p_no_group_iface=0
p2p_group_idle=0

This configures the supplicant to use a different interface, `p2p`0, for P2P group operations. It also maintains an established group, even if there are no other members.

You need all virtual MACs for the P2P setup, so remove the wlan0 interface with:

# nmcli con down wlan0
# iw dev wlan0 del

Add the wlan0 interface to the list of unmanaged devices that is defined in the NetworkManager configuration at /etc/NetworkManager/NetworkManager.conf

unmanaged-devices=interface-name:p2p*;interface-name:wlan1;interface-name:wlan0

Restart the NetworkManager service:

# systemctl restart NetworkManager.service

Bring up the p2p0 interface:

# ifup p2p0

Concurrent GO and GC using PBC

Peer (GO & GC) — PBC — Peer (GO & GC)
Steps Peer CC8MNANO1 Peer CC8MNANO2 Notes

0

wpa_cli -ip2p0
wpa_cli -ip2p0

1

p2p_group_add

2

p2p_find

3

Ctrl+C to exit

4

wpa_cli -i p2p-p2p0-0 wps_pbc

5

p2p_connect <CC8MNANO1_go_p2p-p2p0-0_mac_addr> pbc join

This uses the MAC of the first virtual interface

6

wpa_cli -ip2p0

7

p2p_group_add

8

p2p_find

Ctrl+C to exit

9

wpa_cli -i p2p-p2p0-1 wps_pbc

This is in the second virtual interface

10

p2p_connect <CC8MNANO2_go_p2p-p2p0-1_mac_addr> pbc join

This uses the MAC of the second virtual interface

11

Ctrl+C to exit

Ctrl+C to exit

12

ifconfig p2p-p2p0-0 <CC8MNANO1_ip_addr>
ifconfig p2p-p2p0-0 <CC8MNANO2_ip_addr>

13

ping <CC8MNANO2_ip_addr>
ping <CC8MNANO1_ip_addr>

14

ifconfig p2p-p2p0-1 <CC8MNANO1_ip1_addr>
ifconfig p2p-p2p0-1 <CC8MNANO2_ip1_addr>

15

ping <CC8MNANO2_ip1_addr>
ping <CC8MNANO1_ip1_addr>

Concurrent GC

Peer (GC1 & GC2) --- PBC -- Peer1 (GO)
                |--- PBC -- Peer2 (GO)
Steps Peer CC8MNANO1 (GO) Peer CC8MNANO2 (GO) Peer CC8MNANO2 (GC1 & GC2)

1

wpa_cli -ip2p0
wpa_cli -ip2p0
wpa_cli -ip2p0

2

p2p_group_add

3

p2p_find

4

Ctrl+C to exit

5

wpa_cli -i p2p-p2p0-0 wps_pbc

6

p2p_connect <CC8MNANO1_go_mac_addr> pbc join

7

p2p_group_add

8

Ctrl+C to exit

p2p_find

9

10

wpa_cli -i p2p-p2p0-0 wps_pbc

11

p2p_connect <CC8MNANO2_go_mac_addr> pbc join

12

Ctrl+C to exit

13

ifconfig p2p-p2p0-0 <CC8MNANO1_ip_addr>
ifconfig p2p-p2p0-0 <CC8MNANO2_ip_addr>
ifconfig p2p-p2p0-0 <CC8MNANO2_ip1_addr>

14

ifconfig p2p-p2p0-1 <CC8MNANO2_ip2_addr>

15

ping <CC8MNANO2_ip1_addr>

16

ping <CC8MNANO2_ip2_addr>

17

ping <CC8MNANO1_ip_addr>

18

ping <CC8MNANO1_ip_addr>

Concurrent SoftAP (2.4GHz) and GO using PBC

The ConnectCore 8M Nano can be configured simultaneously as access point in band 2.4GHz and autonomous group owner in a peer-to-peer connection.

To use this concurrent mode, append the following lines to the file /lib/firmware/wlan/qcom_cfg.ini before the final END tag:

/lib/firmware/wlan/qcom_cfg.ini
# For SAP + P2P Auto GO
gEnableCustomConcRule1=1 #(Force SSC for SAP + STA)
gEnableStaConnectionIn5Ghz=0 #(STA connection not allowed on 5 Ghz)
gMaxConcurrentActiveSessions=3 #(it should be set to 3 [sta+AP+P2Pgo])
gWlanMccToSccSwitchMode=2 #(force full switch if AP is in same band)
gEnableDFSChnlScan=0 #(it will disable scanning on DFS channel)
gSapSccChanAvoidance=0 #(needs to be set to 0 to void channel avoidance)
Append the lines only for this specific case. You will lose other functionalities like station mode for 5GHz band.

Reboot the device so that the Wi-Fi driver is reloaded with the new configuration:

# reboot

First configure the SoftAP and then the P2P connection.

Configure SoftAP

Set up wlan0 as a static SoftAP as explained in Access point mode. You must use the 802.11b/g/n band for this mode to work.

You must use wlan0 interface as SoftAP. This concurrent mode (P2P+SoftAP) does not work with the SoftAP on wlan1.

Configure the P2P connection

You will need an auxiliary device to act as peer. In this example, it is another ConnectCore 8M Nano.

  1. Delete wlan1 interface.

  2. Bring up the `p2p`0 interface.

  3. Follow the steps from any table in the Autonomous GO creation section of Wi-Fi Direct.