]> git.baikalelectronics.ru Git - kernel.git/commit
net-gro: Prepare GRO stack for the upcoming tunneling support
authorJerry Chu <hkchu@google.com>
Thu, 12 Dec 2013 04:53:45 +0000 (20:53 -0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Dec 2013 18:47:53 +0000 (13:47 -0500)
commit14768ed62325d2bd004d7b43b5de9016ae27e213
tree2a10106aabe88c278a0cd02b93af1add04f5ffcc
parentde6bd7ce1c6aaf375945faaa6e4c5e87b0d8ab6e
net-gro: Prepare GRO stack for the upcoming tunneling support

This patch modifies the GRO stack to avoid the use of "network_header"
and associated macros like ip_hdr() and ipv6_hdr() in order to allow
an arbitary number of IP hdrs (v4 or v6) to be used in the
encapsulation chain. This lays the foundation for various IP
tunneling support (IP-in-IP, GRE, VXLAN, SIT,...) to be added later.

With this patch, the GRO stack traversing now is mostly based on
skb_gro_offset rather than special hdr offsets saved in skb (e.g.,
skb->network_header). As a result all but the top layer (i.e., the
the transport layer) must have hdrs of the same length in order for
a pkt to be considered for aggregation. Therefore when adding a new
encap layer (e.g., for tunneling), one must check and skip flows
(e.g., by setting NAPI_GRO_CB(p)->same_flow to 0) that have a
different hdr length.

Note that unlike the network header, the transport header can and
will continue to be set by the GRO code since there will be at
most one "transport layer" in the encap chain.

Signed-off-by: H.K. Jerry Chu <hkchu@google.com>
Suggested-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
net/core/dev.c
net/ipv4/af_inet.c
net/ipv4/tcp_offload.c
net/ipv6/ip6_offload.c
net/ipv6/tcpv6_offload.c