Emulation of network devices

Networking types

QEMU can emulate different types of networks:

User networking

User networking is the easiest to use. QEMU provides NAT translation and a DHCP server.

-netdev user,id=eth0 \
-device virtio-net,netdev=eth0

Port forwarding

The emulated device can access the outside network but cannot be reached from outside by default. Forwarding rules can be added.

In the example the SSH port 22 of the default interface of the emulated device is forwarded to port 2222 of the loopback interface of the host.

-netdev user,id=eth0,hostfwd=tcp:127.0.0.1:2222-:22 \
-device virtio-net,netdev=eth0

TFTP

A TFTP server can be added by specifying a file path.

-netdev user,id=eth0,tftp=/path/to/tftpdir \
-device virtio-net,netdev=eth0

Bridge networking

The emulated NIC is connected to an existing bridge device.

-netdev bridge,id=eth0,br=virbr0 \
-device virtio-net,netdev=eth0

The emulated device becomes part of the same local network as the bridge.

Tap networking

With tap networking a tap device is created on the host.

-netdev tap,id=eth0 \
-device virtio-net,netdev=eth0

Emulated network interface controllers

QEMU can emulate different NICs. For best performance choose virtio-net.

Intel E1000

U-Boot’s E1000 driver supports a number of Intel PCI NICs. This includes the QEMU devices e1000, e1000-82544gc, and e1000-82545em.

-netdev user,id=eth0 \
-device e1000,netdev=eth0

Configuration:

  • CONFIG_PCI=y

  • CONFIG_E1000=y

Realtek RTL8139

The RTL8139 is a PCI network card. The U-Boot driver only supports the i386 archtitecture.

-netdev user,id=eth0 \
-device rtl8139,netdev=eth0

Configuration:

  • CONFIG_PCI=y

  • CONFIG_NET_RANDOM_ETHADDR=y

  • CONFIG_RTL8139

Virtio

U-Boot’s virtio network driver supports virtio-net, virtio-net-device, and virtio-net-pci devices. virtio-net-device uses MMIO, while virtio-net-pci uses PCI.

For best performance use virtio-net.

-netdev user,id=eth0 \
-device virtio-net,netdev=eth0

Configuration:

  • CONFIG_PCI=y (only for virtio-net-pci)

  • CONFIG_NET_VIRTIO=y

Network device options

The network adapters provide different configuration parameters. Here are some common ones.

mac

set MAC address

-netdev user,id=eth0 \
-device virtio-net-pci,netdev=eth0,mac=00:00:00:00:01:01
romfile

provide the ROM file of the NIC

-netdev user,id=eth0 \
-device virtio-net-pci,netdev=eth0,romfile=pxe-virtio.rom

or provide none

-netdev user,id=eth0 \
-device virtio-net-pci,netdev=eth0,romfile=