From owner-svn-src-projects@FreeBSD.ORG Wed Dec 31 16:43:20 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id EB6D7696; Wed, 31 Dec 2014 16:43:20 +0000 (UTC) Received: from mail-wi0-x235.google.com (mail-wi0-x235.google.com [IPv6:2a00:1450:400c:c05::235]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 702F9383C; Wed, 31 Dec 2014 16:43:20 +0000 (UTC) Received: by mail-wi0-f181.google.com with SMTP id r20so25813441wiv.8; Wed, 31 Dec 2014 08:43:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=SGiit3e98Jr1eCnuTxfD/Dn6ME5Q/+weEWijephNXlI=; b=E06i8dB+jsoAJKGM7OmzTuTbCYjeC7qSO8E2NrOy4pkdO29ZE/P1l1dkJzrXyEm6Hg rmJMzc/7Xqsi2lzdaG0W/pDsbj8E9Cu9PS8rAWrEvvLEhvC8/EZ6v6Xf7NaNRZxk+TCi qiKVFAkQRLYFmmcPmH23faaGnm5R27+pVzFVc8/RZ12PH/TY70F07PuDzAI40/z38P5Q Fw/ZIoCjWhg20rYzrqJ+Xt1B/TyXAxHbSGhmb62d0e3YGLfzIV79aKoCDle4NypYgHsY 8O3mSo0iHNNDwqLVyk7DWUSsaOqv3XMAJjXVaHI1v30dbhBxQEDy7G80AeqNnyJSFbe7 dZzg== MIME-Version: 1.0 X-Received: by 10.180.87.36 with SMTP id u4mr114654318wiz.20.1420044191647; Wed, 31 Dec 2014 08:43:11 -0800 (PST) Sender: adrian.chadd@gmail.com Received: by 10.216.106.195 with HTTP; Wed, 31 Dec 2014 08:43:11 -0800 (PST) In-Reply-To: <201412310952.sBV9qws7043801@svn.freebsd.org> References: <201412310952.sBV9qws7043801@svn.freebsd.org> Date: Wed, 31 Dec 2014 08:43:11 -0800 X-Google-Sender-Auth: AqHbUFLWrPdSkmetpg24EHlDWNo Message-ID: Subject: Re: svn commit: r276461 - projects/ifnet/sys/netinet From: Adrian Chadd To: Gleb Smirnoff Content-Type: text/plain; charset=UTF-8 Cc: svn-src-projects@freebsd.org, "src-committers@freebsd.org" X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Dec 2014 16:43:21 -0000 Hi, I like the accessor macro methods for various bits here. How about we stage out these simpleish changes into something that lands in -HEAD sooner rather than later? (There are discussions to be had about the attach API; I'm mostly worried about how every new optional field may end up needing a KBI change to do rather than right now where new optional fields end up having defaults that the driver doesn't have to implement itself.) -adrian On 31 December 2014 at 01:52, Gleb Smirnoff wrote: > Author: glebius > Date: Wed Dec 31 09:52:57 2014 > New Revision: 276461 > URL: https://svnweb.freebsd.org/changeset/base/276461 > > Log: > - Mechanically convert access to different ifnet fields that moved to ifdriver > to inline functions. > - Other small changes to adopt to new ifnet world order. > > Sponsored by: Netflix > Sponsored by: Nginx, Inc. > > Modified: > projects/ifnet/sys/netinet/if_ether.c > projects/ifnet/sys/netinet/in.c > projects/ifnet/sys/netinet/ip_fastfwd.c > projects/ifnet/sys/netinet/ip_output.c > projects/ifnet/sys/netinet/sctp_bsd_addr.c > projects/ifnet/sys/netinet/sctp_os_bsd.h > projects/ifnet/sys/netinet/tcp_input.c > projects/ifnet/sys/netinet/tcp_lro.c > projects/ifnet/sys/netinet/tcp_subr.c > projects/ifnet/sys/netinet/tcp_var.h > > Modified: projects/ifnet/sys/netinet/if_ether.c > ============================================================================== > --- projects/ifnet/sys/netinet/if_ether.c Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/if_ether.c Wed Dec 31 09:52:57 2014 (r276461) > @@ -254,12 +254,12 @@ arprequest(struct ifnet *ifp, const stru > } > } > if (enaddr == NULL) > - enaddr = carpaddr ? carpaddr : (u_char *)IF_LLADDR(ifp); > + enaddr = carpaddr ? carpaddr : (u_char *)if_lladdr(ifp); > > if ((m = m_gethdr(M_NOWAIT, MT_DATA)) == NULL) > return; > m->m_len = sizeof(*ah) + 2 * sizeof(struct in_addr) + > - 2 * ifp->if_addrlen; > + 2 * if_addrlen(ifp); > m->m_pkthdr.len = m->m_len; > MH_ALIGN(m, m->m_len); > ah = mtod(m, struct arphdr *); > @@ -268,7 +268,7 @@ arprequest(struct ifnet *ifp, const stru > mac_netinet_arp_send(ifp, m); > #endif > ah->ar_pro = htons(ETHERTYPE_IP); > - ah->ar_hln = ifp->if_addrlen; /* hardware address length */ > + ah->ar_hln = if_addrlen(ifp); /* hardware address length */ > ah->ar_pln = sizeof(struct in_addr); /* protocol address length */ > ah->ar_op = htons(ARPOP_REQUEST); > bcopy(enaddr, ar_sha(ah), ah->ar_hln); > @@ -278,7 +278,7 @@ arprequest(struct ifnet *ifp, const stru > sa.sa_len = 2; > m->m_flags |= M_BCAST; > m_clrprotoflags(m); /* Avoid confusing lower layers. */ > - (*ifp->if_output)(ifp, m, &sa, NULL); > + if_output(ifp, m, &sa, NULL); > ARPSTAT_INC(txrequests); > } > > @@ -313,11 +313,10 @@ arpresolve(struct ifnet *ifp, int is_gw, > if (m != NULL) { > if (m->m_flags & M_BCAST) { > /* broadcast */ > - (void)memcpy(desten, > - ifp->if_broadcastaddr, ifp->if_addrlen); > + memcpy(desten, ifp->if_broadcastaddr, if_addrlen(ifp)); > return (0); > } > - if (m->m_flags & M_MCAST && ifp->if_type != IFT_ARCNET) { > + if (m->m_flags & M_MCAST && if_type(ifp) != IFT_ARCNET) { > /* multicast */ > ETHER_MAP_IP_MULTICAST(&SIN(dst)->sin_addr, desten); > return (0); > @@ -345,7 +344,7 @@ retry: > > if ((la->la_flags & LLE_VALID) && > ((la->la_flags & LLE_STATIC) || la->la_expire > time_uptime)) { > - bcopy(&la->ll_addr, desten, ifp->if_addrlen); > + bcopy(&la->ll_addr, desten, if_addrlen(ifp)); > /* > * If entry has an expiry time and it is approaching, > * see if we need to send an ARP request within this > @@ -556,10 +555,10 @@ in_arpinput(struct mbuf *m) > > if (ifp->if_bridge) > bridged = 1; > - if (ifp->if_type == IFT_BRIDGE) > + if (if_type(ifp) == IFT_BRIDGE) > is_bridge = 1; > > - req_len = arphdr_len2(ifp->if_addrlen, sizeof(struct in_addr)); > + req_len = arphdr_len2(if_addrlen(ifp), sizeof(struct in_addr)); > if (m->m_len < req_len && (m = m_pullup(m, req_len)) == NULL) { > ARP_LOG(LOG_NOTICE, "runt packet -- m_pullup failed\n"); > return; > @@ -577,8 +576,8 @@ in_arpinput(struct mbuf *m) > } > > if (allow_multicast == 0 && ETHER_IS_MULTICAST(ar_sha(ah))) { > - ARP_LOG(LOG_NOTICE, "%*D is multicast\n", > - ifp->if_addrlen, (u_char *)ar_sha(ah), ":"); > + ARP_LOG(LOG_NOTICE, "%*D is multicast\n", if_addrlen(ifp), > + (u_char *)ar_sha(ah), ":"); > goto drop; > } > > @@ -617,7 +616,7 @@ in_arpinput(struct mbuf *m) > > #define BDG_MEMBER_MATCHES_ARP(addr, ifp, ia) \ > (ia->ia_ifp->if_bridge == ifp->if_softc && \ > - !bcmp(IF_LLADDR(ia->ia_ifp), IF_LLADDR(ifp), ifp->if_addrlen) && \ > + !bcmp(if_lladdr(ia->ia_ifp), if_lladdr(ifp), if_addrlen(ifp)) && \ > addr == ia->ia_addr.sin_addr.s_addr) > /* > * Check the case when bridge shares its MAC address with > @@ -666,13 +665,13 @@ in_arpinput(struct mbuf *m) > IN_IFADDR_RUNLOCK(); > match: > if (!enaddr) > - enaddr = (u_int8_t *)IF_LLADDR(ifp); > + enaddr = (u_int8_t *)if_lladdr(ifp); > carped = (ia->ia_ifa.ifa_carp != NULL); > myaddr = ia->ia_addr.sin_addr; > ifa_free(&ia->ia_ifa); > - if (!bcmp(ar_sha(ah), enaddr, ifp->if_addrlen)) > + if (!bcmp(ar_sha(ah), enaddr, if_addrlen(ifp))) > goto drop; /* it's from me, ignore it. */ > - if (!bcmp(ar_sha(ah), ifp->if_broadcastaddr, ifp->if_addrlen)) { > + if (!bcmp(ar_sha(ah), ifp->if_broadcastaddr, if_addrlen(ifp))) { > ARP_LOG(LOG_NOTICE, "link address is broadcast for IP address " > "%s!\n", inet_ntoa(isaddr)); > goto drop; > @@ -686,7 +685,7 @@ match: > if (!bridged && !carped && isaddr.s_addr == myaddr.s_addr && > myaddr.s_addr != 0) { > ARP_LOG(LOG_ERR, "%*D is using my IP address %s on %s!\n", > - ifp->if_addrlen, (u_char *)ar_sha(ah), ":", > + if_addrlen(ifp), (u_char *)ar_sha(ah), ":", > inet_ntoa(isaddr), ifp->if_xname); > itaddr = myaddr; > ARPSTAT_INC(dupips); > @@ -712,20 +711,20 @@ match: > "but got reply from %*D on %s\n", > inet_ntoa(isaddr), > la->lle_tbl->llt_ifp->if_xname, > - ifp->if_addrlen, (u_char *)ar_sha(ah), ":", > + if_addrlen(ifp), (u_char *)ar_sha(ah), ":", > ifp->if_xname); > LLE_WUNLOCK(la); > goto reply; > } > if ((la->la_flags & LLE_VALID) && > - bcmp(ar_sha(ah), &la->ll_addr, ifp->if_addrlen)) { > + bcmp(ar_sha(ah), &la->ll_addr, if_addrlen(ifp))) { > if (la->la_flags & LLE_STATIC) { > LLE_WUNLOCK(la); > if (log_arp_permanent_modify) > ARP_LOG(LOG_ERR, > "%*D attempts to modify " > "permanent entry for %s on %s\n", > - ifp->if_addrlen, > + if_addrlen(ifp), > (u_char *)ar_sha(ah), ":", > inet_ntoa(isaddr), ifp->if_xname); > goto reply; > @@ -734,22 +733,21 @@ match: > ARP_LOG(LOG_INFO, "%s moved from %*D " > "to %*D on %s\n", > inet_ntoa(isaddr), > - ifp->if_addrlen, > - (u_char *)&la->ll_addr, ":", > - ifp->if_addrlen, (u_char *)ar_sha(ah), ":", > - ifp->if_xname); > + if_addrlen(ifp), (u_char *)&la->ll_addr, > + ":", if_addrlen(ifp), (u_char *)ar_sha(ah), > + ":", ifp->if_xname); > } > } > > - if (ifp->if_addrlen != ah->ar_hln) { > + if (if_addrlen(ifp) != ah->ar_hln) { > LLE_WUNLOCK(la); > ARP_LOG(LOG_WARNING, "from %*D: addr len: new %d, " > - "i/f %d (ignored)\n", ifp->if_addrlen, > + "i/f %d (ignored)\n", if_addrlen(ifp), > (u_char *) ar_sha(ah), ":", ah->ar_hln, > - ifp->if_addrlen); > + if_addrlen(ifp)); > goto drop; > } > - (void)memcpy(&la->ll_addr, ar_sha(ah), ifp->if_addrlen); > + memcpy(&la->ll_addr, ar_sha(ah), if_addrlen(ifp)); > la->la_flags |= LLE_VALID; > > EVENTHANDLER_INVOKE(lle_event, la, LLENTRY_RESOLVED); > @@ -786,7 +784,7 @@ match: > m_hold->m_nextpkt = NULL; > /* Avoid confusing lower layers. */ > m_clrprotoflags(m_hold); > - (*ifp->if_output)(ifp, m_hold, &sa, NULL); > + if_output(ifp, m_hold, &sa, NULL); > } > } else > LLE_WUNLOCK(la); > @@ -891,7 +889,7 @@ reply: > sa.sa_family = AF_ARP; > sa.sa_len = 2; > m_clrprotoflags(m); /* Avoid confusing lower layers. */ > - (*ifp->if_output)(ifp, m, &sa, NULL); > + if_output(ifp, m, &sa, NULL); > ARPSTAT_INC(txreplies); > return; > > @@ -910,7 +908,7 @@ arp_ifinit(struct ifnet *ifp, struct ifa > > if (ntohl(IA_SIN(ifa)->sin_addr.s_addr) != INADDR_ANY) { > arprequest(ifp, &IA_SIN(ifa)->sin_addr, > - &IA_SIN(ifa)->sin_addr, IF_LLADDR(ifp)); > + &IA_SIN(ifa)->sin_addr, if_lladdr(ifp)); > /* > * interface address is considered static entry > * because the output of the arp utility shows > > Modified: projects/ifnet/sys/netinet/in.c > ============================================================================== > --- projects/ifnet/sys/netinet/in.c Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/in.c Wed Dec 31 09:52:57 2014 (r276461) > @@ -232,9 +232,7 @@ in_control(struct socket *so, u_long cmd > /* We no longer support that old commands. */ > return (EINVAL); > default: > - if (ifp->if_ioctl == NULL) > - return (EOPNOTSUPP); > - return ((*ifp->if_ioctl)(ifp, cmd, data)); > + return if_ioctl(ifp, cmd, data); > } > > if (addr->sin_addr.s_addr != INADDR_ANY && > @@ -436,11 +434,9 @@ in_aifaddr_ioctl(u_long cmd, caddr_t dat > * if this is its first address, > * and to validate the address if necessary. > */ > - if (ifp->if_ioctl != NULL) { > - error = (*ifp->if_ioctl)(ifp, SIOCSIFADDR, (caddr_t)ia); > - if (error) > - goto fail1; > - } > + error = if_ioctl(ifp, SIOCSIFADDR, (caddr_t)ia); > + if (error != 0 && error != EOPNOTSUPP) > + goto fail1; > > /* > * Add route for the network. > @@ -1026,7 +1022,7 @@ in_lltable_rtcheck(struct ifnet *ifp, u_ > */ > if (rt->rt_flags & RTF_GATEWAY) { > if (!(rt->rt_flags & RTF_HOST) || !rt->rt_ifp || > - rt->rt_ifp->if_type != IFT_ETHER || > + if_type(rt->rt_ifp) != IFT_ETHER || > (rt->rt_ifp->if_flags & (IFF_NOARP | IFF_STATICARP)) != 0 || > memcmp(rt->rt_gateway->sa_data, l3addr->sa_data, > sizeof(in_addr_t)) != 0) { > @@ -1126,8 +1122,9 @@ in_lltable_lookup(struct lltable *llt, u > goto done; > } > lle->la_flags = flags & ~LLE_CREATE; > - if ((flags & (LLE_CREATE | LLE_IFADDR)) == (LLE_CREATE | LLE_IFADDR)) { > - bcopy(IF_LLADDR(ifp), &lle->ll_addr, ifp->if_addrlen); > + if ((flags & (LLE_CREATE | LLE_IFADDR)) == > + (LLE_CREATE | LLE_IFADDR)) { > + bcopy(if_lladdr(ifp), &lle->ll_addr, if_addrlen(ifp)); > lle->la_flags |= (LLE_VALID | LLE_STATIC); > } > > @@ -1213,13 +1210,14 @@ in_lltable_dump(struct lltable *llt, str > sdl->sdl_family = AF_LINK; > sdl->sdl_len = sizeof(*sdl); > sdl->sdl_index = ifp->if_index; > - sdl->sdl_type = ifp->if_type; > + sdl->sdl_type = if_type(ifp); > if ((lle->la_flags & LLE_VALID) == LLE_VALID) { > - sdl->sdl_alen = ifp->if_addrlen; > - bcopy(&lle->ll_addr, LLADDR(sdl), ifp->if_addrlen); > + sdl->sdl_alen = if_addrlen(ifp); > + bcopy(&lle->ll_addr, LLADDR(sdl), > + if_addrlen(ifp)); > } else { > sdl->sdl_alen = 0; > - bzero(LLADDR(sdl), ifp->if_addrlen); > + bzero(LLADDR(sdl), if_addrlen(ifp)); > } > > arpc.rtm.rtm_rmx.rmx_expire = > > Modified: projects/ifnet/sys/netinet/ip_fastfwd.c > ============================================================================== > --- projects/ifnet/sys/netinet/ip_fastfwd.c Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/ip_fastfwd.c Wed Dec 31 09:52:57 2014 (r276461) > @@ -531,8 +531,7 @@ passout: > * Send off the packet via outgoing interface > */ > IP_PROBE(send, NULL, NULL, ip, ifp, ip, NULL); > - error = (*ifp->if_output)(ifp, m, > - (struct sockaddr *)dst, &ro); > + error = if_output(ifp, m, (struct sockaddr *)dst, &ro); > } else { > /* > * Handle EMSGSIZE with icmp reply needfrag for TCP MTU discovery > @@ -563,8 +562,8 @@ passout: > m_clrprotoflags(m); > > IP_PROBE(send, NULL, NULL, ip, ifp, ip, NULL); > - error = (*ifp->if_output)(ifp, m, > - (struct sockaddr *)dst, &ro); > + error = if_output(ifp, m, > + (struct sockaddr *)dst, &ro); > if (error) > break; > } while ((m = m0) != NULL); > > Modified: projects/ifnet/sys/netinet/ip_output.c > ============================================================================== > --- projects/ifnet/sys/netinet/ip_output.c Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/ip_output.c Wed Dec 31 09:52:57 2014 (r276461) > @@ -624,8 +624,7 @@ passout: > */ > m_clrprotoflags(m); > IP_PROBE(send, NULL, NULL, ip, ifp, ip, NULL); > - error = (*ifp->if_output)(ifp, m, > - (const struct sockaddr *)gw, ro); > + error = if_output(ifp, m, (const struct sockaddr *)gw, ro); > goto done; > } > > @@ -660,7 +659,7 @@ passout: > m_clrprotoflags(m); > > IP_PROBE(send, NULL, NULL, ip, ifp, ip, NULL); > - error = (*ifp->if_output)(ifp, m, > + error = if_output(ifp, m, > (const struct sockaddr *)gw, ro); > } else > m_freem(m); > > Modified: projects/ifnet/sys/netinet/sctp_bsd_addr.c > ============================================================================== > --- projects/ifnet/sys/netinet/sctp_bsd_addr.c Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/sctp_bsd_addr.c Wed Dec 31 09:52:57 2014 (r276461) > @@ -48,6 +48,9 @@ __FBSDID("$FreeBSD$"); > #include > #include > > +#define if_addrlist if_addrhead > +#define if_list if_link > + > /* Declare all of our malloc named types */ > MALLOC_DEFINE(SCTP_M_MAP, "sctp_map", "sctp asoc map descriptor"); > MALLOC_DEFINE(SCTP_M_STRMI, "sctp_stri", "sctp stream in array"); > @@ -150,7 +153,7 @@ sctp_is_desired_interface_type(struct if > int result; > > /* check the interface type to see if it's one we care about */ > - switch (ifn->if_type) { > + switch (if_type(ifn)) { > case IFT_ETHER: > case IFT_ISO88023: > case IFT_ISO88024: > @@ -256,7 +259,7 @@ sctp_init_ifns_for_vrf(int vrfid) > sctp_ifa = sctp_add_addr_to_vrf(vrfid, > (void *)ifn, > ifn->if_index, > - ifn->if_type, > + if_type(ifn), > ifn->if_xname, > (void *)ifa, > ifa->ifa_addr, > @@ -336,8 +339,9 @@ sctp_addr_change(struct ifaddr *ifa, int > return; > } > if (cmd == RTM_ADD) { > - (void)sctp_add_addr_to_vrf(SCTP_DEFAULT_VRFID, (void *)ifa->ifa_ifp, > - ifa->ifa_ifp->if_index, ifa->ifa_ifp->if_type, ifa->ifa_ifp->if_xname, > + (void)sctp_add_addr_to_vrf(SCTP_DEFAULT_VRFID, > + (void *)ifa->ifa_ifp, ifa->ifa_ifp->if_index, > + if_type(ifa->ifa_ifp), ifa->ifa_ifp->if_xname, > (void *)ifa, ifa->ifa_addr, ifa_flags, 1); > } else { > > > Modified: projects/ifnet/sys/netinet/sctp_os_bsd.h > ============================================================================== > --- projects/ifnet/sys/netinet/sctp_os_bsd.h Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/sctp_os_bsd.h Wed Dec 31 09:52:57 2014 (r276461) > @@ -212,7 +212,7 @@ MALLOC_DECLARE(SCTP_M_MCORE); > #define SCTP_INIT_VRF_TABLEID(vrf) > > #define SCTP_IFN_IS_IFT_LOOP(ifn) ((ifn)->ifn_type == IFT_LOOP) > -#define SCTP_ROUTE_IS_REAL_LOOP(ro) ((ro)->ro_rt && (ro)->ro_rt->rt_ifa && (ro)->ro_rt->rt_ifa->ifa_ifp && (ro)->ro_rt->rt_ifa->ifa_ifp->if_type == IFT_LOOP) > +#define SCTP_ROUTE_IS_REAL_LOOP(ro) ((ro)->ro_rt && (ro)->ro_rt->rt_ifa && (ro)->ro_rt->rt_ifa->ifa_ifp && if_type((ro)->ro_rt->rt_ifa->ifa_ifp) == IFT_LOOP) > > /* > * Access to IFN's to help with src-addr-selection > > Modified: projects/ifnet/sys/netinet/tcp_input.c > ============================================================================== > --- projects/ifnet/sys/netinet/tcp_input.c Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/tcp_input.c Wed Dec 31 09:52:57 2014 (r276461) > @@ -3540,7 +3540,6 @@ tcp_mss(struct tcpcb *tp, int offer) > > KASSERT(tp != NULL, ("%s: tp == NULL", __func__)); > > - bzero(&cap, sizeof(cap)); > tcp_mss_update(tp, offer, -1, &metrics, &cap); > > mss = tp->t_maxseg; > @@ -3586,11 +3585,11 @@ tcp_mss(struct tcpcb *tp, int offer) > SOCKBUF_UNLOCK(&so->so_rcv); > > /* Check the interface for TSO capabilities. */ > - if (cap.ifcap & CSUM_TSO) { > + if (cap.hwassist & CSUM_TSO) { > tp->t_flags |= TF_TSO; > - tp->t_tsomax = cap.tsomax; > - tp->t_tsomaxsegcount = cap.tsomaxsegcount; > - tp->t_tsomaxsegsize = cap.tsomaxsegsize; > + tp->t_tsomax = cap.tsomax->tsomax_bytes; > + tp->t_tsomaxsegcount = cap.tsomax->tsomax_segcount; > + tp->t_tsomaxsegsize = cap.tsomax->tsomax_segsize; > } > } > > > Modified: projects/ifnet/sys/netinet/tcp_lro.c > ============================================================================== > --- projects/ifnet/sys/netinet/tcp_lro.c Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/tcp_lro.c Wed Dec 31 09:52:57 2014 (r276461) > @@ -298,7 +298,7 @@ tcp_lro_flush(struct lro_ctrl *lc, struc > #endif > } > > - (*lc->ifp->if_input)(lc->ifp, le->m_head); > + if_input(lc->ifp, le->m_head); > lc->lro_queued += le->append_cnt + 1; > lc->lro_flushed++; > bzero(le, sizeof(*le)); > > Modified: projects/ifnet/sys/netinet/tcp_subr.c > ============================================================================== > --- projects/ifnet/sys/netinet/tcp_subr.c Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/tcp_subr.c Wed Dec 31 09:52:57 2014 (r276461) > @@ -1807,13 +1807,11 @@ tcp_maxmtu(struct in_conninfo *inc, stru > > /* Report additional interface capabilities. */ > if (cap != NULL) { > - if (ifp->if_capenable & IFCAP_TSO4 && > - ifp->if_hwassist & CSUM_TSO) { > - cap->ifcap |= CSUM_TSO; > - cap->tsomax = ifp->if_hw_tsomax; > - cap->tsomaxsegcount = ifp->if_hw_tsomaxsegcount; > - cap->tsomaxsegsize = ifp->if_hw_tsomaxsegsize; > - } > + if (ifp->if_capenable & IFCAP_TSO4) { > + cap->hwassist = ifp->if_hwassist; > + cap->tsomax = ifp->if_tsomax; > + } else > + bzero(cap, sizeof(struct tcp_ifcap)); > } > RTFREE(sro.ro_rt); > } > @@ -1848,13 +1846,11 @@ tcp_maxmtu6(struct in_conninfo *inc, str > > /* Report additional interface capabilities. */ > if (cap != NULL) { > - if (ifp->if_capenable & IFCAP_TSO6 && > - ifp->if_hwassist & CSUM_TSO) { > - cap->ifcap |= CSUM_TSO; > - cap->tsomax = ifp->if_hw_tsomax; > - cap->tsomaxsegcount = ifp->if_hw_tsomaxsegcount; > - cap->tsomaxsegsize = ifp->if_hw_tsomaxsegsize; > - } > + if (ifp->if_capenable & IFCAP_TSO6) { > + cap->hwassist = ifp->if_hwassist; > + cap->tsomax = ifp->if_tsomax; > + } else > + bzero(cap, sizeof(struct tcp_ifcap)); > } > RTFREE(sro6.ro_rt); > } > > Modified: projects/ifnet/sys/netinet/tcp_var.h > ============================================================================== > --- projects/ifnet/sys/netinet/tcp_var.h Wed Dec 31 09:51:35 2014 (r276460) > +++ projects/ifnet/sys/netinet/tcp_var.h Wed Dec 31 09:52:57 2014 (r276461) > @@ -332,11 +332,12 @@ struct hc_metrics_lite { /* must stay in > * Used by tcp_maxmtu() to communicate interface specific features > * and limits at the time of connection setup. > */ > +#ifndef _NET_IF_H_ > +struct iftsomax; > +#endif > struct tcp_ifcap { > - int ifcap; > - u_int tsomax; > - u_int tsomaxsegcount; > - u_int tsomaxsegsize; > + uint64_t hwassist; > + struct iftsomax *tsomax; > }; > > #ifndef _NETINET_IN_PCB_H_ >