svn commit: r186577 - user/kmacy/HEAD_fast_net/sys/net

Kip Macy kmacy at FreeBSD.org
Mon Dec 29 23:41:13 UTC 2008


Author: kmacy
Date: Mon Dec 29 23:41:12 2008
New Revision: 186577
URL: http://svn.freebsd.org/changeset/base/186577

Log:
  use cached lle where possible

Modified:
  user/kmacy/HEAD_fast_net/sys/net/if_ethersubr.c
  user/kmacy/HEAD_fast_net/sys/net/if_var.h

Modified: user/kmacy/HEAD_fast_net/sys/net/if_ethersubr.c
==============================================================================
--- user/kmacy/HEAD_fast_net/sys/net/if_ethersubr.c	Mon Dec 29 23:31:04 2008	(r186576)
+++ user/kmacy/HEAD_fast_net/sys/net/if_ethersubr.c	Mon Dec 29 23:41:12 2008	(r186577)
@@ -164,9 +164,9 @@ int
 ether_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	short type;
-	int error, hdrcmplt = 0;
+	int error = 0, hdrcmplt = 0;
 	u_char esrc[ETHER_ADDR_LEN], edst[ETHER_ADDR_LEN];
-	struct llentry *lle = NULL;
+	struct llentry *lle = ro->ro_lle;
 	struct ether_header *eh;
 	struct pf_mtag *t;
 	int loop_copy = 1;
@@ -192,7 +192,10 @@ ether_output(struct ifnet *ifp, struct m
 	switch (dst->sa_family) {
 #ifdef INET
 	case AF_INET:
-		error = arpresolve(ifp, rt0, m, dst, edst, &lle);
+		if (lle != NULL && (lle->la_flags & LLE_VALID))
+			memcpy(edst, &lle->ll_addr.mac16, ETHER_ADDR_LEN);
+		else
+			error = arpresolve(ifp, rt0, m, dst, edst, &lle);
 		if (error)
 			return (error == EWOULDBLOCK ? 0 : error);
 		type = htons(ETHERTYPE_IP);
@@ -227,7 +230,10 @@ ether_output(struct ifnet *ifp, struct m
 #endif
 #ifdef INET6
 	case AF_INET6:
-		error = nd6_storelladdr(ifp, m, dst, (u_char *)edst, &lle);
+		if (lle != NULL && (lle->la_flags & LLE_VALID))
+			memcpy(edst, &lle->ll_addr.mac16, ETHER_ADDR_LEN);
+		else
+			error = nd6_storelladdr(ifp, m, dst, (u_char *)edst, &lle);
 		if (error)
 			return error;
 		type = htons(ETHERTYPE_IPV6);

Modified: user/kmacy/HEAD_fast_net/sys/net/if_var.h
==============================================================================
--- user/kmacy/HEAD_fast_net/sys/net/if_var.h	Mon Dec 29 23:31:04 2008	(r186576)
+++ user/kmacy/HEAD_fast_net/sys/net/if_var.h	Mon Dec 29 23:41:12 2008	(r186577)
@@ -664,6 +664,8 @@ struct ifmultiaddr {
 };
 
 #ifdef _KERNEL
+#define LLTABLE(ifp)	((struct lltable *)(ifp)->if_afdata[AF_INET])
+
 #define	IFAFREE(ifa)					\
 	do {						\
 		IFA_LOCK(ifa);				\


More information about the svn-src-user mailing list