udp: pass udp_offload struct to UDP gro callbacks

This patch introduces udp_offload_callbacks which has the same
GRO functions (but not a GSO function) as offload_callbacks,
except there is an argument to a udp_offload struct passed to
gro_receive and gro_complete functions. This additional argument
can be used to retrieve the per port structure of the encapsulation
for use in gro processing (mostly by doing container_of on the
structure).

Signed-off-by: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Tom Herbert
2015-01-12 17:00:37 -08:00
committed by David S. Miller
parent d823ab68fb
commit a2b12f3c7a
5 changed files with 35 additions and 12 deletions

View File

@@ -1969,7 +1969,7 @@ struct offload_callbacks {
struct sk_buff *(*gso_segment)(struct sk_buff *skb,
netdev_features_t features);
struct sk_buff **(*gro_receive)(struct sk_buff **head,
struct sk_buff *skb);
struct sk_buff *skb);
int (*gro_complete)(struct sk_buff *skb, int nhoff);
};
@@ -1979,10 +1979,21 @@ struct packet_offload {
struct list_head list;
};
struct udp_offload;
struct udp_offload_callbacks {
struct sk_buff **(*gro_receive)(struct sk_buff **head,
struct sk_buff *skb,
struct udp_offload *uoff);
int (*gro_complete)(struct sk_buff *skb,
int nhoff,
struct udp_offload *uoff);
};
struct udp_offload {
__be16 port;
u8 ipproto;
struct offload_callbacks callbacks;
struct udp_offload_callbacks callbacks;
};
/* often modified stats are per cpu, other are shared (netdev->stats) */