Network
The network is configured by the dhcp service, which runs busybox udhcpc on the first network device. A static address must be set from /etc/rc.local.
DHCP
The run script of dhcp selects the first entry of /sys/class/net/* (in glob order) that has a device directory, which excludes lo, dummy0 and sit0. If there is no such entry, the script checks again every second. It then runs ifconfig IF up and exec udhcpc -f -i IF -s /etc/udhcpc.script. Only one interface is configured. A normal start writes this to the log:
# cat /var/log/dhcp/current
2026-11-02_16:53:09.65038 udhcpc: started, v1.37.0
2026-11-02_16:53:09.66001 udhcpc: broadcasting discover
2026-11-02_16:53:09.68126 udhcpc: broadcasting select for 10.0.2.15, server 10.0.2.2
2026-11-02_16:53:09.70119 udhcpc: lease of 10.0.2.15 obtained from 10.0.2.2, lease time 86400
# ip route
default via 10.0.2.2 dev eth0
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
# cat /etc/resolv.conf
nameserver 10.0.2.3
What the script sets
/etc/udhcpc.script handles two events, bound and renew. On either event the script:
- (a) runs
ifconfig INTERFACE IP netmask SUBNET up, using 255.255.255.0 if the server sent no mask; - (b) adds a default route through the first router that the server sent; and
- (c) replaces
/etc/resolv.confwith onenameserverline for each DNS server that the server sent.
Every other event and option is ignored. Nothing happens on deconfig, a lost or refused lease leaves the old address in place, and domain names, search lists, NTP servers and static routes from the server are dropped. Edits to /etc/resolv.conf are overwritten at the next lease event. The script configures IPv4 only; IPv6 addresses come from router advertisements in the kernel.
A static address
To use a static address, you must remove the link of the service and set the address from /etc/rc.local, which /etc/rc sources at every boot after the firewall and swap setup and before any service starts. The interface name can be found with ip -br link; in QEMU it is eth0.
# rm /etc/service/dhcp
# cat >> /etc/rc.local <<'EOF'
ip link set eth0 up
ip addr add 192.168.1.20/24 dev eth0
ip route add default via 192.168.1.1
echo "nameserver 192.168.1.1" > /etc/resolv.conf
EOF
Stopping the service with sv down dhcp is not sufficient, because geiger then reports it. The link must be removed.
Hostname
The "hostname" is the single line of /etc/hostname, which is applied with hostname -F at boot. setup --hostname NAME writes the file, sets the name at once and writes /etc/hosts as:
127.0.0.1 localhost NAME
::1 localhost
A name is accepted if it consists of 1 to 63 letters, digits and hyphens and neither begins nor ends with a hyphen. hostname NAME changes the running name only, and hostname -F /etc/hostname sets it back. hostname is a busybox applet, and you must run it as /rod/init/bin/hostname.
Firewall
The input policy is drop. The rules accept loopback traffic, replies to outgoing traffic, ICMP and ICMPv6, DHCP replies (UDP source port 67, destination port 68) and new connections to port 22 at a limit of 10 a minute. Forwarding is dropped and output is accepted. blastdoor allow PORT opens further ports; see blastdoor.
Wired and wireless hardware
The kernel has no modules, so a driver exists only if it is built in. The kernel of the image is built with these Ethernet drivers: virtio-net, e1000, e1000e, igb, 8139too and r8169. Drivers such as tulip, ixgbe, atlantic, tg3, bnx2 and usbnet are not set. A card that needs a driver that is not built in does not appear in ip link; see kernel.
Wireless is not supported. The kernel has cfg80211, mac80211 and rfkill built in, but none of the iwlwifi, ath9k, ath10k, rtw88, rtw89, mt76 or brcmfmac drivers, and the base system contains no wireless tool.
Check a connection
# ip addr
# ip route
# cat /etc/resolv.conf
# ping -c 1 10.0.2.2
# tail /var/log/dhcp/current
# geiger
See troubleshooting.