Author: rwatson Date: Mon Mar 16 10:56:50 2009 New Revision: 189873 URL: http://svn.freebsd.org/changeset/base/189873
Log: Define and use two macros for loopback checksum offload: LO_CSUM_FEATURES - a bitmask of supported transmit offload features, which will be stored in if_hwassist if IFCAP_TXCSUM is enabled, and be cleared from mbuf packet header csum flags on transmit. (1) LO_CSUM_SET - a bitmask of supported receive offload features, which will be set on the mbuf packet header csum flags on transmit if IFCAP_RXCSUM is enabled. While here, fix SCTP offload for loopback: offer generation on the transmit side, don't just skip validation on the receive side. Obtained from: DragonflyBSD (1) MFC after: 1 week Modified: head/sys/net/if_loop.c Modified: head/sys/net/if_loop.c ============================================================================== --- head/sys/net/if_loop.c Mon Mar 16 10:36:24 2009 (r189872) +++ head/sys/net/if_loop.c Mon Mar 16 10:56:50 2009 (r189873) @@ -94,6 +94,11 @@ #define LOMTU 16384 #endif +#define LO_CSUM_FEATURES (CSUM_IP | CSUM_TCP | CSUM_UDP | CSUM_SCTP) +#define LO_CSUM_SET (CSUM_DATA_VALID | CSUM_PSEUDO_HDR | \ + CSUM_IP_CHECKED | CSUM_IP_VALID | \ + CSUM_SCTP_VALID) + 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, @@ -139,7 +144,7 @@ lo_clone_create(struct if_clone *ifc, in ifp->if_output = looutput; ifp->if_snd.ifq_maxlen = ifqmaxlen; ifp->if_capabilities = ifp->if_capenable = IFCAP_HWCSUM; - ifp->if_hwassist = CSUM_IP | CSUM_TCP | CSUM_UDP; + ifp->if_hwassist = LO_CSUM_FEATURES; if_attach(ifp); bpfattach(ifp, DLT_NULL, sizeof(u_int32_t)); if (V_loif == NULL) @@ -216,11 +221,9 @@ looutput(struct ifnet *ifp, struct mbuf case AF_INET: if (ifp->if_capenable & IFCAP_RXCSUM) { m->m_pkthdr.csum_data = 0xffff; - m->m_pkthdr.csum_flags = CSUM_DATA_VALID | - CSUM_PSEUDO_HDR | CSUM_IP_CHECKED | - CSUM_IP_VALID | CSUM_SCTP_VALID; + m->m_pkthdr.csum_flags = LO_CSUM_SET; } - m->m_pkthdr.csum_flags &= ~(CSUM_IP | CSUM_TCP | CSUM_UDP); + m->m_pkthdr.csum_flags &= ~LO_CSUM_FEATURES; case AF_INET6: case AF_IPX: case AF_APPLETALK: @@ -407,7 +410,7 @@ loioctl(struct ifnet *ifp, u_long cmd, c if ((mask & IFCAP_TXCSUM) != 0) ifp->if_capenable ^= IFCAP_TXCSUM; if (ifp->if_capenable & IFCAP_TXCSUM) - ifp->if_hwassist = CSUM_IP | CSUM_TCP | CSUM_UDP; + ifp->if_hwassist = LO_CSUM_FEATURES; else ifp->if_hwassist = 0; break; _______________________________________________ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"