Linux – why linux bridge shows 2 mac addresses for one qemu vm

bridgelinuxlinux-networkingqemuvirtualization

I am new to qemu networking and pretty confused about the following situation. I launched 5 VMs. Each connects to br0 through a tap device. I also have a dnsmasq listening on br0 for DHCP.

The problem is dnsmasq does not hand out ip to VM according to the dhcp_host file I specified. The dhcp_host file has entries like: mac:ip. I thought when I put the mac addr in qemu, the dnsmasq should look up the ip from the dhcp_host file. But it didn't. Instead, it hands out ip randomly.

Now, when I checked with brctl. It shows 10 mac addresses instead of 5!? I searched a lot of qemu networking tutorials from google before come to ask here. None of them answer my questions. Could someone please explain the situation or give me some pointers? Thanks!

 $ brctl show
 bridge name     bridge id               STP enabled     interfaces
 br0             8000.1ed7c974ed93       no               tap0
                                                          tap1
                                                          tap2
                                                          tap3
                                                          tap4
$ brctl showmacs br0
port no mac addr                is local?       ageing timer
  1     02:2f:ef:29:be:36       no                 1.73
  1     1e:d7:c9:74:ed:93       yes                0.00
  4     22:00:f4:a8:89:8a       no                 3.99
  5     5a:e6:2a:d6:a0:50       yes                0.00
  3     5e:18:64:12:3d:ec       yes                0.00
  3     72:22:53:51:f4:fa       no                 3.08
  4     7a:e4:22:89:59:9a       yes                0.00
  5     82:9f:d3:6d:54:17       no                 0.69
  2     c2:fb:2a:3a:81:e9       no                32.99
  2     e6:a6:7a:a4:49:d4       yes                0.00

UPDATE:
Below is one sample qemu process info from ps aux

user     15983 99.9  8.0 5673100 5296180 ?     Sl   12:29 214:30 qemu-system-x86_64 
-enable-kvm -snapshot -no-shutdown 
-m 5120 -smp 2 
-pidfile /home/user/vm-workingdir/instance-2/pid 
-monitor unix:/home/htrc/user/instance-2/monitor,server,nowait 
-serial file:/home/user/vm-workingdir/instance-2/release_mon 
-usb 
-net nic,vlan=0,macaddr=c2:b3:04:4b:8c:c8 
-net tap,vlan=0,fd=3 
-hda /home/user/vm-workingdir/instance-2/image.img 
-vnc :105,password

Best Answer

The tap device's mac and the actual mac of the virtual NIC in the VM are different, this is why you see double the amount of MACs in the output.

You should only look at the VM's internal MACs, the ones you specify in the -net nic,vlan=0,macaddr=XX:XX... argument, the tap dev MACs aren't important.