From owner-svn-src-user@FreeBSD.ORG Tue Jun 19 00:41:30 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2CB02106564A; Tue, 19 Jun 2012 00:41:30 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0C38B8FC08; Tue, 19 Jun 2012 00:41:30 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q5J0fTlx010796; Tue, 19 Jun 2012 00:41:29 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q5J0fTPi010785; Tue, 19 Jun 2012 00:41:29 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201206190041.q5J0fTPi010785@svn.freebsd.org> From: Navdeep Parhar Date: Tue, 19 Jun 2012 00:41:29 +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: r237246 - in user/np/toe_iwarp/sys: net netinet ofed/include/net 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: Tue, 19 Jun 2012 00:41:30 -0000 Author: np Date: Tue Jun 19 00:41:29 2012 New Revision: 237246 URL: http://svn.freebsd.org/changeset/base/237246 Log: - Retire arp_update_event. - style(9) fixes. - More detailed comments in netinet/toecore.h Modified: user/np/toe_iwarp/sys/net/if_var.h user/np/toe_iwarp/sys/net/if_vlan.c user/np/toe_iwarp/sys/netinet/if_ether.c user/np/toe_iwarp/sys/netinet/if_ether.h user/np/toe_iwarp/sys/netinet/in.c user/np/toe_iwarp/sys/netinet/tcp_offload.c user/np/toe_iwarp/sys/netinet/tcp_offload.h user/np/toe_iwarp/sys/netinet/toecore.c user/np/toe_iwarp/sys/netinet/toecore.h user/np/toe_iwarp/sys/ofed/include/net/netevent.h Modified: user/np/toe_iwarp/sys/net/if_var.h ============================================================================== --- user/np/toe_iwarp/sys/net/if_var.h Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/net/if_var.h Tue Jun 19 00:41:29 2012 (r237246) @@ -209,8 +209,6 @@ struct ifnet { void *if_pspare[8]; /* 1 netmap, 7 TDB */ }; -#define TOEDEV(ifp) ((ifp)->if_llsoftc) - typedef void if_init_f_t(void *); /* @@ -714,6 +712,8 @@ drbr_inuse(struct ifnet *ifp, struct buf #define IF_MINMTU 72 #define IF_MAXMTU 65535 +#define TOEDEV(ifp) ((ifp)->if_llsoftc) + #endif /* _KERNEL */ /* Modified: user/np/toe_iwarp/sys/net/if_vlan.c ============================================================================== --- user/np/toe_iwarp/sys/net/if_vlan.c Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/net/if_vlan.c Tue Jun 19 00:41:29 2012 (r237246) @@ -1512,7 +1512,7 @@ vlan_capabilities(struct ifvlan *ifv) * changes then IFCAP_VLAN_TOE should be promoted to a full capability * with its own bit. */ -#define IFCAP_VLAN_TOE IFCAP_TOE +#define IFCAP_VLAN_TOE IFCAP_TOE if (p->if_capabilities & IFCAP_VLAN_TOE) ifp->if_capabilities |= p->if_capabilities & IFCAP_TOE; if (p->if_capenable & IFCAP_VLAN_TOE) { Modified: user/np/toe_iwarp/sys/netinet/if_ether.c ============================================================================== --- user/np/toe_iwarp/sys/netinet/if_ether.c Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/netinet/if_ether.c Tue Jun 19 00:41:29 2012 (r237246) @@ -323,7 +323,7 @@ arpresolve(struct ifnet *ifp, struct rte } retry: IF_AFDATA_RLOCK(ifp); - la = *lle = lla_lookup(LLTABLE(ifp), flags, dst); + la = lla_lookup(LLTABLE(ifp), flags, dst); IF_AFDATA_RUNLOCK(ifp); if ((la == NULL) && ((flags & LLE_EXCLUSIVE) == 0) && ((ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) == 0)) { @@ -355,6 +355,7 @@ retry: la->la_preempt--; } + *lle = la; error = 0; goto done; } @@ -736,7 +737,6 @@ match: (void)memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen); la->la_flags |= LLE_VALID; - EVENTHANDLER_INVOKE(arp_update_event, la); EVENTHANDLER_INVOKE(lle_event, la, LLENTRY_RESOLVED); if (!(la->la_flags & LLE_STATIC)) { Modified: user/np/toe_iwarp/sys/netinet/if_ether.h ============================================================================== --- user/np/toe_iwarp/sys/netinet/if_ether.h Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/netinet/if_ether.h Tue Jun 19 00:41:29 2012 (r237246) @@ -122,10 +122,6 @@ void arp_ifinit2(struct ifnet *, struct void arp_ifscrub(struct ifnet *, uint32_t); #include -/* XXX: can be retired once OFED code is updated to use lle_event */ -typedef void (*llevent_arp_update_fn)(void *, struct llentry *); -EVENTHANDLER_DECLARE(arp_update_event, llevent_arp_update_fn); - enum { LLENTRY_RESOLVED, LLENTRY_TIMEDOUT, Modified: user/np/toe_iwarp/sys/netinet/in.c ============================================================================== --- user/np/toe_iwarp/sys/netinet/in.c Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/netinet/in.c Tue Jun 19 00:41:29 2012 (r237246) @@ -1469,7 +1469,6 @@ in_lltable_lookup(struct lltable *llt, u if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) { LLE_WLOCK(lle); lle->la_flags = LLE_DELETED; - EVENTHANDLER_INVOKE(arp_update_event, lle); EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_DELETED); LLE_WUNLOCK(lle); #ifdef DIAGNOSTIC Modified: user/np/toe_iwarp/sys/netinet/tcp_offload.c ============================================================================== --- user/np/toe_iwarp/sys/netinet/tcp_offload.c Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/netinet/tcp_offload.c Tue Jun 19 00:41:29 2012 (r237246) @@ -111,7 +111,7 @@ tcp_offload_input(struct tcpcb *tp, stru { struct toedev *tod = tp->tod; - KASSERT(tod != NULL, ("%s: tp->tod is NULL", __func__)); + KASSERT(tod != NULL, ("%s: tp->tod is NULL, tp %p", __func__, tp)); INP_WLOCK_ASSERT(tp->t_inpcb); tod->tod_input(tod, tp, m); @@ -123,7 +123,7 @@ tcp_offload_output(struct tcpcb *tp) struct toedev *tod = tp->tod; int error, flags; - KASSERT(tod != NULL, ("%s: tp->tod is NULL", __func__)); + KASSERT(tod != NULL, ("%s: tp->tod is NULL, tp %p", __func__, tp)); INP_WLOCK_ASSERT(tp->t_inpcb); flags = tcp_outflags[tp->t_state]; @@ -147,7 +147,7 @@ tcp_offload_rcvd(struct tcpcb *tp) { struct toedev *tod = tp->tod; - KASSERT(tod != NULL, ("%s: tp->tod is NULL", __func__)); + KASSERT(tod != NULL, ("%s: tp->tod is NULL, tp %p", __func__, tp)); INP_WLOCK_ASSERT(tp->t_inpcb); tod->tod_rcvd(tod, tp); @@ -158,7 +158,7 @@ tcp_offload_ctloutput(struct tcpcb *tp, { struct toedev *tod = tp->tod; - KASSERT(tod != NULL, ("%s: tp->tod is NULL", __func__)); + KASSERT(tod != NULL, ("%s: tp->tod is NULL, tp %p", __func__, tp)); INP_WLOCK_ASSERT(tp->t_inpcb); tod->tod_ctloutput(tod, tp, sopt_dir, sopt_name); @@ -169,7 +169,7 @@ tcp_offload_detach(struct tcpcb *tp) { struct toedev *tod = tp->tod; - KASSERT(tod != NULL, ("%s: tp->tod is NULL", __func__)); + KASSERT(tod != NULL, ("%s: tp->tod is NULL, tp %p", __func__, tp)); INP_WLOCK_ASSERT(tp->t_inpcb); tod->tod_pcb_detach(tod, tp); Modified: user/np/toe_iwarp/sys/netinet/tcp_offload.h ============================================================================== --- user/np/toe_iwarp/sys/netinet/tcp_offload.h Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/netinet/tcp_offload.h Tue Jun 19 00:41:29 2012 (r237246) @@ -28,7 +28,7 @@ */ #ifndef _NETINET_TCP_OFFLOAD_H_ -#define _NETINET_TCP_OFFLOAD_H_ +#define _NETINET_TCP_OFFLOAD_H_ #ifndef _KERNEL #error "no user-serviceable parts inside" Modified: user/np/toe_iwarp/sys/netinet/toecore.c ============================================================================== --- user/np/toe_iwarp/sys/netinet/toecore.c Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/netinet/toecore.c Tue Jun 19 00:41:29 2012 (r237246) @@ -28,6 +28,9 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_inet.h" +#include "opt_inet6.h" + #include #include #include @@ -37,17 +40,19 @@ __FBSDID("$FreeBSD$"); #include #include #include + #include #include #include #include #include #include + #include #include +#include #include #include -#include #define TCPSTATES #include #include @@ -59,8 +64,10 @@ __FBSDID("$FreeBSD$"); static struct mtx toedev_lock; static TAILQ_HEAD(, toedev) toedev_list; -static eventhandler_tag listen_start_eh, listen_stop_eh; -static eventhandler_tag lle_event_eh, route_redirect_eh; +static eventhandler_tag listen_start_eh; +static eventhandler_tag listen_stop_eh; +static eventhandler_tag lle_event_eh; +static eventhandler_tag route_redirect_eh; static int toedev_connect(struct toedev *tod __unused, struct socket *so __unused, @@ -176,7 +183,7 @@ toedev_ctloutput(struct toedev *tod __un static void toe_listen_start(struct inpcb *inp, void *arg) { - struct toedev *t = arg, *tod; + struct toedev *t, *tod; struct tcpcb *tp; INP_WLOCK_ASSERT(inp); @@ -190,6 +197,7 @@ toe_listen_start(struct inpcb *inp, void if (tp->t_state != TCPS_LISTEN) return; + t = arg; mtx_lock(&toedev_lock); TAILQ_FOREACH(tod, &toedev_list, link) { if (t == NULL || t == tod) @@ -307,7 +315,7 @@ unregister_toedev(struct toedev *tod) } } KASSERT(registered_toedevs >= 0, - ("%s: registered_toedevs < 0", __func__)); + ("%s: registered_toedevs (%d) < 0", __func__, registered_toedevs)); mtx_unlock(&toedev_lock); return (rc); } @@ -374,9 +382,9 @@ toe_lle_event(void *arg __unused, struct { struct toedev *tod; struct ifnet *ifp; - uint8_t *lladdr; - uint16_t vtag = 0xfff; struct sockaddr *sa; + uint8_t *lladdr; + uint16_t vtag; LLE_WLOCK_ASSERT(lle); @@ -384,7 +392,8 @@ toe_lle_event(void *arg __unused, struct sa = L3_ADDR(lle); KASSERT(sa->sa_family == AF_INET || sa->sa_family == AF_INET6, - ("%s: lle_event but sa !INET && !INET6", __func__)); + ("%s: lle_event %d for lle %p but sa %p !INET && !INET6", + __func__, evt, lle, sa)); /* * Not interested if the interface's TOE capability is not enabled. @@ -397,6 +406,7 @@ toe_lle_event(void *arg __unused, struct if (tod == NULL) return; + vtag = 0xfff; if (evt != LLENTRY_RESOLVED) { /* @@ -426,6 +436,7 @@ static void toe_route_redirect_event(void *arg __unused, struct rtentry *rt0, struct rtentry *rt1, struct sockaddr *sa) { + return; } @@ -442,12 +453,16 @@ toe_l2_resolve(struct toedev *tod, struc int rc; switch (sa->sa_family) { +#ifdef INET case AF_INET: rc = arpresolve(ifp, NULL, NULL, sa, lladdr, &lle); break; +#endif +#ifdef INET6 case AF_INET6: rc = nd6_storelladdr(ifp, NULL, sa, lladdr, &lle); break; +#endif default: return (EPROTONOSUPPORT); } @@ -547,7 +562,7 @@ toecore_mod_handler(module_t mod, int cm if (cmd == MOD_UNLOAD) return (toecore_unload()); - return (0); + return (EOPNOTSUPP); } static moduledata_t mod_data= { Modified: user/np/toe_iwarp/sys/netinet/toecore.h ============================================================================== --- user/np/toe_iwarp/sys/netinet/toecore.h Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/netinet/toecore.h Tue Jun 19 00:41:29 2012 (r237246) @@ -24,11 +24,10 @@ * SUCH DAMAGE. * * $FreeBSD$ - * */ #ifndef _NETINET_TOE_H_ -#define _NETINET_TOE_H_ +#define _NETINET_TOE_H_ #ifndef _KERNEL #error "no user-serviceable parts inside" @@ -42,7 +41,10 @@ struct toedev { TAILQ_ENTRY(toedev) link; /* glue for toedev_list */ void *tod_softc; /* TOE driver private data */ - /* Active open. */ + /* + * Active open. If a failure occurs, it is reported back by the driver + * via toe_connect_failed. + */ int (*tod_connect)(struct toedev *, struct socket *, struct rtentry *, struct sockaddr *); @@ -50,25 +52,38 @@ struct toedev { int (*tod_listen_start)(struct toedev *, struct tcpcb *); int (*tod_listen_stop)(struct toedev *, struct tcpcb *); - /* Frame received by kernel for an offloaded connection */ + /* + * The kernel uses this routine to pass on any frame it receives for an + * offloaded connection to the TOE driver. This is an unusual event. + */ void (*tod_input)(struct toedev *, struct tcpcb *, struct mbuf *); - /* Some data read */ + /* + * This is called by the kernel during pru_rcvd for an offloaded TCP + * connection and provides an opportunity for the TOE driver to manage + * its rx window and credits. + */ void (*tod_rcvd)(struct toedev *, struct tcpcb *); - /* Output data, if any is waiting to be sent out. */ + /* + * Transmit routine. The kernel calls this to have the TOE driver + * evaluate whether there is data to be transmitted, and transmit it. + */ int (*tod_output)(struct toedev *, struct tcpcb *); - /* Immediate teardown, send RST to peer */ + /* Immediate teardown: send RST to peer. */ int (*tod_send_rst)(struct toedev *, struct tcpcb *); - /* Orderly disconnect, send FIN to the peer */ + /* Initiate orderly disconnect by sending FIN to the peer. */ int (*tod_send_fin)(struct toedev *, struct tcpcb *); - /* Kernel is done with the TCP PCB */ + /* Called to indicate that the kernel is done with this TCP PCB. */ void (*tod_pcb_detach)(struct toedev *, struct tcpcb *); - /* Information about an L2 entry is now available. */ + /* + * The kernel calls this once it has information about an L2 entry that + * the TOE driver enquired about previously (via toe_l2_resolve). + */ void (*tod_l2_update)(struct toedev *, struct ifnet *, struct sockaddr *, uint8_t *, uint16_t); @@ -93,13 +108,13 @@ EVENTHANDLER_DECLARE(tcp_offload_listen_ EVENTHANDLER_DECLARE(tcp_offload_listen_stop, tcp_offload_listen_stop_fn); void init_toedev(struct toedev *); -int register_toedev(struct toedev *); -int unregister_toedev(struct toedev *); +int register_toedev(struct toedev *); +int unregister_toedev(struct toedev *); /* - * General interface for looking up L2 information for an IP or IPv6 address. - * If an answer is not available right away then the TOE driver's tod_l2_update - * will be called later. + * General interface for looking up L2 information for an IP address. If an + * answer is not available right away then the TOE driver's tod_l2_update will + * be called later. */ int toe_l2_resolve(struct toedev *, struct ifnet *, struct sockaddr *, uint8_t *, uint16_t *); Modified: user/np/toe_iwarp/sys/ofed/include/net/netevent.h ============================================================================== --- user/np/toe_iwarp/sys/ofed/include/net/netevent.h Mon Jun 18 23:18:49 2012 (r237245) +++ user/np/toe_iwarp/sys/ofed/include/net/netevent.h Tue Jun 19 00:41:29 2012 (r237246) @@ -42,7 +42,7 @@ enum netevent_notif_type { struct llentry; static inline void -_handle_arp_update_event(void *arg, struct llentry *lle) +_handle_arp_update_event(void *arg, struct llentry *lle, int evt __unused) { struct notifier_block *nb; @@ -54,7 +54,7 @@ static inline int register_netevent_notifier(struct notifier_block *nb) { nb->tags[NETEVENT_NEIGH_UPDATE] = EVENTHANDLER_REGISTER( - arp_update_event, _handle_arp_update_event, nb, 0); + lle_event, _handle_arp_update_event, nb, 0); return (0); } @@ -62,8 +62,7 @@ static inline int unregister_netevent_notifier(struct notifier_block *nb) { - EVENTHANDLER_DEREGISTER(arp_update_event, - nb->tags[NETEVENT_NEIGH_UPDATE]); + EVENTHANDLER_DEREGISTER(lle_event, nb->tags[NETEVENT_NEIGH_UPDATE]); return (0); }