Date: Fri, 1 Jun 2012 11:42:51 +0000 (UTC) From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r236394 - head/sys/netinet Message-ID: <201206011142.q51BgpaZ016971@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bz Date: Fri Jun 1 11:42:50 2012 New Revision: 236394 URL: http://svn.freebsd.org/changeset/base/236394 Log: Make TCP LRO work properly with VIMAGE kernels rather than just panicing. There's no VIMAGE context set there yet as this is before if_ethersubr.c. MFC after: 3 days X-MFC with: r235981 Modified: head/sys/netinet/tcp_lro.c Modified: head/sys/netinet/tcp_lro.c ============================================================================== --- head/sys/netinet/tcp_lro.c Fri Jun 1 09:32:37 2012 (r236393) +++ head/sys/netinet/tcp_lro.c Fri Jun 1 11:42:50 2012 (r236394) @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include <net/if.h> #include <net/if_var.h> #include <net/ethernet.h> +#include <net/vnet.h> #include <netinet/in_systm.h> #include <netinet/in.h> @@ -370,10 +371,14 @@ tcp_lro_rx(struct lro_ctrl *lc, struct m switch (eh_type) { #ifdef INET6 case ETHERTYPE_IPV6: + { + CURVNET_SET(lc->ifp->if_vnet); if (V_ip6_forwarding != 0) { /* XXX-BZ stats but changing lro_ctrl is a problem. */ + CURVNET_RESTORE(); return (TCP_LRO_CANNOT); } + CURVNET_RESTORE(); l3hdr = ip6 = (struct ip6_hdr *)(eh + 1); error = tcp_lro_rx_ipv6(lc, m, ip6, &th); if (error != 0) @@ -381,13 +386,18 @@ tcp_lro_rx(struct lro_ctrl *lc, struct m tcp_data_len = ntohs(ip6->ip6_plen); ip_len = sizeof(*ip6) + tcp_data_len; break; + } #endif #ifdef INET case ETHERTYPE_IP: + { + CURVNET_SET(lc->ifp->if_vnet); if (V_ipforwarding != 0) { /* XXX-BZ stats but changing lro_ctrl is a problem. */ + CURVNET_RESTORE(); return (TCP_LRO_CANNOT); } + CURVNET_RESTORE(); l3hdr = ip4 = (struct ip *)(eh + 1); error = tcp_lro_rx_ipv4(lc, m, ip4, &th); if (error != 0) @@ -395,6 +405,7 @@ tcp_lro_rx(struct lro_ctrl *lc, struct m ip_len = ntohs(ip4->ip_len); tcp_data_len = ip_len - sizeof(*ip4); break; + } #endif /* XXX-BZ what happens in case of VLAN(s)? */ default:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206011142.q51BgpaZ016971>