diff options
author | glebius <glebius@FreeBSD.org> | 2012-09-03 14:29:28 +0000 |
---|---|---|
committer | glebius <glebius@FreeBSD.org> | 2012-09-03 14:29:28 +0000 |
commit | 9b72c7eaa7db5c310d21f10fa2627ce72fd9ac29 (patch) | |
tree | d472303af619afc2d68c7ab0cda3c079928a1a16 /sys/netinet | |
parent | 814cd9213c55954ea92be3aba69a491e34254300 (diff) | |
download | FreeBSD-src-9b72c7eaa7db5c310d21f10fa2627ce72fd9ac29.zip FreeBSD-src-9b72c7eaa7db5c310d21f10fa2627ce72fd9ac29.tar.gz |
Provide a sysctl switch that allows to install ARP entries
with multicast bit set. FreeBSD refuses to install such
entries since 9.0, and this broke installations running
Microsoft NLB, which are violating standards.
Tested by: Tarasov Oleg <oleg_tarasov sg-tea.com>
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/if_ether.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c index 8e2daeb..52d7db2 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -496,6 +496,7 @@ arpintr(struct mbuf *m) static int log_arp_wrong_iface = 1; static int log_arp_movements = 1; static int log_arp_permanent_modify = 1; +static int allow_multicast = 0; SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_wrong_iface, CTLFLAG_RW, &log_arp_wrong_iface, 0, @@ -506,7 +507,8 @@ SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_movements, CTLFLAG_RW, SYSCTL_INT(_net_link_ether_inet, OID_AUTO, log_arp_permanent_modify, CTLFLAG_RW, &log_arp_permanent_modify, 0, "log arp replies from MACs different than the one in the permanent arp entry"); - +SYSCTL_INT(_net_link_ether_inet, OID_AUTO, allow_multicast, CTLFLAG_RW, + &allow_multicast, 0, "accept multicast addresses"); static void in_arpinput(struct mbuf *m) @@ -551,8 +553,8 @@ in_arpinput(struct mbuf *m) return; } - if (ETHER_IS_MULTICAST(ar_sha(ah))) { - log(LOG_NOTICE, "in_arp: %*D is multicast\n", + if (allow_multicast == 0 && ETHER_IS_MULTICAST(ar_sha(ah))) { + log(LOG_NOTICE, "arp: %*D is multicast\n", ifp->if_addrlen, (u_char *)ar_sha(ah), ":"); return; } |