Ethernet


This chapter describes common information and instructions of Ethernet on AIoT Yocto, such as command to configure DHCP or static IP and so on.

But Ethernet on different platforms may have some platform-specific instructions or test results. For example, you will get different throughputs on different platforms.


Change the MAC Address

Note

Current AIoT platforms does not support changing permanent MAC address with ethtool.

AIoT Yocto v21.3 and later release uses systemd to manage network settings in Linux OS, including MAC addresses.

By default, systemd generates a temporary MAC address for the ethernet interface with following steps:

  • First, systemd generates a unique machine-id and store it in /etc/machine-id during boot up after whole image has been flashed.

  • Then, systemd uses this machine-id to calculate a unique MAC address.

  • After that, the unique MAC address will be applied to Ethernet driver. This is a kind of temporary MAC address which is calculated each time during system boot up.

To change the temporary MAC address and store it in the file system, please follow these steps:

  • Create a file /etc/systemd/network/00-eth0.link. Systemd will use the setting in this file to override the generated address.

  • Edit the configuration file and insert the following configurations:

    [Match]
    OriginalName=eth0
    
    [Link]
    MACAddress=16:55:61:43:11:22
    

    Please replace the example MAC address 16:55:61:43:11:22 to the MAC address that you needed.

Control Network Settings via NetworkManager

NetworkManager is enable by default. This service is registered as NetworkManager.service (also known as NetworkManager) to systemd. nmcli is the interactive tool for controlling the NetworkManager. User could use nmcli to check connections managed by NetworkManager.

nmcli -p connection show

You should see the following output if you’ve never touched network setting.

======================================
  NetworkManager connection profiles
======================================
NAME                UUID                                  TYPE      DEVICE
------------------------------------------------------------------------------->
Wired connection 1  4080d986-b3c7-3601-a837-3ca6ee6b2ab2  ethernet  eth0

Enable or Disable NetworkManager

If you want to use another network management service, it’s good to know how to enable and disable the NetworkManager service. You need to stop NetworkManager prior to disable it.

systemctl stop NetworkManager
systemctl disable NetworkManager

If you want to switch back NetworkManager, simply enable and then start the service.

systemctl enable NetworkManager
systemctl start NetworkManager

Check the Status of NetworkManager

Use systemctl to check if the NetworkManager is still running.

systemctl status NetworkManager

Check the output line which contains Active: for the status of NetworkManager. For example, the output shows NetworkManager is running.

active (running)

The other output show the service has been stopped.

inactive (dead)

The configuration of NetworkManager service is stored in file /etc/systemd/system/multi-user.target.wants/NetworkManager.service. You can check this file if any customization is required for this service.

Control Network Settings via Tool NMCLI

nmcli is the tool for configuring and controlling each network interface managed by NetworkManager. nmcli can enable or disable the network while keeps NetworkManager alive. You can set the following commands to enable or disable networking controlled by NetworkManager. All interfaces managed by NetworkManager are deactivated when networking is disabled. For more detail, you can check the online manual of nmcli: https://developer-old.gnome.org/NetworkManager/stable/nmcli.html

nmcli networking off
nmcli networking on

Configure Static IP

DHCP is enabled by default with NetworkManager. If static IP is required, use nmcli to modify connection setting. For example, set IP 192.168.0.1 and netmask 255.255.255.0 with default gateway 192.168.0.1 to "Wired connection 1" (eth0). After that, reload NetworkManager via systemctl.

nmcli con mod "Wired connection 1" ip4 "192.168.0.1/24" gw4 192.168.0.1
systemctl reload NetworkManager

Use ip a to check if the static IP has been applied.

ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 92:b2:7c:21:08:2d brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.0.255 scope global noprefixroute eth0
        valid_lft forever preferred_lft forever
    inet6 fe80::3154:c53:c5e5:6d6f/64 scope link noprefixroute
        valid_lft forever preferred_lft forever

Check the new configuration has been stored in file /etc/NetworkManager/system-connections/Wired connection 1.nmconnection

cat /etc/NetworkManager/system-connections/Wired\ connection\ 1.nmconnection

It should show the new IP value is assigned to variable address1.

[ipv4]
    address1=192.168.0.1/24,192.168.0.1

Reference Boards

Ethernet on different platforms may have some platform-specific instructions or test results. For example, you will get different benchmark results on different platforms. Please find more details about difference of Ethernet on each paltform: