On 01/23/2013 10:39 PM, Matthias Schiffer wrote: > ipv4_is_zeronet() checks if the first byte of the address is zero, to my > knowledge there is no special funtion for checking for the unspecified > address, as the case is trivial and independent of byte ordering. > > It might make sense though to check for different types of addresses > that are invalid for ARP (zeronet, loopback, multicast, etc.), but I > wanted to keep the patch as simple as possible. If you think these > should be filtered as well, I'll prepare a v2. > > Matthias
Oh, I shouldn't top post. Well, continuing here now... I just noticed that batadv_arp_get_type() already checks for loopback and multicast addresses, so adding ipv4_is_zeronet() should be enough. I'd keep that in batadv_dat_entry_add() though as the source of ARP replies with 0.0.0.0 destination is still valid and can be should to the DAT. Matthias > > > On 01/23/2013 10:07 PM, Antonio Quartulli wrote: >> On Wed, Jan 23, 2013 at 06:11:54 +0100, Matthias Schiffer wrote: >>> Due to duplicate address detection and other strange ARP packets, sometimes >>> entries with broadcast MAC addresses or unspecified IP addresses would get >>> into >>> the Distributed ARP Table. This patch prevents these and some other kinds of >>> invalid entries from getting into the DAT. >>> >>> Signed-off-by: Matthias Schiffer <[email protected]> >>> --- >>> distributed-arp-table.c | 12 ++++++++++++ >>> 1 file changed, 12 insertions(+) >>> >>> diff --git a/distributed-arp-table.c b/distributed-arp-table.c >>> index 9f4cff3..e28be57 100644 >>> --- a/distributed-arp-table.c >>> +++ b/distributed-arp-table.c >>> @@ -274,6 +274,18 @@ static void batadv_dat_entry_add(struct batadv_priv >>> *bat_priv, __be32 ip, >>> struct batadv_dat_entry *dat_entry; >>> int hash_added; >>> >>> + /* filter invalid MAC addresses that are sometimes used as >>> + * destinations of ARP replies >>> + */ >>> + if (is_zero_ether_addr(mac_addr) || is_multicast_ether_addr(mac_addr)) >>> + return; >>> + >>> + /* ARP requests with unspecified source address are used for >>> + * duplicate address detection, we don't want those in the DAT either >>> + */ >>> + if (!ip) >> >> Hi Matthias, >> what about using ipv4_is_zeronet() ? Even if this is a base case, I would >> rather >> prefer to use an already implemented function. >> >> Cheers, >> > >
signature.asc
Description: OpenPGP digital signature
