From owner-svn-src-user@FreeBSD.ORG Mon Dec 29 22:30:10 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5C28A106566B; Mon, 29 Dec 2008 22:30:10 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4614D8FC1D; Mon, 29 Dec 2008 22:30:10 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mBTMUADX068609; Mon, 29 Dec 2008 22:30:10 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mBTMU84U068570; Mon, 29 Dec 2008 22:30:08 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812292230.mBTMU84U068570@svn.freebsd.org> From: Kip Macy Date: Mon, 29 Dec 2008 22:30:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r186574 - in user/kmacy/HEAD_fast_net/sys: contrib/ipfilter/netinet contrib/pf/net dev/iicbus dev/lmc dev/ppbus net net80211 netatalk netgraph netgraph/atm netinet netinet6 netipx netnatm X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Dec 2008 22:30:10 -0000 Author: kmacy Date: Mon Dec 29 22:30:08 2008 New Revision: 186574 URL: http://svn.freebsd.org/changeset/base/186574 Log: change if_output signature to allow passing cached lle down to L2 Modified: user/kmacy/HEAD_fast_net/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c user/kmacy/HEAD_fast_net/sys/contrib/pf/net/if_pflog.c user/kmacy/HEAD_fast_net/sys/contrib/pf/net/if_pfsync.c user/kmacy/HEAD_fast_net/sys/contrib/pf/net/pf.c user/kmacy/HEAD_fast_net/sys/dev/iicbus/if_ic.c user/kmacy/HEAD_fast_net/sys/dev/lmc/if_lmc.c user/kmacy/HEAD_fast_net/sys/dev/lmc/if_lmc.h user/kmacy/HEAD_fast_net/sys/dev/ppbus/if_plip.c user/kmacy/HEAD_fast_net/sys/net/bpf.c user/kmacy/HEAD_fast_net/sys/net/ethernet.h user/kmacy/HEAD_fast_net/sys/net/if_arc.h user/kmacy/HEAD_fast_net/sys/net/if_arcsubr.c user/kmacy/HEAD_fast_net/sys/net/if_atm.h user/kmacy/HEAD_fast_net/sys/net/if_atmsubr.c user/kmacy/HEAD_fast_net/sys/net/if_disc.c user/kmacy/HEAD_fast_net/sys/net/if_enc.c user/kmacy/HEAD_fast_net/sys/net/if_ethersubr.c user/kmacy/HEAD_fast_net/sys/net/if_faith.c user/kmacy/HEAD_fast_net/sys/net/if_fddisubr.c user/kmacy/HEAD_fast_net/sys/net/if_fwsubr.c user/kmacy/HEAD_fast_net/sys/net/if_gif.c user/kmacy/HEAD_fast_net/sys/net/if_gif.h user/kmacy/HEAD_fast_net/sys/net/if_gre.c user/kmacy/HEAD_fast_net/sys/net/if_iso88025subr.c user/kmacy/HEAD_fast_net/sys/net/if_lagg.c user/kmacy/HEAD_fast_net/sys/net/if_lagg.h user/kmacy/HEAD_fast_net/sys/net/if_loop.c user/kmacy/HEAD_fast_net/sys/net/if_spppsubr.c user/kmacy/HEAD_fast_net/sys/net/if_stf.c user/kmacy/HEAD_fast_net/sys/net/if_tun.c user/kmacy/HEAD_fast_net/sys/net/if_var.h user/kmacy/HEAD_fast_net/sys/net/iso88025.h user/kmacy/HEAD_fast_net/sys/net/route.h user/kmacy/HEAD_fast_net/sys/net80211/ieee80211.c user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_output.c user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_proto.h user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_var.h user/kmacy/HEAD_fast_net/sys/netatalk/aarp.c user/kmacy/HEAD_fast_net/sys/netatalk/ddp_output.c user/kmacy/HEAD_fast_net/sys/netgraph/atm/ng_atm.c user/kmacy/HEAD_fast_net/sys/netgraph/ng_fec.c user/kmacy/HEAD_fast_net/sys/netgraph/ng_gif.c user/kmacy/HEAD_fast_net/sys/netgraph/ng_iface.c user/kmacy/HEAD_fast_net/sys/netinet/if_ether.c user/kmacy/HEAD_fast_net/sys/netinet/ip_carp.c user/kmacy/HEAD_fast_net/sys/netinet/ip_fastfwd.c user/kmacy/HEAD_fast_net/sys/netinet/ip_output.c user/kmacy/HEAD_fast_net/sys/netinet6/in6.h user/kmacy/HEAD_fast_net/sys/netinet6/ip6_mroute.c user/kmacy/HEAD_fast_net/sys/netinet6/nd6.c user/kmacy/HEAD_fast_net/sys/netipx/ipx_outputfl.c user/kmacy/HEAD_fast_net/sys/netnatm/natm.c Modified: user/kmacy/HEAD_fast_net/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/contrib/ipfilter/netinet/ip_fil_freebsd.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/contrib/pf/net/if_pflog.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/contrib/pf/net/if_pflog.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/contrib/pf/net/if_pflog.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/contrib/pf/net/if_pfsync.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/contrib/pf/net/if_pfsync.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/contrib/pf/net/if_pfsync.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/contrib/pf/net/pf.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/contrib/pf/net/pf.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/contrib/pf/net/pf.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/dev/iicbus/if_ic.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/dev/iicbus/if_ic.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/dev/iicbus/if_ic.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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 void 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/sys/dev/lmc/if_lmc.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/dev/lmc/if_lmc.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/dev/lmc/if_lmc.c Mon Dec 29 22:30:08 2008 (r186574) @@ -114,6 +114,7 @@ # include # include # include +# include # include # include # include @@ -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/sys/dev/lmc/if_lmc.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/dev/lmc/if_lmc.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/dev/lmc/if_lmc.h Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/dev/ppbus/if_plip.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/dev/ppbus/if_plip.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/dev/ppbus/if_plip.c Mon Dec 29 22:30:08 2008 (r186574) @@ -99,6 +99,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -168,8 +169,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 lp_intr(void *); #define DEVTOSOFTC(dev) \ @@ -596,8 +596,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/sys/net/bpf.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/bpf.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/bpf.c Mon Dec 29 22:30:08 2008 (r186574) @@ -73,6 +73,7 @@ __FBSDID("$FreeBSD$"); #endif #include #include +#include #include #include @@ -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/sys/net/ethernet.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/ethernet.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/ethernet.h Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_arc.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_arc.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_arc.h Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_arcsubr.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_arcsubr.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_arcsubr.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_atm.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_atm.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_atm.h Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_atmsubr.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_atmsubr.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_atmsubr.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_disc.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_disc.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_disc.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_enc.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_enc.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_enc.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_ethersubr.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_ethersubr.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_ethersubr.c Mon Dec 29 22:30:08 2008 (r186574) @@ -161,8 +161,7 @@ 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; @@ -171,8 +170,11 @@ ether_output(struct ifnet *ifp, struct m 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) Modified: user/kmacy/HEAD_fast_net/sys/net/if_faith.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_faith.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_faith.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_fddisubr.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_fddisubr.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_fddisubr.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_fwsubr.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_fwsubr.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_fwsubr.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_gif.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_gif.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_gif.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_gif.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_gif.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_gif.h Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_gre.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_gre.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_gre.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_iso88025subr.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_iso88025subr.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_iso88025subr.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_lagg.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_lagg.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_lagg.c Mon Dec 29 22:30:08 2008 (r186574) @@ -50,6 +50,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef INET #include @@ -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/sys/net/if_lagg.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_lagg.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_lagg.h Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_loop.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_loop.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_loop.c Mon Dec 29 22:30:08 2008 (r186574) @@ -92,8 +92,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 *); @@ -172,10 +171,11 @@ 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; + 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/sys/net/if_spppsubr.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_spppsubr.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_spppsubr.c Mon Dec 29 22:30:08 2008 (r186574) @@ -277,9 +277,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); @@ -800,8 +798,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; @@ -811,6 +808,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/sys/net/if_stf.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_stf.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_stf.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_tun.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_tun.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_tun.c Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/if_var.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/if_var.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/if_var.h Mon Dec 29 22:30:08 2008 (r186574) @@ -70,6 +70,7 @@ struct socket; struct ether_header; struct carp_if; struct ifvlantrunk; +struct route; #endif #include /* 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 */ @@ -162,6 +162,10 @@ struct ifnet { (void *); int (*if_resolvemulti) /* validate/resolve multicast */ (struct ifnet *, struct sockaddr **, struct sockaddr *); + void (*if_qflush) /* flush any queues */ + (struct ifnet *); + int (*if_transmit) /* initiate output routine */ + (struct ifnet *, struct mbuf *); struct ifaddr *if_addr; /* pointer to link-level address */ void *if_llsoftc; /* link layer softc */ int if_drv_flags; /* driver-managed status flags */ @@ -188,10 +192,6 @@ struct ifnet { void *if_pf_kif; void *if_lagg; /* lagg glue */ void *if_pspare[8]; /* TOE 3; vimage 3; general use 4 */ - void (*if_qflush) /* flush any queues */ - (struct ifnet *); - int (*if_transmit) /* initiate output routine */ - (struct ifnet *, struct mbuf *); int if_ispare[2]; /* general use 2 */ }; Modified: user/kmacy/HEAD_fast_net/sys/net/iso88025.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/iso88025.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/iso88025.h Mon Dec 29 22:30:08 2008 (r186574) @@ -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/sys/net/route.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net/route.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net/route.h Mon Dec 29 22:30:08 2008 (r186574) @@ -41,12 +41,14 @@ */ /* - * 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 rtentry *ro_rt; + struct llentry *ro_lle; struct sockaddr ro_dst; }; Modified: user/kmacy/HEAD_fast_net/sys/net80211/ieee80211.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net80211/ieee80211.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net80211/ieee80211.c Mon Dec 29 22:30:08 2008 (r186574) @@ -190,8 +190,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/sys/net80211/ieee80211_output.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_output.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_output.c Mon Dec 29 22:30:08 2008 (r186574) @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -286,13 +287,13 @@ ieee80211_start(struct ifnet *ifp) * will go away when the virtual ap support comes in. */ int -ieee80211_output(struct ifnet *ifp, struct mbuf *m, - struct sockaddr *dst, struct rtentry *rt0) +ieee80211_output(struct ifnet *ifp, struct mbuf *m, struct route *ro) { #define senderr(e) do { error = (e); goto bad;} while (0) struct ieee80211_node *ni = NULL; struct ieee80211vap *vap; struct ieee80211_frame *wh; + struct sockaddr *dst = &ro->ro_dst; int error; if (ifp->if_drv_flags & IFF_DRV_OACTIVE) { @@ -313,7 +314,7 @@ ieee80211_output(struct ifnet *ifp, stru * a raw 802.11 frame. */ if (dst->sa_family != AF_IEEE80211) - return vap->iv_output(ifp, m, dst, rt0); + return vap->iv_output(ifp, m, ro); #ifdef MAC error = mac_check_ifnet_transmit(ifp, m); if (error) Modified: user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_proto.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_proto.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_proto.h Mon Dec 29 22:30:08 2008 (r186574) @@ -69,8 +69,7 @@ int ieee80211_mgmt_output(struct ieee802 struct ieee80211_bpf_params *); int ieee80211_raw_xmit(struct ieee80211_node *, struct mbuf *, const struct ieee80211_bpf_params *); -int ieee80211_output(struct ifnet *, struct mbuf *, - struct sockaddr *, struct rtentry *); +int ieee80211_output(struct ifnet *, struct mbuf *, struct route *ro); void ieee80211_start(struct ifnet *); int ieee80211_send_nulldata(struct ieee80211_node *); int ieee80211_classify(struct ieee80211_node *, struct mbuf *m); Modified: user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_var.h ============================================================================== --- user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_var.h Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/net80211/ieee80211_var.h Mon Dec 29 22:30:08 2008 (r186574) @@ -418,7 +418,7 @@ struct ieee80211vap { enum ieee80211_state, int); /* 802.3 output method for raw frame xmit */ int (*iv_output)(struct ifnet *, struct mbuf *, - struct sockaddr *, struct rtentry *); + struct route *); }; MALLOC_DECLARE(M_80211_VAP); Modified: user/kmacy/HEAD_fast_net/sys/netatalk/aarp.c ============================================================================== --- user/kmacy/HEAD_fast_net/sys/netatalk/aarp.c Mon Dec 29 22:07:18 2008 (r186573) +++ user/kmacy/HEAD_fast_net/sys/netatalk/aarp.c Mon Dec 29 22:30:08 2008 (r186574) @@ -62,6 +62,7 @@ #include #include +#include #include #undef s_net @@ -170,8 +171,12 @@ aarpwhohas(struct ifnet *ifp, struct soc struct ether_aarp *ea; struct at_ifaddr *aa; struct llc *llc; - struct sockaddr sa; - + struct sockaddr *sa; + struct route ro; + sa = &ro.ro_dst; + *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***