When sniffing the network traffic, discard class D and E IP addresses when sniffing traffic. This was a reason why filters were not correctly rebuilt on VMs on the local 192.* network when libvirt was restarted and those VMs did not use a DHCP request to get its IP address.
struct iphdr *iphdr = (struct iphdr*)(packet +
ethHdrSize);
vmaddr = iphdr->saddr;
- // skip eth. bcast and mcast addresses,
- // and zero address in DHCP Requests
- if ((ntohl(vmaddr) & 0xc0000000) || vmaddr == 0) {
+ // skip mcast addresses (224.0.0.0 - 239.255.255.255),
+ // class E (240.0.0.0 - 255.255.255.255, includes eth.
+ // bcast) and zero address in DHCP Requests
+ if ( (ntohl(vmaddr) & 0xe0000000) == 0xe0000000 ||
+ vmaddr == 0) {
vmaddr = 0;
continue;
}