Wireless¶
VAR-SOM-MX93 Overview¶
The VAR-SOM-MX93 supports the following WiFi modules:
| Module | Chipset | Features | Network Interface(s) |
|---|---|---|---|
| Sterling LWB | Cypress CYW4343W | 802.11 b/g/n | wlan0 |
| Sterling LWB5 | Cypress CYW43353 | 802.11 ac/a/b/g/n, | wlan0 |
| Murata LBEE5PL2DL | NXP IW611 | 802.11 a/ac/ax/b/g/n | wlan0, uap0, wfd0 |
| Murata LBES5PL2EL | NXP IW612 | 802.11 a/ac/ax/b/g/n, 802.15.4 | wlan0, uap0, wfd0 |
This guide demonstrates how to configure WiFi using NetworkManager. It is important to use the correct network interface for the module assembled on your VAR-SOM-MX93.
Managing WiFi using NetworkManager¶
NetworkManager is a program for providing detection and configuration for systems to automatically connect to network.
NetworkManager's functionality can be useful for both wireless and wired networks.
This guide describes how to use NetworkManager to configure wireless networks.
Enabling and disabling WiFi¶
To check if WiFi is enabled by NetworkManager run
and check the GENERAL.STATE line. If WiFi is enabled, the state is either connected or disconnected. If WiFi is disabled the state is unavailable.
To enable WiFi run
or if you need to disable it you can run
Configuring WiFi Client¶
Scanning for available WiFi APs¶
If WiFi is enabled you can get the list of available APs by running
Connecting to an open WiFi network¶
To connect to an open WiFi network run
To connect to an open hidden WiFi network run
To check connection status run
To check WiFi device status run
Connecting to a protected WiFi network¶
To connect to a protected WiFi network run
To connect to a protected hidden WiFi network run
To check connection status run
To check WiFi device status run
Managing existing connections¶
Once established, the connection is preserved across reboots unless deleted explicitly.
To show existing connections, run
To disconnect from a WiFi network, run
To reconnect to a WiFi network, run
To permanently delete a connection, run
Configuring WiFi Access Point with NetworkManager¶
NetworkManager can also be used to turn WiFi interface into Access Point.
The benefit of using NetworkManager in this scenario is the complete automation of WiFi, DHCP server and NAT configuration.
Disabling standalone dnsmasq service¶
Dnsmasq is a lightweight DNS forwarder and DHCP server.
By default dnsmasq runs as a standalone service and will conflict with dnsmasq instance launched by NetworkManager.
To prevent the conflict, disable dnsmasq service by running the following commands:
For NetworkManager to run dnsmasq as a local caching DNS server, edit/create /etc/NetworkManager/NetworkManager.conf and add the following
Creating WiFi AP¶
Use the following commands to create the initial AP setup
# nmcli con add type wifi ifname <device> mode ap con-name <name> ssid <ssid> && \
nmcli con modify <name> 802-11-wireless.band <band> && \
nmcli con modify <name> 802-11-wireless.channel <channel> && \
nmcli con modify <name> 802-11-wireless-security.key-mgmt <key-mgmt> && \
nmcli con modify <name> 802-11-wireless-security.proto <proto> && \
nmcli con modify <name> 802-11-wireless-security.group <group> && \
nmcli con modify <name> 802-11-wireless-security.pairwise <pairwise> && \
nmcli con modify <name> 802-11-wireless-security.psk <passphrase> && \
nmcli con modify <name> ipv4.method shared && \
nmcli con up <name>
For example, the following commands will create AP configuration named WIFI_AP on wlan0, with SSID MY_AP, 2.4GHz band, channel 1, WPA2-PSK security, CCMP encryption, and passphrase 11223344 for the Sterling LWB/LWB5.
# nmcli con add type wifi ifname wlan0 mode ap con-name WIFI_AP ssid MY_AP && \
nmcli con modify WIFI_AP 802-11-wireless.band bg && \
nmcli con modify WIFI_AP 802-11-wireless.channel 1 && \
nmcli con modify WIFI_AP 802-11-wireless-security.key-mgmt wpa-psk && \
nmcli con modify WIFI_AP 802-11-wireless-security.proto rsn && \
nmcli con modify WIFI_AP 802-11-wireless-security.group ccmp && \
nmcli con modify WIFI_AP 802-11-wireless-security.pairwise ccmp && \
nmcli con modify WIFI_AP 802-11-wireless-security.psk 11223344 && \
nmcli con modify WIFI_AP ipv4.method shared && \
nmcli con up WIFI_AP
For example, the following commands will create AP configuration named WIFI_AP on uap0, with SSID MY_AP, 2.4GHz band, channel 1, WPA2-PSK security, CCMP encryption, and passphrase 11223344 for the Murata LBES5PL2XX.
# nmcli con add type wifi ifname uap0 mode ap con-name WIFI_AP ssid MY_AP && \
nmcli con modify WIFI_AP 802-11-wireless.band bg && \
nmcli con modify WIFI_AP 802-11-wireless.channel 1 && \
nmcli con modify WIFI_AP 802-11-wireless-security.key-mgmt wpa-psk && \
nmcli con modify WIFI_AP 802-11-wireless-security.proto rsn && \
nmcli con modify WIFI_AP 802-11-wireless-security.group ccmp && \
nmcli con modify WIFI_AP 802-11-wireless-security.pairwise ccmp && \
nmcli con modify WIFI_AP 802-11-wireless-security.psk 11223344 && \
nmcli con modify WIFI_AP ipv4.method shared && \
nmcli con up WIFI_AP
If you are planning to use the 5 GHz band and channel 36, you can partially change the above commands as follow
...
# nmcli con modify WIFI_AP 802-11-wireless.band a
# nmcli con modify WIFI_AP 802-11-wireless.channel 36
...
The complete list of nmcli configuration parameters is described in https://developer.gnome.org/NetworkManager/stable/ref-settings.html
Configuring DHCP subnet¶
By default 10.42.0.x/24 subnet is used by NetworkManager DHCP server, with 10.42.0.1 address assigned to AP itself. To modify it use the following command
For example, the following command will set DHCP subnet to 192.168.5.x/24
Editing AP configuration file¶
NetworkManager will create /etc/NetworkManager/system-connections/WIFI_AP configuration file.
In addition to executing nmcli commands one can also edit this file to modify the AP settings.
For changes in configuration file to take effect, restart NetworkManager by running
Managing existing connections¶
Once created, the AP configuration is preserved across reboots unless deleted explicitly.
To show existing connections, run
To temporarily disable AP configuration, run
To enable AP configuration, run
To permanently delete AP configuration, run
Configuring WiFi access point with hostapd¶
hostapd is a versatile tool for setting up a WiFi access point and generally offers more options and flexibility compared to NetworkManager. For instance, hostapd enables the creation of a WiFi 6 access point, which is not currently possible with NetworkManager.
While NetworkManager facilitates complete automation of WiFi, DHCP server, and NAT configuration, hostapd provides more granular control over these settings, making it a preferred choice for advanced configurations.
dnsmasq is a suitable option for providing DHCP and DNS services alongside hostapd. It's a lightweight DNS forwarder and DHCP server that can be easily integrated with hostapd.
Make sure interface (uap0) is not managed by NetworkManager¶
Before starting with hostapd, it's important that NetworkManager is not managing the access point interface (uap0). If NetworkManager is running, make sure uap0 is unmanaged:
# /etc/NetworkManager/conf.d/99-iw61x-unmanaged-devices.conf
[keyfile]
unmanaged-devices=interface-name:uap0;
Create /etc/hostapd.conf¶
The next step is to create /etc/hostapd.conf. The following table shows how to configure 802.11bgn, 802.11ac, and 802.11ax access points:
|
Wi-Fi 2.4GHz (802.11bgn)
/etc/hostapd.conf |
Wi-Fi 5 (802.11ac)
/etc/hostapd.conf |
Wi-Fi 6 (802.11ax)
/etc/hostapd.conf |
|---|---|---|
|
|
|
Note: When copying the text above, your file may contain zero width spaces at the end of each line (appearing as ^^k in nano or hex e2 80 8b in hexdump). This will cause hostapd to fail. You can fix it by running:
# sed 's/\xe2\x80\x8b//g' /etc/hostapd.conf > /etc/hostapd_cleaned.conf && mv /etc/hostapd_cleaned.conf /etc/hostapd.conf
Configure /etc/dnsmasq.conf¶
# /etc/dnsmasq.conf
interface=uap0 # Use the interface uap0 for DHCP
no-dhcp-interface=eth0 # Disable DHCP on eth0
no-dhcp-interface=wlan0 # Disable DHCP on wlan0
no-dhcp-interface=wfd0 # Disable DHCP on wfd0
# Configure ipv4 address range
dhcp-range=192.168.10.10,192.168.10.100,12h # Set the DHCP range and lease time
# Configure ipv6 address range
dhcp-range=fd00:1234::10,fd00:1234::100,12h # Set the DHCPv6 range and lease time
# Enable Router Advertisement (RA) to inform clients of the IPv6 prefix
enable-ra
Then, assign uap0 an ip and start hostapd and dnsmasq:
# ip addr add 192.168.10.1/24 dev uap0
# ip -6 addr add fd00:1234::1/64 dev uap0
# systemctl restart hostapd
# systemctl restart dnsmasq
At this point, devices can connect and dhcp an ip address using the access point on uap0.
Optionally configure NAT between uap0 and eth0:¶
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i uap0 -o eth0 -j ACCEPT
and allow ip forwarding by appending /etc/sysctl.conf:
Now, devices connecting to the access point on uap0 will have network access through eth0.
Sterling LWB/LWB5 WiFi STA/AP concurrency¶
To get the WiFi module to work in concurrent AP-STA mode on the Sterling LWB/LWB5, a virtual wireless interface is required.
This can be achieved creating a virtual uap0 interface, running
STA setup can be managed simply following the steps described in Configuring WiFi Client section.
AP setup can be managed following the steps described in Configuring WiFi Access Point section, but when creating the access point, be careful to use uap0 instead of wlan0.
Notes¶
nmcli commands create a permanent setup, that does not require to be repeated at every boot.
However, the iw command (used to create the virtual uap0 interface) does not create permanent changes: we suggest to introduce it in the variscite-wifi script (located in /etc/wifi for latest releases), when checking for the wlan0 existance, something like
if [ -d /sys/class/net/wlan0 ]; then
# create uap0 interface
iw dev wlan0 interface add uap0 type __ap
return 0
else
...
Also, in the same file, just before shutting down wlan0, you may want to delete this virtual interface, something like
Limitations¶
By HW design, Sterling-LWB/LWB5 WiFi modules provide a single channel tuner.
AP-STA operations are possible, but the local AP channel is actually the one negotiated between the local client and the remote AP.
WiFi Direct¶
Wi-Fi Direct is a standard that allows devices to connect with each other without a wireless access point or network infrastructure. It facilitates a direct, peer-to-peer connection between two devices using Wi-Fi for data transfer, media sharing, and other communication types.
Variscite SOMs with the Murata LBES5PL2xx (NXP IW61x) modules support WiFi Direct. Verify if your SOM supports WiFi Direct by checking for the wfd0 interface:
# ifconfig wfd0
wfd0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether f6:b2:ba:f8:49:59 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
The following process describes how to connect two Variscite SOMs (Device A and Device B) using WiFi Direct:
Device A Configuration:
Stop and disable NetworkManager and wpa_supplicant systemd services:
# systemctl stop NetworkManager; systemctl disable NetworkManager
# systemctl stop wpa_supplicant; systemctl stop wpa_supplicant
Create a configuration file for device A, e.g., /etc/wpa_supplicant/wfd0_A.conf, with the following content:
ctrl_interface=/var/run/wpa_supplicant # Control interface directory
driver_param=use_p2p_group_interface=1 # Enable dedicated P2P group interface
update_config=1 # Allow configuration updates
device_name=Device_A # Set device name
device_type=1-0050F204-1 # Define device type (e.g., computer)
p2p_go_intent=1 # Set group owner intent (0-15)
p2p_listen_reg_class=81 # Regulatory class for listen channel
p2p_listen_channel=11 # Listen channel number for discovery
p2p_oper_reg_class=81 # Regulatory class for operating channel
p2p_oper_channel=11 # Operating channel number as group owner
Start wpa_supplicant on device A for the wfd0 interface:
Device B Configuration:
Stop and disable NetworkManager and wpa_supplicant systemd services:
# systemctl stop NetworkManager; systemctl disable NetworkManager
# systemctl stop wpa_supplicant; systemctl stop wpa_supplicant
Create a configuration file for device B, e.g., /etc/wpa_supplicant/wfd0_B.conf, with similar content but different device name:
ctrl_interface=/var/run/wpa_supplicant # Control interface directory
driver_param=use_p2p_group_interface=1 # Enable dedicated P2P group interface
update_config=1 # Allow configuration updates
device_name=Device_B # Set device name
device_type=1-0050F204-1 # Define device type (e.g., computer)
p2p_go_intent=9 # Set group owner intent (0-15)
p2p_listen_reg_class=81 # Regulatory class for listen channel
p2p_listen_channel=11 # Listen channel number for discovery
p2p_oper_reg_class=81 # Regulatory class for operating channel
p2p_oper_channel=11 # Operating channel number as group owner
Start wpa_supplicant on device B for the wfd0 interface:
Connecting the Devices:
Find peers from device A:
From device B, do the same to find peers:
After a few moments, list the peers from device A to find the device B's P2P Device Address:
Connect to device B from device A using the P2P Device Address you found (replace XX:XX:XX:XX:XX:XX with the actual address):
Verify Connection on Device B: Run a similar p2p_connect command with PBC (Push Button Connect) on Device B, like:
Verify the Connection on Both Devices, look for wpa_state=COMPLETED in the output.:
Assign IP Addresses (use ifconfig to determine the dynamically-created P2P interface like p2p-wfd0-1 and p2p-wfd0-0:
Try pinging:
Testing WiFi throughput¶
Establish connection to WiFi network and use iperf3 tool on target and another host:
iperf3 server (on Target/Host):
iperf3 client (on Host/Target):
Configuring WiFi Regulatory Domain¶
According the mounting option of the SoM in use, the kernel loads dedicated firmware files from the folder /lib/firmware/brcm:
| mounting option | WiFi chip | firmware files |
|---|---|---|
| WB | Sterling LWB | brcmfmac43430-sdio.bin / brcmfmac43430-sdio.txt |
| WBD | Sterling LWB5 | brcmfmac4339-sdio.bin / brcmfmac4339-sdio.txt |
Each txt file contains the ccode parameter selecting the regulatory domain.
Additionally, for Sterling LWB5 only, the regrev parameter must change according the ccode (it's always zero for Sterling LWB).
By default, the BSP ships firmware configurations matching FCC Regulatory Domain, one of the most restrictive in terms of available channels.
For Sterling LWB5 and FCC you can read
The following table reports the valid options for ccode / regrev parameter.
|
regulatory
authority |
Sterling LWB | Sterling LWB5 | ||
|---|---|---|---|---|
| ccode | regrev | ccode | regrev | |
| FCC | US | 0 | US | 911 |
| ETSI | EU | 0 | EU | 116 |
| ISED | US* | 0 | CA | 938 |
| MIC | JP | 0 | JP | 101 |
| RRA | N/A | N/A | KR** | 301 |
* ISED for Sterling LWB is managed using ccode=US, it's not a typo.
** RRA is only available for Sterling LWB5 with FW 6.37.39.141 or greater.