For incoming multicast packages handle_eth_packet cannot determine a direction from the MAC since the dest MAC will be a multicast MAC. Neither can handle_ip_packet defer a direction since the multicast address won't match the interface address. It then use a totally arbitrary direction from comparing the IP address numerically (which depends on the host byte order), but only for IPv4 packages. IPv6 multicast packages are not handled at all, and causes the resolver to be called with af == AF_UNSPEC (which is an error).
This patch makes handle_ip_packet treat packages with a multicast dest address as incoming packages, and otherwise drop any other unrecognized packages.
Andreas.
diff --git a/iftop.c b/iftop.c index 06778d6..2805cd6 100644 --- a/iftop.c +++ b/iftop.c @@ -286,6 +286,14 @@ static void handle_ip_packet(struct ip* iptr, int hw_dir) assign_addr_pair(&ap, iptr, 1); direction = 0; } + else if (IP_V(iptr) == 4 && IN_MULTICAST(iptr->ip_dst.s_addr)) { + assign_addr_pair(&ap, iptr, 1); + direction = 0; + } + else if (IP_V(iptr) == 6 && IN6_IS_ADDR_MULTICAST(&ip6tr->ip6_dst)) { + assign_addr_pair(&ap, iptr, 1); + direction = 0; + } /* * Cannot determine direction from hardware or IP levels. Therefore * assume that it was a packet between two other machines, assign @@ -304,6 +312,8 @@ static void handle_ip_packet(struct ip* iptr, int hw_dir) direction = 0; } /* Drop other uncertain packages. */ + else + return; }
if(IP_V(iptr) == 4 && options.netfilter != 0) {