aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2012-09-03 14:29:28 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2012-09-03 14:29:28 +0000
commit478df1d534e9b1ca86261fcef37b46cc7b4c8f17 (patch)
treed472303af619afc2d68c7ab0cda3c079928a1a16 /sys
parent5610c8a7ac39e055f9d17cb5f1fea10605f4867f (diff)
downloadsrc-478df1d534e9b1ca86261fcef37b46cc7b4c8f17.tar.gz
src-478df1d534e9b1ca86261fcef37b46cc7b4c8f17.zip
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>
Notes
Notes: svn path=/head/; revision=240073
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet/if_ether.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 8e2daebbe049..52d7db228dcf 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;
}