svn commit: r189372 - in user/kmacy/HEAD_fast_net_merge: contrib/ipfilter/tools sys/contrib/ipfilter/netinet sys/contrib/pf/net sys/dev/iicbus sys/dev/lmc sys/dev/ppbus sys/net sys/net80211 sys/net...

Kip Macy kmacy at FreeBSD.org
Wed Mar 4 12:58:25 PST 2009


Author: kmacy
Date: Wed Mar  4 20:58:22 2009
New Revision: 189372
URL: http://svn.freebsd.org/changeset/base/189372

Log:
  Change if_output interface to allow passing cached lle
    down to L2:
  186574, 186577, 186673
  
  186574:
  - Change if_output interface to allow passing cached lle
    down to L2
  
  186577:
  - used cache lle where possible
  
  186673:
  - fix if_output calls in modules

Modified:
  user/kmacy/HEAD_fast_net_merge/contrib/ipfilter/tools/ipftest.c
  user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_compat.h
  user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
  user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_sync.c
  user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/if_pflog.c
  user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/if_pfsync.c
  user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/pf.c
  user/kmacy/HEAD_fast_net_merge/sys/dev/iicbus/if_ic.c
  user/kmacy/HEAD_fast_net_merge/sys/dev/lmc/if_lmc.c
  user/kmacy/HEAD_fast_net_merge/sys/dev/lmc/if_lmc.h
  user/kmacy/HEAD_fast_net_merge/sys/dev/ppbus/if_plip.c
  user/kmacy/HEAD_fast_net_merge/sys/net/bpf.c
  user/kmacy/HEAD_fast_net_merge/sys/net/ethernet.h
  user/kmacy/HEAD_fast_net_merge/sys/net/if_arc.h
  user/kmacy/HEAD_fast_net_merge/sys/net/if_arcsubr.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_atm.h
  user/kmacy/HEAD_fast_net_merge/sys/net/if_atmsubr.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_disc.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_enc.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_ethersubr.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_faith.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_fddisubr.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_fwsubr.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_gif.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_gif.h
  user/kmacy/HEAD_fast_net_merge/sys/net/if_gre.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_iso88025subr.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_lagg.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_lagg.h
  user/kmacy/HEAD_fast_net_merge/sys/net/if_loop.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_spppsubr.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_stf.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_tun.c
  user/kmacy/HEAD_fast_net_merge/sys/net/if_var.h
  user/kmacy/HEAD_fast_net_merge/sys/net/iso88025.h
  user/kmacy/HEAD_fast_net_merge/sys/net/route.h
  user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211.c
  user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211_output.c
  user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211_proto.h
  user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211_var.h
  user/kmacy/HEAD_fast_net_merge/sys/netatalk/aarp.c
  user/kmacy/HEAD_fast_net_merge/sys/netatalk/ddp_output.c
  user/kmacy/HEAD_fast_net_merge/sys/netgraph/atm/ng_atm.c
  user/kmacy/HEAD_fast_net_merge/sys/netgraph/ng_fec.c
  user/kmacy/HEAD_fast_net_merge/sys/netgraph/ng_gif.c
  user/kmacy/HEAD_fast_net_merge/sys/netgraph/ng_iface.c
  user/kmacy/HEAD_fast_net_merge/sys/netinet/if_ether.c
  user/kmacy/HEAD_fast_net_merge/sys/netinet/ip_carp.c
  user/kmacy/HEAD_fast_net_merge/sys/netinet/ip_fastfwd.c
  user/kmacy/HEAD_fast_net_merge/sys/netinet/ip_output.c
  user/kmacy/HEAD_fast_net_merge/sys/netinet6/in6.h
  user/kmacy/HEAD_fast_net_merge/sys/netinet6/ip6_mroute.c
  user/kmacy/HEAD_fast_net_merge/sys/netinet6/nd6.c
  user/kmacy/HEAD_fast_net_merge/sys/netipx/ipx_outputfl.c
  user/kmacy/HEAD_fast_net_merge/sys/netnatm/natm.c

Modified: user/kmacy/HEAD_fast_net_merge/contrib/ipfilter/tools/ipftest.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/contrib/ipfilter/tools/ipftest.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/contrib/ipfilter/tools/ipftest.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -9,6 +9,9 @@
 #include "ipt.h"
 #include <sys/ioctl.h>
 #include <sys/file.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <net/route.h>
 
 #if !defined(lint)
 static const char sccsid[] = "@(#)ipt.c	1.19 6/3/96 (C) 1993-2000 Darren Reed";
@@ -282,16 +285,20 @@ char *argv[];
 			printf("--------------");
 		} else if ((opts & (OPT_BRIEF|OPT_NAT)) == (OPT_NAT|OPT_BRIEF))
 			printpacket(ip);
-		if (dir && (ifp != NULL) && IP_V(ip) && (m != NULL))
+		if (dir && (ifp != NULL) && IP_V(ip) && (m != NULL)) {
+			struct route ro;
+			bzero(&ro, sizeof(ro));
 #if  defined(__sgi) && (IRIX < 60500)
 			(*ifp->if_output)(ifp, (void *)m, NULL);
 #else
 # if TRU64 >= 1885
 			(*ifp->if_output)(ifp, (void *)m, NULL, 0, 0);
 # else
-			(*ifp->if_output)(ifp, (void *)m, NULL, 0);
+			(*ifp->if_output)(ifp, (void *)m, &ro);
 # endif
 #endif
+		}
+		
 		if ((opts & (OPT_BRIEF|OPT_NAT)) != (OPT_NAT|OPT_BRIEF))
 			putchar('\n');
 		dir = 0;

