Wifi SystemdNetworkd: Difference between revisions

From Variscite Wiki
No edit summary
No edit summary
 
(17 intermediate revisions by 6 users not shown)
Line 17: Line 17:
! Features
! Features
! Network Interface(s)
! Network Interface(s)
|-
{{#ifeq: {{#var:WIFI_STERLING_SUPPORT}} | no | |
| Sterling LWB
{{!}}-
| Cypress CYW4343W
{{!}} Sterling LWB
| 802.11 b/g/n
{{!}} Cypress CYW4343W
| wlan0
{{!}} 802.11 b/g/n
|-
{{!}} wlan0
| Sterling LWB5
{{!}}-
| Cypress CYW43353
{{!}} Sterling LWB5
| 802.11 ac/a/b/g/n,
{{!}} Cypress CYW43353
| wlan0
{{!}} 802.11 ac/a/b/g/n,
|-
{{!}} wlan0
}}
{{#ifeq: {{#var:WIFI_IW612_SUPPORT}}|yes|
{{#ifeq: {{#var:WIFI_IW612_SUPPORT}}|yes|
{{!}}-
{{!}}-
Line 83: Line 84:


<pre>
<pre>
"[DHCPv4]
[DHCPv4]
"RouteMetric=9"
RouteMetric=9
"[IPv6AcceptRA]"
[IPv6AcceptRA]
"RouteMetric=9"
RouteMetric=9
</pre>
</pre>


Line 92: Line 93:


<pre>
<pre>
"ctrl_interface=/var/run/wpa_supplicant"
ctrl_interface=/var/run/wpa_supplicant
"eapol_version=1"
eapol_version=1
"ap_scan=1"
ap_scan=1
"fast_reauth=1"
fast_reauth=1
wpa_passphrase <SSID> <password>
</pre>
 
To set your network's SSID and password:
 
<pre>
# wpa_passphrase <SSID> <PASSWORD> >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
</pre>
 
Enable Wi-Fi interface:
 
<pre>
# networkctl up wlan0
</pre>
</pre>


Restart the services
Restart the services:


<pre>
<pre>
Line 106: Line 118:
</pre>
</pre>


Wait a few seconds and than make sure wlan0 is up and connected to the AP
Wait a few seconds and then check if wlan0 is up and has an assigned IP:


<pre>
<pre>
Line 112: Line 124:
</pre>
</pre>


== Configuring WiFi access point with hostapd ==
Check if the gateway and the DNS server are reachable:


hostapd is a versatile tool for setting up a WiFi access point and generally offers more options and flexibility compared to NetworkManager.<br>
<pre>
For instance, hostapd enables the creation of a WiFi 6 access point, which is not currently possible with NetworkManager.<br>
# ping -I wlan0 192.168.1.1
udhcpd is a suitable option for providing DHCP services alongside hostapd. It's a lightweight DHCP server that can be easily integrated with hostapd.
# ping -I wlan0 8.8.8.8
</pre>
 
To make the Wi-Fi connection permanent, enable the wpa_supplicant service:
 
<pre>
# systemctl enable wpa_supplicant@wlan0.service
</pre>
 
If wlan0 fails to connect, the following commands may be helpful for debugging:
 
<pre>
# journalctl -u wpa_supplicant@wlan0.service
# journalctl -u systemd-networkd.service
# wpa_cli
</pre>
 
== Configuring WiFi Access Point with Hostapd ==
 
hostapd is a versatile option for setting up a WiFi access point. It offers more options and flexibility compared to other tools.<br>
For instance, hostapd can even enable the creation of a WiFi 6 access point.<br>
 
udhcpd is a suitable option for providing DHCP services alongside hostapd. It's a lightweight DHCP server that can be easily integrated with hostapd.<br>
 
The following steps describe how to create an access point using hostapd and udhcpd.<br>


=== Create /etc/hostapd.conf ===
=== Create /etc/hostapd.conf ===
Line 153: Line 189:
end 192.168.5.25 #default: 192.168.0.254
end 192.168.5.25 #default: 192.168.0.254
# The interface that udhcpd will use
# The interface that udhcpd will use
interface uap0 #default: eth0
interface uap0
#Example
 
opt dns 8.8.8.8 8.8.4.4 # public google dns servers
opt dns 8.8.8.8 8.8.4.4 # public google dns servers
option subnet 255.255.255.0
option subnet 255.255.255.0
Line 188: Line 224:


Now, devices connecting to the access point on uap0 will have network access through eth0.
Now, devices connecting to the access point on uap0 will have network access through eth0.
{{#ifeq: {{#var:WIFI_STERLING_SUPPORT}} | no | |
{{WIFI_STERLING_CONCURRENCY}}
}}
= Testing WiFi throughput =
{{WIFI_IPERF}}
{{#ifeq: {{#var:WIFI_STERLING_SUPPORT}} | no | |
{{WIFI_STERLING_REGREV}}
}}
{{#switch: {{#var:MACHINE_NAME}}
| var-som-mx6
| imx8mn-var-som
| imx93-var-som
| am62x-var-som
=
| #default=
= Note on {{#var:HARDWARE_NAME}} WiFi Initialization =
<p>WiFi is initialized by '''/etc/wifi/variscite-wifi'''. During initialization, the Linux device tree '''model''' property is read from '''/proc/device-tree/model''' and is used to
determine the Variscite SOM model and configure the SoM GPIO pins.</p>
{{#switch: {{#var:MACHINE_NAME}}
| imx8mq-var-dart
| imx8m-var-dart
| imx8qxp-var-som
= <p>Additionally, on the {{#var:HARDWARE_NAME}}, the WiFi and the SD card share the same SDIO controller and therefore cannot be used simultaneously. The WiFi script looks for a "WIFI" sub-string to determine whether or not the WiFi device tree was selected.</p>
}}
<p>Therefore, customers who choose to modify the Linux device tree '''model''' property should only append to the string provided by Variscite.</p><br>
}}

Latest revision as of 19:10, 21 August 2025

Warning: This page is designed to be used with a 'release' URL parameter.

This page is using the default release mx95-yocto-scarthgap-6.6.23_2.0.0-v1.0.
To view this page for a specific Variscite SoM and software release, please follow these steps:

  1. Visit variwiki.com
  2. Select your SoM
  3. Select the software release


Wireless

DART-MX95 Overview

The DART-MX95 supports the following WiFi modules:

Module Chipset Features Network Interface(s)
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 systemd-networkd. It is important to use the correct network interface for the module assembled on your DART-MX95.

Managing WiFi using systemd-networkd

systemd-networkd is a system daemon that manages network configurations. It detects and configures network devices as they appear.
systemd-networkd's functionality can be useful for both wireless and wired networks.
This guide describes how to use systemd-networkd to configure wireless networks.

Enabling and disabling WiFi

To enable WiFi run

# networkctl up wlan0

To disable WiFi run

# networkctl down wlan0

Configuring WiFi Client

Scanning for available WiFi APs

If WiFi is enabled you can get the list of available APs by running

# iw dev wlan0 scan | grep SSID

Connecting to a protected WiFi network

Create /etc/systemd/network/80-wifi-station.network as following:

# cp /lib/systemd/network/80-wifi-station.network.example /etc/systemd/network/80-wifi-station.network

Append the following content to /etc/systemd/network/80-wifi-station.network:

[DHCPv4]
RouteMetric=9
[IPv6AcceptRA]
RouteMetric=9

Create /etc/wpa_supplicant/wpa_supplicant-wlan0.conf with the following content:

ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1
fast_reauth=1

To set your network's SSID and password:

# wpa_passphrase <SSID> <PASSWORD> >> /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

Enable Wi-Fi interface:

# networkctl up wlan0

Restart the services:

# systemctl restart systemd-networkd.service
# systemctl restart wpa_supplicant@wlan0.service

Wait a few seconds and then check if wlan0 is up and has an assigned IP:

# ifconfig wlan0

Check if the gateway and the DNS server are reachable:

# ping -I wlan0 192.168.1.1
# ping -I wlan0 8.8.8.8

To make the Wi-Fi connection permanent, enable the wpa_supplicant service:

# systemctl enable wpa_supplicant@wlan0.service

If wlan0 fails to connect, the following commands may be helpful for debugging:

# journalctl -u wpa_supplicant@wlan0.service
# journalctl -u systemd-networkd.service
# wpa_cli

Configuring WiFi Access Point with Hostapd

hostapd is a versatile option for setting up a WiFi access point. It offers more options and flexibility compared to other tools.
For instance, hostapd can even enable the creation of a WiFi 6 access point.

udhcpd is a suitable option for providing DHCP services alongside hostapd. It's a lightweight DHCP server that can be easily integrated with hostapd.

The following steps describe how to create an access point using hostapd and udhcpd.

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
# /etc/hostapd.conf for 2.4 GHz (802.11b/g/n)
# AP Net Interface
interface=uap0

# 2.4 GHz
hw_mode=g

# Enable 802.11n (Wi-Fi 4) standard
ieee80211n=1
wmm_enabled=1

# Demo was run in the US
country_code=US

# Our SSID
ssid=Var_AP_2G

# Automatically select the best channel
# Notes about the LWB/LWB5 modules:
#  - For AP+STA, the channel must match the STA channel
#  - The LWB does not support auto channel selection.
#    We recommend using channel 1
channel=0
# /etc/hostapd.conf for Wi-Fi 5 (802.11ac)​
# AP Net Interface​
interface=uap0​

# 5 GHz​
hw_mode=a​
​
# Enable 802.11ac (Wi-Fi 5) standard​
ieee80211ac=1​
wmm_enabled=1​

# Demo was run in the US​
country_code=US​

# Our SSID​
ssid=Var_AP_Wifi5

# Automatically select the best channel​
# Notes about the LWB/LWB5 modules:
#  - For AP+STA, the channel must match the STA channel
#  - The LWB5 does not support auto channel selection.
#    For LWB5, we recommend using channel 36.
channel=0​
# /etc/hostapd.conf for Wi-Fi 6 (802.11ax)​
# AP Net Interface​
interface=uap0​

# 5 GHz​
hw_mode=a​
​
# Enable 802.11ax (Wi-Fi 6) standard​
ieee80211ax=1
wmm_enabled=1​

# Demo was run in the US​
country_code=US​
                                                       
# Our SSID​
ssid=Var_AP_Wifi6

# Automatically select the best channel​
channel=0​




Add the Control interface directory and group to /etc/hostapd.conf:

# Control interface directory and group
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

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 DHCP server

# Sample udhcpd configuration file (/etc/udhcpd.conf)
# The start and end of the IP lease block
start 192.168.5.20 #default: 192.168.0.20
end 192.168.5.25 #default: 192.168.0.254
# The interface that udhcpd will use
interface uap0

opt dns 8.8.8.8 8.8.4.4 # public google dns servers
option subnet 255.255.255.0
opt router 192.168.5.1
option lease 864000 # 10 days of seconds

Then, assign uap0 an ip and start hostapd and udhcpd:

ifconfig uap0 192.168.5.1
sleep 1
systemctl restart hostapd
sleep 1
udhcpd /etc/udhcpd.conf

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:

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

Now, devices connecting to the access point on uap0 will have network access through eth0.


Testing WiFi throughput

Establish connection to WiFi network and use iperf3 tool on target and another host:

iperf3 server (on Target/Host):

# iperf3 -s

iperf3 client (on Host/Target):

Run UDP test for 30 seconds
# iperf3 -c <IP_ADDRESS_OF_IPERF_SERVER> -t 30 -u -b 0
Run TCP test for 30 seconds
# iperf3 -c <IP_ADDRESS_OF_IPERF_SERVER> -t 30



Note on DART-MX95 WiFi Initialization

WiFi is initialized by /etc/wifi/variscite-wifi. During initialization, the Linux device tree model property is read from /proc/device-tree/model and is used to determine the Variscite SOM model and configure the SoM GPIO pins.

Therefore, customers who choose to modify the Linux device tree model property should only append to the string provided by Variscite.