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) {
--
1.8.0
--
Andreas Schwab, schwab(a)linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5
"And now for something completely different."