Modified: user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_compat.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_compat.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_compat.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -1825,7 +1825,7 @@ typedef	struct	tcpiphdr	tcpiphdr_t;
 #endif
 
 #ifndef offsetof
-# define offsetof(t,m) (int)((&((t *)0L)->m))
+# define offsetof(t,m) (size_t)((&((t *)0L)->m))
 #endif
 
 /*

Modified: user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -1045,8 +1045,8 @@ frdest_t *fdp;
 
 		if (!ip->ip_sum)
 			ip->ip_sum = in_cksum(m, hlen);
-		error = (*ifp->if_output)(ifp, m, (struct sockaddr *)dst,
-					  ro->ro_rt);
+		bcopy(dst, &ro->ro_dst, sizeof(dst));
+		error = (*ifp->if_output)(ifp, m, ro);
 		goto done;
 	}
 	/*
@@ -1122,12 +1122,12 @@ frdest_t *fdp;
 	ip->ip_sum = 0;
 	ip->ip_sum = in_cksum(m0, hlen);
 sendorfree:
+	bcopy(dst, &ro->ro_dst, sizeof(dst));
 	for (m = m0; m; m = m0) {
 		m0 = m->m_act;
 		m->m_act = 0;
 		if (error == 0)
-			error = (*ifp->if_output)(ifp, m,
-			    (struct sockaddr *)dst, ro->ro_rt);
+			error = (*ifp->if_output)(ifp, m, ro);
 		else
 			FREE_MB_T(m);
 	}

Modified: user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_sync.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_sync.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/contrib/ipfilter/netinet/ip_sync.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -729,9 +729,9 @@ void *data;
 		}
 
 		nat = (nat_t *)data;
-		bzero((char *)n, offsetof(nat_t, nat_age));
+		bzero((char *)n, __offsetof(nat_t, nat_age));
 		bcopy((char *)&nat->nat_age, (char *)&n->nat_age,
-		      sizeof(*n) - offsetof(nat_t, nat_age));
+		      sizeof(*n) - __offsetof(nat_t, nat_age));
 		ipfsync_natorder(0, n);
 		n->nat_sync = sl;
 

Modified: user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/if_pflog.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/if_pflog.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/if_pflog.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -112,8 +112,7 @@ __FBSDID("$FreeBSD$");
 #endif
 
 void	pflogattach(int);
-int	pflogoutput(struct ifnet *, struct mbuf *, struct sockaddr *,
-	    	       struct rtentry *);
+int	pflogoutput(struct ifnet *, struct mbuf *, struct route *);
 int	pflogioctl(struct ifnet *, u_long, caddr_t);
 void	pflogstart(struct ifnet *);
 #ifdef __FreeBSD__
@@ -286,8 +285,7 @@ pflogstart(struct ifnet *ifp)
 }
 
 int
-pflogoutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-	struct rtentry *rt)
+pflogoutput(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	m_freem(m);
 	return (0);

Modified: user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/if_pfsync.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/if_pfsync.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/if_pfsync.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -151,8 +151,7 @@ int	pfsync_insert_net_state(struct pfsyn
 #ifdef PFSYNC_TDB
 void	pfsync_update_net_tdb(struct pfsync_tdb *);
 #endif
-int	pfsyncoutput(struct ifnet *, struct mbuf *, struct sockaddr *,
-	    struct rtentry *);
+int	pfsyncoutput(struct ifnet *, struct mbuf *, struct route *);
 int	pfsyncioctl(struct ifnet *, u_long, caddr_t);
 void	pfsyncstart(struct ifnet *);
 
@@ -1082,8 +1081,7 @@ done:
 }
 
 int
-pfsyncoutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-	struct rtentry *rt)
+pfsyncoutput(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	m_freem(m);
 	return (0);

Modified: user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/pf.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/pf.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/contrib/pf/net/pf.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -6244,8 +6244,9 @@ pf_route(struct mbuf **m, struct pf_rule
 				ip->ip_sum = in_cksum(m0, ip->ip_hl << 2);
 			}
 		}
+		bcopy(dst, &ro->ro_dst, sizeof(*dst));
 		PF_UNLOCK();
-		error = (*ifp->if_output)(ifp, m0, sintosa(dst), ro->ro_rt);
+		error = (*ifp->if_output)(ifp, m0, ro);
 		PF_LOCK();
 		goto done;
 	}
@@ -6281,6 +6282,8 @@ pf_route(struct mbuf **m, struct pf_rule
 	}
 
 	if (ntohs(ip->ip_len) <= ifp->if_mtu) {
+		struct route ro;
+		
 		if ((ifp->if_capabilities & IFCAP_CSUM_IPv4) &&
 		    ifp->if_bridge == NULL) {
 			m0->m_pkthdr.csum_flags |= M_IPV4_CSUM_OUT;
@@ -6294,7 +6297,9 @@ pf_route(struct mbuf **m, struct pf_rule
 			V_tcpstat.tcps_outhwcsum++;
 		else if (m0->m_pkthdr.csum_flags & M_UDPV4_CSUM_OUT)
 			V_udpstat.udps_outhwcsum++;
-		error = (*ifp->if_output)(ifp, m0, sintosa(dst), NULL);
+
+		bcopy(dst, &ro->ro_dst, sizeof(*dst));
+		error = (*ifp->if_output)(ifp, m0, ro);
 		goto done;
 	}
 #endif
@@ -6345,9 +6350,11 @@ pf_route(struct mbuf **m, struct pf_rule
 		m0->m_nextpkt = 0;
 #ifdef __FreeBSD__
 		if (error == 0) {
+			bcopy(dst, &ro->ro_dst, sizeof(*dst));
+			ro->ro_lle = NULL;
+			ro->ro_rt = NULL;
 			PF_UNLOCK();
-			error = (*ifp->if_output)(ifp, m0, sintosa(dst),
-			    NULL);
+			error = (*ifp->if_output)(ifp, m0, ro);
 			PF_LOCK();
 		} else
 #else

Modified: user/kmacy/HEAD_fast_net_merge/sys/dev/iicbus/if_ic.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/dev/iicbus/if_ic.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/dev/iicbus/if_ic.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -102,9 +102,7 @@ static int icprobe(device_t);
 static int icattach(device_t);
 
 static int icioctl(struct ifnet *, u_long, caddr_t);
-static int icoutput(struct ifnet *, struct mbuf *, struct sockaddr *,
-		struct rtentry *);
-
+static int icoutput(struct ifnet *, struct mbuf *, struct route *);
 static int icintr(device_t, int, char *);
 
 static device_method_t ic_methods[] = {
@@ -353,8 +351,7 @@ icintr(device_t dev, int event, char *pt
  * icoutput()
  */
 static int
-icoutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-    struct rtentry *rt)
+icoutput(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	struct ic_softc *sc = ifp->if_softc;
 	device_t icdev = sc->ic_dev;
@@ -363,6 +360,7 @@ icoutput(struct ifnet *ifp, struct mbuf 
 	struct mbuf *mm;
 	u_char *cp;
 	u_int32_t hdr;
+	struct sockaddr *dst = &ro->ro_dst;
 
 	/* BPF writes need to be handled specially. */ 
 	if (dst->sa_family == AF_UNSPEC)

Modified: user/kmacy/HEAD_fast_net_merge/sys/dev/lmc/if_lmc.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/dev/lmc/if_lmc.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/dev/lmc/if_lmc.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -114,6 +114,7 @@
 # include <net/if_types.h>
 # include <net/if_media.h>
 # include <net/netisr.h>
+# include <net/route.h>
 # include <machine/bus.h>
 # include <machine/resource.h>
 # include <sys/rman.h>
@@ -4582,8 +4583,7 @@ lmc_ifnet_start(struct ifnet *ifp)
 /* RAWIP mode is the only time this is used. */
 /* Called from a syscall (user context; no spinlocks). */
 static int
-lmc_raw_output(struct ifnet *ifp, struct mbuf *m,
- struct sockaddr *dst, struct rtentry *rt)
+lmc_raw_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
   {
   softc_t *sc = IFP2SC(ifp);
   int error = 0;

Modified: user/kmacy/HEAD_fast_net_merge/sys/dev/lmc/if_lmc.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/dev/lmc/if_lmc.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/dev/lmc/if_lmc.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -1594,8 +1594,7 @@ static void core_watchdog(softc_t *);
 static int lmc_raw_ioctl(struct ifnet *, u_long, caddr_t);
 static int lmc_ifnet_ioctl(struct ifnet *, u_long, caddr_t);
 static void lmc_ifnet_start(struct ifnet *);
-static int lmc_raw_output(struct ifnet *, struct mbuf *,
- struct sockaddr *, struct rtentry *);
+static int lmc_raw_output(struct ifnet *, struct mbuf *, struct route *ro);
 static void lmc_ifnet_watchdog(struct ifnet *);
 # ifdef __OpenBSD__
 static int ifmedia_change(struct ifnet *);

Modified: user/kmacy/HEAD_fast_net_merge/sys/dev/ppbus/if_plip.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/dev/ppbus/if_plip.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/dev/ppbus/if_plip.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -99,6 +99,7 @@ __FBSDID("$FreeBSD$");
 #include <net/if.h>
 #include <net/if_types.h>
 #include <net/netisr.h>
+#include <net/route.h>
 
 #include <netinet/in.h>
 #include <netinet/in_var.h>
@@ -172,8 +173,7 @@ static u_char *ctxmith;
 /* Functions for the lp# interface */
 static int lpinittables(void);
 static int lpioctl(struct ifnet *, u_long, caddr_t);
-static int lpoutput(struct ifnet *, struct mbuf *, struct sockaddr *,
-	struct rtentry *);
+static int lpoutput(struct ifnet *, struct mbuf *, struct route *);
 static void lpstop(struct lp_data *);
 static void lp_intr(void *);
 static int lp_module_handler(module_t, int, void *);
@@ -677,8 +677,7 @@ lpoutbyte(u_char byte, int spin, device_
 }
 
 static int
-lpoutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-    struct rtentry *rt)
+lpoutput(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	struct lp_data *sc = ifp->if_softc;
 	device_t dev = sc->sc_dev;

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/bpf.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/bpf.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/bpf.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$");
 #endif
 #include <net/bpf_zerocopy.h>
 #include <net/bpfdesc.h>
+#include <net/route.h>
 
 #include <netinet/in.h>
 #include <netinet/if_ether.h>
@@ -822,7 +823,8 @@ bpfwrite(struct cdev *dev, struct uio *u
 	struct mbuf *m, *mc;
 	struct sockaddr dst;
 	int error, hlen;
-
+	struct route ro;
+	
 	error = devfs_get_cdevpriv((void **)&d);
 	if (error != 0)
 		return (error);
@@ -883,7 +885,10 @@ bpfwrite(struct cdev *dev, struct uio *u
 	BPFD_UNLOCK(d);
 #endif
 
-	error = (*ifp->if_output)(ifp, m, &dst, NULL);
+	bcopy(&dst, &ro.ro_dst, sizeof(dst));
+	ro.ro_rt = NULL;
+	ro.ro_lle = NULL;
+	error = (*ifp->if_output)(ifp, m, &ro);
 	if (error)
 		d->bd_wdcount++;
 

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/ethernet.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/ethernet.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/ethernet.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -368,6 +368,7 @@ struct mbuf;
 struct rtentry;
 struct sockaddr;
 struct bpf_if;
+struct route;
 
 extern	uint32_t ether_crc32_le(const uint8_t *, size_t);
 extern	uint32_t ether_crc32_be(const uint8_t *, size_t);
@@ -375,8 +376,7 @@ extern	void ether_demux(struct ifnet *, 
 extern	void ether_ifattach(struct ifnet *, const u_int8_t *);
 extern	void ether_ifdetach(struct ifnet *);
 extern	int  ether_ioctl(struct ifnet *, u_long, caddr_t);
-extern	int  ether_output(struct ifnet *,
-		   struct mbuf *, struct sockaddr *, struct rtentry *);
+extern	int  ether_output(struct ifnet *, struct mbuf *, struct route *);
 extern	int  ether_output_frame(struct ifnet *, struct mbuf *);
 extern	char *ether_sprintf(const u_int8_t *);
 void	ether_vlan_mtap(struct bpf_if *, struct mbuf *,

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_arc.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_arc.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_arc.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -132,8 +132,7 @@ void	arc_ifdetach(struct ifnet *);
 void	arc_storelladdr(struct ifnet *, u_int8_t);
 int	arc_isphds(u_int8_t);
 void	arc_input(struct ifnet *, struct mbuf *);
-int	arc_output(struct ifnet *, struct mbuf *,
-	    struct sockaddr *, struct rtentry *);
+int	arc_output(struct ifnet *, struct mbuf *, struct route *);
 int	arc_ioctl(struct ifnet *, int, caddr_t);
 
 void		arc_frag_init(struct ifnet *);

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_arcsubr.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_arcsubr.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_arcsubr.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -101,8 +101,7 @@ u_int8_t  arcbroadcastaddr = 0;
  * Assumes that ifp is actually pointer to arccom structure.
  */
 int
-arc_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-    struct rtentry *rt0)
+arc_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	struct arc_header	*ah;
 	int			error;
@@ -110,7 +109,9 @@ arc_output(struct ifnet *ifp, struct mbu
 	int			loop_copy = 0;
 	int			isphds;
 	struct llentry		*lle;
-
+	struct sockaddr 	*dst = &ro->ro_dst;
+	struct rtentry 		*rt0 = ro->ro_rt;
+	
 	if (!((ifp->if_flags & IFF_UP) &&
 	    (ifp->if_drv_flags & IFF_DRV_RUNNING)))
 		return(ENETDOWN); /* m, m1 aren't initialized yet */

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_atm.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_atm.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_atm.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -292,8 +292,7 @@ void	atm_ifattach(struct ifnet *);
 void	atm_ifdetach(struct ifnet *);
 void	atm_input(struct ifnet *, struct atm_pseudohdr *,
 	    struct mbuf *, void *);
-int	atm_output(struct ifnet *, struct mbuf *, struct sockaddr *, 
-	    struct rtentry *);
+int	atm_output(struct ifnet *, struct mbuf *, struct route *);
 struct atmio_vcctable *atm_getvccs(struct atmio_vcc **, u_int, u_int,
 	    struct mtx *, int);
 

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_atmsubr.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_atmsubr.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_atmsubr.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -122,8 +122,7 @@ MALLOC_DEFINE(M_IFATM, "ifatm", "atm int
  *		rt0 must also be NULL.
  */
 int
-atm_output(struct ifnet *ifp, struct mbuf *m0, struct sockaddr *dst,
-    struct rtentry *rt0)
+atm_output(struct ifnet *ifp, struct mbuf *m0, struct route *ro)
 {
 	u_int16_t etype = 0;			/* if using LLC/SNAP */
 	int error = 0, sz;
@@ -132,6 +131,8 @@ atm_output(struct ifnet *ifp, struct mbu
 	struct atmllc *atmllc;
 	struct atmllc *llc_hdr = NULL;
 	u_int32_t atm_flags;
+	struct sockaddr *dst = &ro->ro_dst;
+	struct rtentry *rt0 = ro->ro_rt;
 
 #ifdef MAC
 	error = mac_ifnet_check_transmit(ifp, m);

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_disc.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_disc.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_disc.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -65,8 +65,7 @@ struct disc_softc {
 	struct ifnet *sc_ifp;
 };
 
-static int	discoutput(struct ifnet *, struct mbuf *,
-		    struct sockaddr *, struct rtentry *);
+static int	discoutput(struct ifnet *, struct mbuf *, struct route *);
 static void	discrtrequest(int, struct rtentry *, struct rt_addrinfo *);
 static int	discioctl(struct ifnet *, u_long, caddr_t);
 static int	disc_clone_create(struct if_clone *, int, caddr_t);
@@ -155,13 +154,13 @@ static moduledata_t disc_mod = {
 DECLARE_MODULE(if_disc, disc_mod, SI_SUB_PSEUDO, SI_ORDER_ANY);
 
 static int
-discoutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-    struct rtentry *rt)
+discoutput(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	u_int32_t af;
+	struct sockaddr *dst = &ro->ro_dst;
+	
 
 	M_ASSERTPKTHDR(m);
-
 	/* BPF writes need to be handled specially. */
 	if (dst->sa_family == AF_UNSPEC) {
 		bcopy(dst->sa_data, &af, sizeof(af));

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_enc.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_enc.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_enc.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -84,8 +84,7 @@ struct enc_softc {
 };
 
 static int	enc_ioctl(struct ifnet *, u_long, caddr_t);
-static int	enc_output(struct ifnet *ifp, struct mbuf *m,
-		    struct sockaddr *dst, struct rtentry *rt);
+static int	enc_output(struct ifnet *ifp, struct mbuf *m, struct route *ro);
 static int	enc_clone_create(struct if_clone *, int, caddr_t);
 static void	enc_clone_destroy(struct ifnet *);
 
@@ -184,8 +183,7 @@ static moduledata_t enc_mod = {
 DECLARE_MODULE(enc, enc_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY);
 
 static int
-enc_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-    struct rtentry *rt)
+enc_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	m_freem(m);
 	return (0);

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_ethersubr.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_ethersubr.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_ethersubr.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -162,18 +162,20 @@ static int ether_ipfw;
  * packet leaves a multiple of 512 bytes of data in remainder.
  */
 int
-ether_output(struct ifnet *ifp, struct mbuf *m,
-	struct sockaddr *dst, struct rtentry *rt0)
+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;
+	struct sockaddr *dst = &ro->ro_dst;
+	struct rtentry *rt0 = ro->ro_rt;
 	int hlen;	/* link layer header length */
 
+
 #ifdef MAC
 	error = mac_ifnet_check_transmit(ifp, m);
 	if (error)
@@ -191,7 +193,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);
@@ -226,7 +231,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_merge/sys/net/if_faith.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_faith.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_faith.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -87,8 +87,7 @@ struct faith_softc {
 };
 
 static int faithioctl(struct ifnet *, u_long, caddr_t);
-int faithoutput(struct ifnet *, struct mbuf *, struct sockaddr *,
-	struct rtentry *);
+int faithoutput(struct ifnet *, struct mbuf *, struct route *);
 static void faithrtrequest(int, struct rtentry *, struct rt_addrinfo *);
 #ifdef INET6
 static int faithprefix(struct in6_addr *);
@@ -188,14 +187,15 @@ faith_clone_destroy(ifp)
 }
 
 int
-faithoutput(ifp, m, dst, rt)
+faithoutput(ifp, m, ro)
 	struct ifnet *ifp;
 	struct mbuf *m;
-	struct sockaddr *dst;
-	struct rtentry *rt;
+	struct route *ro;
 {
 	int isr;
 	u_int32_t af;
+	struct sockaddr *dst = &ro->ro_dst;
+	struct rtentry *rt = ro->ro_rt;
 
 	M_ASSERTPKTHDR(m);
 

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_fddisubr.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_fddisubr.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_fddisubr.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -97,8 +97,7 @@ static const u_char fddibroadcastaddr[FD
 
 static int fddi_resolvemulti(struct ifnet *, struct sockaddr **,
 			      struct sockaddr *);
-static int fddi_output(struct ifnet *, struct mbuf *, struct sockaddr *,
-		       struct rtentry *); 
+static int fddi_output(struct ifnet *, struct mbuf *, struct route *);
 static void fddi_input(struct ifnet *ifp, struct mbuf *m);
 
 #define	senderr(e)	do { error = (e); goto bad; } while (0)
@@ -111,17 +110,18 @@ static void fddi_input(struct ifnet *ifp
  * Assumes that ifp is actually pointer to arpcom structure.
  */
 static int
-fddi_output(ifp, m, dst, rt0)
+fddi_output(ifp, m, ro)
 	struct ifnet *ifp;
 	struct mbuf *m;
-	struct sockaddr *dst;
-	struct rtentry *rt0;
+	struct route *ro;
 {
 	u_int16_t type;
 	int loop_copy = 0, error = 0, hdrcmplt = 0;
  	u_char esrc[FDDI_ADDR_LEN], edst[FDDI_ADDR_LEN];
 	struct fddi_header *fh;
 	struct llentry *lle;
+	struct sockaddr *dst = &ro->ro_dst;
+	struct rtentry *rt0 = ro->ro_rt;
 
 #ifdef MAC
 	error = mac_ifnet_check_transmit(ifp, m);

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_fwsubr.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_fwsubr.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_fwsubr.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -76,8 +76,7 @@ struct fw_hwaddr firewire_broadcastaddr 
 };
 
 static int
-firewire_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-    struct rtentry *rt0)
+firewire_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	struct fw_com *fc = IFP2FWC(ifp);
 	int error, type;
@@ -89,8 +88,10 @@ firewire_output(struct ifnet *ifp, struc
 	struct mbuf *mtail;
 	int unicast, dgl, foff;
 	static int next_dgl;
-	struct llentry *lle;
-
+	struct llentry *lle = ro->ro_lle;
+	struct rtentry *rt0 = ro->ro_rt;
+	struct sockaddr *dst = &ro->ro_dst;
+	
 #ifdef MAC
 	error = mac_ifnet_check_transmit(ifp, m);
 	if (error)

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_gif.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_gif.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_gif.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -369,17 +369,19 @@ gif_start(struct ifnet *ifp)
 {
 	struct gif_softc *sc;
 	struct mbuf *m;
+	struct route ro;
 
 	sc = ifp->if_softc;
-
+	bcopy(sc->gif_pdst, &ro.ro_dst, sizeof(sc->gif_pdst));
+	ro.ro_rt = NULL;
+	ro.ro_lle = NULL;
 	ifp->if_drv_flags |= IFF_DRV_OACTIVE;
 	for (;;) {
 		IFQ_DEQUEUE(&ifp->if_snd, m);
 		if (m == 0)
 			break;
 
-		gif_output(ifp, m, sc->gif_pdst, NULL);
-
+		gif_output(ifp, m, &ro);
 	}
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 
@@ -387,11 +389,10 @@ gif_start(struct ifnet *ifp)
 }
 
 int
-gif_output(ifp, m, dst, rt)
+gif_output(ifp, m, ro)
 	struct ifnet *ifp;
 	struct mbuf *m;
-	struct sockaddr *dst;
-	struct rtentry *rt;	/* added in net2 */
+	struct route *ro;
 {
 	INIT_VNET_GIF(ifp->if_vnet);
 	struct gif_softc *sc = ifp->if_softc;
@@ -399,6 +400,7 @@ gif_output(ifp, m, dst, rt)
 	int error = 0;
 	int gif_called;
 	u_int32_t af;
+	struct sockaddr *dst = &ro->ro_dst;
 
 #ifdef MAC
 	error = mac_ifnet_check_transmit(ifp, m);

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_gif.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_gif.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_gif.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -103,8 +103,7 @@ struct etherip_header {
 
 /* Prototypes */
 void gif_input(struct mbuf *, int, struct ifnet *);
-int gif_output(struct ifnet *, struct mbuf *, struct sockaddr *,
-	       struct rtentry *);
+int gif_output(struct ifnet *, struct mbuf *, struct route *ro);
 int gif_ioctl(struct ifnet *, u_long, caddr_t);
 int gif_set_tunnel(struct ifnet *, struct sockaddr *, struct sockaddr *);
 void gif_delete_tunnel(struct ifnet *);

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_gre.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_gre.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_gre.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -109,8 +109,7 @@ struct gre_softc_head gre_softc_list;
 static int	gre_clone_create(struct if_clone *, int, caddr_t);
 static void	gre_clone_destroy(struct ifnet *);
 static int	gre_ioctl(struct ifnet *, u_long, caddr_t);
-static int	gre_output(struct ifnet *, struct mbuf *, struct sockaddr *,
-		    struct rtentry *rt);
+static int	gre_output(struct ifnet *, struct mbuf *, struct route *);
 
 IFC_SIMPLE_DECLARE(gre, 0);
 
@@ -239,8 +238,7 @@ gre_clone_destroy(ifp)
  * given by sc->g_proto. See also RFC 1701 and RFC 2004
  */
 static int
-gre_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-	   struct rtentry *rt)
+gre_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 #ifdef INET6
 	INIT_VNET_INET(ifp->if_vnet);
@@ -255,6 +253,7 @@ gre_output(struct ifnet *ifp, struct mbu
 	struct mobile_h mob_h;
 	u_int32_t af;
 	int extra = 0;
+	struct sockaddr *dst = &ro->ro_dst;
 
 	/*
 	 * gre may cause infinite recursion calls when misconfigured.

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_iso88025subr.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_iso88025subr.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_iso88025subr.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -232,11 +232,10 @@ iso88025_ioctl(struct ifnet *ifp, int co
  * ISO88025 encapsulation
  */
 int
-iso88025_output(ifp, m, dst, rt0)
+iso88025_output(ifp, m, ro)
 	struct ifnet *ifp;
 	struct mbuf *m;
-	struct sockaddr *dst;
-	struct rtentry *rt0;
+	struct route *ro;
 {
 	u_int16_t snap_type = 0;
 	int loop_copy = 0, error = 0, rif_len = 0;
@@ -245,12 +244,16 @@ iso88025_output(ifp, m, dst, rt0)
 	struct iso88025_header gen_th;
 	struct sockaddr_dl *sdl = NULL;
 	struct llentry *lle;
+	struct sockaddr *dst;
+	struct rtentry *rt0;
 
 #ifdef MAC
 	error = mac_ifnet_check_transmit(ifp, m);
 	if (error)
 		senderr(error);
 #endif
+	rt0 = ro->ro_rt;
+	dst = &ro->ro_dst;
 
 	if (ifp->if_flags & IFF_MONITOR)
 		senderr(ENETDOWN);
@@ -628,8 +631,9 @@ iso88025_input(ifp, m)
 		case LLC_TEST:
 		case LLC_TEST_P:
 		{
-			struct sockaddr sa;
+			struct sockaddr *sa;
 			struct arpcom *ac;
+			struct route ro;
 			struct iso88025_sockaddr_data *th2;
 			int i;
 			u_char c;
@@ -646,8 +650,9 @@ iso88025_input(ifp, m)
 				bcopy((caddr_t)IF_LLADDR(ifp),
 				      (caddr_t)th->iso88025_dhost,
 					ISO88025_ADDR_LEN);
-			sa.sa_family = AF_UNSPEC;
-			sa.sa_len = sizeof(sa);
+			sa = &ro.ro_dst;
+			sa->sa_family = AF_UNSPEC;
+			sa->sa_len = sizeof(*sa);
 			th2 = (struct iso88025_sockaddr_data *)sa.sa_data;
 			for (i = 0; i < ISO88025_ADDR_LEN; i++) {
 				th2->ether_shost[i] = c = th->iso88025_dhost[i];
@@ -657,7 +662,7 @@ iso88025_input(ifp, m)
 			}
 			th2->ac = TR_AC;
 			th2->fc = TR_LLC_FRAME;
-			ifp->if_output(ifp, m, &sa, NULL);
+			ifp->if_output(ifp, m, &ro);
 			return;
 		}
 		default:

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_lagg.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_lagg.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_lagg.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$");
 #include <net/if_types.h>
 #include <net/if_var.h>
 #include <net/bpf.h>
+#include <net/route.h>
 
 #ifdef INET
 #include <netinet/in.h>
@@ -92,8 +93,7 @@ static struct mbuf *lagg_input(struct if
 static void	lagg_linkstate(struct lagg_softc *);
 static void	lagg_port_state(struct ifnet *, int);
 static int	lagg_port_ioctl(struct ifnet *, u_long, caddr_t);
-static int	lagg_port_output(struct ifnet *, struct mbuf *,
-		    struct sockaddr *, struct rtentry *);
+static int	lagg_port_output(struct ifnet *, struct mbuf *, struct route *ro);
 static void	lagg_port_ifdetach(void *arg __unused, struct ifnet *);
 static int	lagg_port_checkstacking(struct lagg_softc *);
 static void	lagg_port2req(struct lagg_port *, struct lagg_reqport *);
@@ -675,11 +675,11 @@ fallback:
 }
 
 static int
-lagg_port_output(struct ifnet *ifp, struct mbuf *m,
-	struct sockaddr *dst, struct rtentry *rt0)
+lagg_port_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	struct lagg_port *lp = ifp->if_lagg;
 	struct ether_header *eh;
+	struct sockaddr *dst = &ro->ro_dst;
 	short type = 0;
 
 	switch (dst->sa_family) {
@@ -696,7 +696,7 @@ lagg_port_output(struct ifnet *ifp, stru
 	 */
 	switch (ntohs(type)) {
 		case ETHERTYPE_PAE:	/* EAPOL PAE/802.1x */
-			return ((*lp->lp_output)(ifp, m, dst, rt0));
+			return ((*lp->lp_output)(ifp, m, ro));
 	}
 
 	/* drop any other frames */

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_lagg.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_lagg.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_lagg.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -217,8 +217,7 @@ struct lagg_port {
 
 	/* Redirected callbacks */
 	int	(*lp_ioctl)(struct ifnet *, u_long, caddr_t);
-	int	(*lp_output)(struct ifnet *, struct mbuf *, struct sockaddr *,
-		     struct rtentry *);
+	int	(*lp_output)(struct ifnet *, struct mbuf *, struct route *);
 
 	SLIST_ENTRY(lagg_port)		lp_entries;
 };

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_loop.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_loop.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_loop.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -96,8 +96,7 @@
 
 int		loioctl(struct ifnet *, u_long, caddr_t);
 static void	lortrequest(int, struct rtentry *, struct rt_addrinfo *);
-int		looutput(struct ifnet *ifp, struct mbuf *m,
-		    struct sockaddr *dst, struct rtentry *rt);
+int		looutput(struct ifnet *ifp, struct mbuf *m, struct route *ro);
 static int	lo_clone_create(struct if_clone *, int, caddr_t);
 static void	lo_clone_destroy(struct ifnet *);
 
@@ -176,13 +175,14 @@ static moduledata_t loop_mod = {
 DECLARE_MODULE(loop, loop_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY);
 
 int
-looutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst,
-    struct rtentry *rt)
+looutput(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	u_int32_t af;
 #ifdef MAC
 	int error;
 #endif
+	struct sockaddr *dst = &ro->ro_dst;
+	struct rtentry *rt = ro->ro_rt;
 
 	M_ASSERTPKTHDR(m); /* check if we have the packet header */
 

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_spppsubr.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_spppsubr.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_spppsubr.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -262,9 +262,7 @@ static const u_short interactive_ports[8
 	struct ifnet *ifp = SP2IFP(sp);				\
 	int debug = ifp->if_flags & IFF_DEBUG
 
-static int sppp_output(struct ifnet *ifp, struct mbuf *m,
-		       struct sockaddr *dst, struct rtentry *rt);
-
+static int sppp_output(struct ifnet *ifp, struct mbuf *m, struct route *ro);
 static void sppp_cisco_send(struct sppp *sp, int type, long par1, long par2);
 static void sppp_cisco_input(struct sppp *sp, struct mbuf *m);
 
@@ -785,8 +783,7 @@ sppp_ifstart(struct ifnet *ifp)
  * Enqueue transmit packet.
  */
 static int
-sppp_output(struct ifnet *ifp, struct mbuf *m,
-	    struct sockaddr *dst, struct rtentry *rt)
+sppp_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	struct sppp *sp = IFP2SP(ifp);
 	struct ppp_header *h;
@@ -796,6 +793,7 @@ sppp_output(struct ifnet *ifp, struct mb
 	int ipproto = PPP_IP;
 #endif
 	int debug = ifp->if_flags & IFF_DEBUG;
+	struct sockaddr *dst = &ro->ro_dst;
 
 	s = splimp();
 	SPPP_LOCK(sp);

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_stf.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_stf.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_stf.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -177,8 +177,7 @@ static char *stfnames[] = {"stf0", "stf"
 static int stfmodevent(module_t, int, void *);
 static int stf_encapcheck(const struct mbuf *, int, int, void *);
 static struct in6_ifaddr *stf_getsrcifa6(struct ifnet *);
-static int stf_output(struct ifnet *, struct mbuf *, struct sockaddr *,
-	struct rtentry *);
+static int stf_output(struct ifnet *, struct mbuf *, struct route *);
 static int isrfc1918addr(struct in_addr *);
 static int stf_checkaddr4(struct stf_softc *, struct in_addr *,
 	struct ifnet *);
@@ -403,11 +402,10 @@ stf_getsrcifa6(ifp)
 }
 
 static int
-stf_output(ifp, m, dst, rt)
+stf_output(ifp, m, ro)
 	struct ifnet *ifp;
 	struct mbuf *m;
-	struct sockaddr *dst;
-	struct rtentry *rt;
+	struct route *ro;
 {
 	struct stf_softc *sc;
 	struct sockaddr_in6 *dst6;
@@ -415,6 +413,7 @@ stf_output(ifp, m, dst, rt)
 	struct in_addr in4;
 	caddr_t ptr;
 	struct sockaddr_in *dst4;
+	struct sockaddr *dst;
 	u_int8_t tos;
 	struct ip *ip;
 	struct ip6_hdr *ip6;
@@ -431,6 +430,7 @@ stf_output(ifp, m, dst, rt)
 #endif
 
 	sc = ifp->if_softc;
+	dst = &ro->ro_dst;
 	dst6 = (struct sockaddr_in6 *)dst;
 
 	/* just in case */

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_tun.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_tun.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_tun.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -128,8 +128,7 @@ static void	tuncreate(const char *name, 
 static int	tunifioctl(struct ifnet *, u_long, caddr_t);
 static int	tuninit(struct ifnet *);
 static int	tunmodevent(module_t, int, void *);
-static int	tunoutput(struct ifnet *, struct mbuf *, struct sockaddr *,
-		    struct rtentry *rt);
+static int	tunoutput(struct ifnet *, struct mbuf *, struct route *ro);
 static void	tunstart(struct ifnet *);
 
 static int	tun_clone_create(struct if_clone *, int, caddr_t);
@@ -590,14 +589,14 @@ static int
 tunoutput(
 	struct ifnet *ifp,
 	struct mbuf *m0,
-	struct sockaddr *dst,
-	struct rtentry *rt)
-{
+	struct route *ro)
+{	
 	struct tun_softc *tp = ifp->if_softc;
 	u_short cached_tun_flags;
 	int error;
 	u_int32_t af;
-
+	struct sockaddr *dst = &ro->ro_dst;
+	
 	TUNDEBUG (ifp, "tunoutput\n");
 
 #ifdef MAC

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/if_var.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/if_var.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/if_var.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -70,6 +70,7 @@ struct	socket;
 struct	ether_header;
 struct	carp_if;
 struct  ifvlantrunk;
+struct	route;
 #endif
 
 #include <sys/queue.h>		/* get TAILQ macros */
@@ -148,8 +149,7 @@ struct ifnet {
 	int	if_amcount;		/* number of all-multicast requests */
 /* procedure handles */
 	int	(*if_output)		/* output routine (enqueue) */
-		(struct ifnet *, struct mbuf *, struct sockaddr *,
-		     struct rtentry *);
+		(struct ifnet *, struct mbuf *, struct route *);
 	void	(*if_input)		/* input routine (from h/w driver) */
 		(struct ifnet *, struct mbuf *);
 	void	(*if_start)		/* initiate output routine */

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/iso88025.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/iso88025.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/iso88025.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -165,8 +165,7 @@ struct	iso88025_addr {
 void	iso88025_ifattach	(struct ifnet *, const u_int8_t *, int);
 void	iso88025_ifdetach	(struct ifnet *, int);
 int	iso88025_ioctl		(struct ifnet *, int , caddr_t );
-int	iso88025_output		(struct ifnet *, struct mbuf *, struct sockaddr *,
-				 struct rtentry *);
+int	iso88025_output		(struct ifnet *, struct mbuf *, struct route *ro);
 void	iso88025_input		(struct ifnet *, struct mbuf *);
 
 #endif

Modified: user/kmacy/HEAD_fast_net_merge/sys/net/route.h
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net/route.h	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net/route.h	Wed Mar  4 20:58:22 2009	(r189372)
@@ -41,9 +41,10 @@
  */
 
 /*
- * A route consists of a destination address and a reference
- * to a routing entry.  These are often held by protocols
- * in their control blocks, e.g. inpcb.
+ * A route consists of a destination address, a reference
+ * to a routing entry, and a reference to an llentry.  
+ * These are often held by protocols in their control
+ * blocks, e.g. inpcb.
  */
 struct route {
 	struct	sockaddr ro_dst;

Modified: user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -216,8 +216,7 @@ null_update_promisc(struct ifnet *ifp)
 }
 
 static int
-null_output(struct ifnet *ifp, struct mbuf *m,
-	struct sockaddr *dst, struct rtentry *rt0)
+null_output(struct ifnet *ifp, struct mbuf *m, struct route *ro)
 {
 	if_printf(ifp, "discard raw packet\n");
 	m_freem(m);

Modified: user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211_output.c
==============================================================================
--- user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211_output.c	Wed Mar  4 20:54:42 2009	(r189371)
+++ user/kmacy/HEAD_fast_net_merge/sys/net80211/ieee80211_output.c	Wed Mar  4 20:58:22 2009	(r189372)
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
 #include <net/if_llc.h>
 #include <net/if_media.h>
 #include <net/if_vlan_var.h>
+#include <net/route.h>
 
 #include <net80211/ieee80211_var.h>
 #include <net80211/ieee80211_regdomain.h>
@@ -289,13 +290,13 @@ ieee80211_start(struct ifnet *ifp)
  * will go away when the virtual ap support comes in.
  */
 int

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-user mailing list