From owner-svn-src-projects@FreeBSD.ORG Wed Dec 31 09:53:01 2014 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id A2908745; Wed, 31 Dec 2014 09:53:01 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 8D78B661D7; Wed, 31 Dec 2014 09:53:01 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id sBV9r1Oe043830; Wed, 31 Dec 2014 09:53:01 GMT (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id sBV9qws7043801; Wed, 31 Dec 2014 09:52:58 GMT (envelope-from glebius@FreeBSD.org) Message-Id: <201412310952.sBV9qws7043801@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: glebius set sender to glebius@FreeBSD.org using -f From: Gleb Smirnoff Date: Wed, 31 Dec 2014 09:52:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r276461 - projects/ifnet/sys/netinet X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 09:53:01 -0000 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_