diff --git a/package/gluon-ebtables-limit-arp/src/gluon-arp-limiter.c b/package/gluon-ebtables-limit-arp/src/gluon-arp-limiter.c index af4acf48dbf3d4e1ec2b3a053f91b3a20803a195..cbb6faf21fcc76bc841e5600596594bfba4da0d9 100644 --- a/package/gluon-ebtables-limit-arp/src/gluon-arp-limiter.c +++ b/package/gluon-ebtables-limit-arp/src/gluon-arp-limiter.c @@ -248,6 +248,9 @@ static void ebt_tl_update(void) break; } + if (mac_is_multicast(&mac)) + continue; + ebt_add_mac(&mac); } diff --git a/package/gluon-ebtables-limit-arp/src/mac.h b/package/gluon-ebtables-limit-arp/src/mac.h index e61917364813e70c28bc04aa622d028ba7958206..11567ade6060c4fc8a36e2b3302f617f774b27c2 100644 --- a/package/gluon-ebtables-limit-arp/src/mac.h +++ b/package/gluon-ebtables-limit-arp/src/mac.h @@ -16,4 +16,9 @@ struct mac_addr { int mac_aton(const char *cp, struct mac_addr *mac); char *mac_ntoa(struct mac_addr *mac); +static inline int mac_is_multicast(struct mac_addr *addr) +{ + return addr->storage[0] & 0x01; +} + #endif /* _MAC_H_ */