Add infrastructure to allow UDP tunnels to setup flow dissection. Signed-off-by: Tom Herbert <t...@herbertland.com> --- include/net/udp_tunnel.h | 5 +++++ net/ipv4/udp_tunnel.c | 5 +++++ 2 files changed, 10 insertions(+)
diff --git a/include/net/udp_tunnel.h b/include/net/udp_tunnel.h index 02c5be0..81d2584 100644 --- a/include/net/udp_tunnel.h +++ b/include/net/udp_tunnel.h @@ -69,6 +69,10 @@ typedef struct sk_buff **(*udp_tunnel_gro_receive_t)(struct sock *sk, struct sk_buff *skb); typedef int (*udp_tunnel_gro_complete_t)(struct sock *sk, struct sk_buff *skb, int nhoff); +typedef int (*udp_tunnel_flow_dissect_t)(struct sock *sk, + const struct sk_buff *skb, + void *data, int hlen, int *nhoff, + u8 *ip_proto, __be16 *proto); struct udp_tunnel_sock_cfg { void *sk_user_data; /* user data used by encap_rcv call back */ @@ -78,6 +82,7 @@ struct udp_tunnel_sock_cfg { udp_tunnel_encap_destroy_t encap_destroy; udp_tunnel_gro_receive_t gro_receive; udp_tunnel_gro_complete_t gro_complete; + udp_tunnel_flow_dissect_t flow_dissect; }; /* Setup the given (UDP) sock to receive UDP encapsulated packets */ diff --git a/net/ipv4/udp_tunnel.c b/net/ipv4/udp_tunnel.c index 58bd39f..4459288 100644 --- a/net/ipv4/udp_tunnel.c +++ b/net/ipv4/udp_tunnel.c @@ -72,6 +72,11 @@ void setup_udp_tunnel_sock(struct net *net, struct socket *sock, udp_sk(sk)->gro_receive = cfg->gro_receive; udp_sk(sk)->gro_complete = cfg->gro_complete; + if (cfg->flow_dissect) { + udp_sk(sk)->flow_dissect = cfg->flow_dissect; + udp_flow_dissect_enable(); + } + udp_tunnel_encap_enable(sock); } EXPORT_SYMBOL_GPL(setup_udp_tunnel_sock); -- 2.9.3