svn commit: r240073 - in head: sys/netinet usr.sbin/arp

Gleb Smirnoff glebius at FreeBSD.org
Mon Sep 3 14:29:29 UTC 2012


Author: glebius
Date: Mon Sep  3 14:29:28 2012
New Revision: 240073
URL: http://svn.freebsd.org/changeset/base/240073

Log:
  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>

Modified:
  head/sys/netinet/if_ether.c
  head/usr.sbin/arp/arp.4

Modified: head/sys/netinet/if_ether.c
==============================================================================
--- head/sys/netinet/if_ether.c	Mon Sep  3 14:16:16 2012	(r240072)
+++ head/sys/netinet/if_ether.c	Mon Sep  3 14:29:28 2012	(r240073)
@@ -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_AUT
 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;
 	}

Modified: head/usr.sbin/arp/arp.4
==============================================================================
--- head/usr.sbin/arp/arp.4	Mon Sep  3 14:16:16 2012	(r240072)
+++ head/usr.sbin/arp/arp.4	Mon Sep  3 14:29:28 2012	(r240073)
@@ -120,6 +120,12 @@ of the
 .Xr sysctl 3
 MIB.
 .Bl -tag -width "log_arp_permanent_modify"
+.It Va allow_multicast
+Should the kernel install ARP entries with multicast bit set in
+the hardware address.
+Installing such entries is RFC 1812 violation, but some prorietary
+load balancing techniques require routers on network to do so.
+Turned off by default.
 .It Va log_arp_movements
 Should the kernel log movements of IP addresses from one hardware
 address to an other.
@@ -203,6 +209,11 @@ entry in the local ARP table.
 This error will only be logged if the sysctl
 .Va net.link.ether.inet.log_arp_permanent_modify
 is set to 1, which is the system's default behaviour.
+.It "arp: %x:%x:%x:%x:%x:%x is multicast"
+Kernel refused to install an entry with multicast hardware address.
+If you really want such addresses being installed, set the sysctl
+.Va net.link.ether.inet.allow_multicast
+to a positive value.
 .El
 .Sh SEE ALSO
 .Xr inet 4 ,


More information about the svn-src-all mailing list