1.3. Networking

barebox has IPv4 networking support. Several protocols such as DHCP, NFS and TFTP are supported.

1.3.1. Network configuration

1.3.1.1. Lowlevel network device configuration

Network devices are configured with a set of device specific variables:

name type  
<devname>.mode enum “dhcp”: DHCP is used to get IP address and netmask “static”: Static IP setup described by variables below “disabled”: Interface unused
<devname>.ipaddr ipv4 address The IP address when using static configuration
<devname>.netmask ipv4 address The netmask when using static configuration
<devname>.gateway ipv4 address Alias for global.net.gateway. For compatibility, do not use.
<devname>.serverip ipv4 address Alias for global.net.server. For compatibility, do not use.
<devname>.ethaddr MAC address The MAC address of this device

Additionally there are some more variables that are not specific to a device:

name type  
global.net.gateway ipv4 host The network gateway used when a host is not in any directly visible subnet. May be set automatically by DHCP.
global.net.server hostname or ipv4 address The default server. If unspecified, may be set by DHCP
global.net.nameserver ipv4 address The DNS server used for resolving host names. May be set by DHCP
global.net.ifup_force_detect boolean Set to true if your network device is not detected automatically during start (i.e. for USB network adapters)

The first step for networking is configuring the network device. The network device is usually eth0. The current configuration can be viewed with the devinfo command:

barebox:/ devinfo eth0
Parameters:
  ethaddr: 00:1c:49:01:03:4b
  ipaddr: 192.168.23.197
  netmask: 255.255.0.0
  [...]

The configuration can be changed on the command line with:

eth0.ipaddr=172.0.0.10

The dhcp command will change the settings based on the answer from the DHCP server.

To make the network device settings persistent across reboots there is a nonvolatile variable (nvvar) for each of the varariables above. The network device specific variables are:

nv.dev.<devname>.mode
nv.dev.<devname>.ipaddr
nv.dev.<devname>.netmask
nv.dev.<devname>.ethaddr

The others are:

nv.net.gateway
nv.net.server
nv.net.nameserver

A typical simple network setting is to use DHCP. Provided the network interface is eth0 then this would configure the network device for DHCP:

nv dev.eth0.mode=dhcp

(In fact DHCP is the default, so the above is not necessary)

A static setup would look like:

nv dev.eth0.mode=static
nv dev.eth0.ipaddr=192.168.0.17
nv dev.eth0.netmask=255.255.0.0
nv net.server=192.168.0.1

The settings can be activated with the ifup command:

ifup eth0

or:

ifup -a

‘ifup -a’ will activate all ethernet interfaces, also the ones on USB.

1.3.2. Network filesystems

barebox supports NFS and TFTP both with commands (nfs and tftp) and as filesystem implementations; see NFS Support and TFTP filesystem for more information. After the network device has been brought up, a network filesystem can be mounted with:

mount -t tftp 192.168.2.1 /mnt

or

mount -t nfs 192.168.2.1:/export none /mnt

NOTE: The execution of the mount command can often be hidden behind the automount command, to make mounting transparent to the user.

1.3.3. Network console

barebox has a UDP-based network console. If enabled in the config, you will see something like this during startup:

registered netconsole as netconsole

By default the network console is disabled during runtime to prevent security risks. It can be enabled using:

netconsole.ip=192.168.23.2
netconsole.active=ioe

This will send UDP packets to a PC with IP address 192.168.23.2 and port 6666.

The netconsole.active parameter consists of the fields “input” (i), “output” (o) and “error” (e); if the fields are set, the respective channel is activated on the network console.

On the PC side, the scripts/netconsole script can be used to remote control barebox:

scripts/netconsole <board IP> 6666

The netconsole can be used just like any other console. Note, however, that the simple console protocol is UDP based, so there is no guarantee about packet loss.