diff options
author | Pravin B Shelar <pshelar@nicira.com> | 2013-08-19 11:23:07 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-20 00:15:43 -0700 |
commit | 012a5729ff933ecd07e7470a65d84577aef9ae03 (patch) | |
tree | 354e8f359ed8a01c0eb54061c49a7cecc7b472da /include/net/vxlan.h | |
parent | 5cfccc5a47ebcaac5d5fa82a6dcef94a78b1eb6c (diff) |
vxlan: Extend vxlan handlers for openvswitch.
Following patch adds data field to vxlan socket and export
vxlan handler api.
vh->data is required to store private data per vxlan handler.
Signed-off-by: Pravin B Shelar <pshelar@nicira.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/vxlan.h')
-rw-r--r-- | include/net/vxlan.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/include/net/vxlan.h b/include/net/vxlan.h new file mode 100644 index 000000000000..43de27585cb0 --- /dev/null +++ b/include/net/vxlan.h @@ -0,0 +1,31 @@ +#ifndef __NET_VXLAN_H +#define __NET_VXLAN_H 1 + +#include <linux/skbuff.h> +#include <linux/netdevice.h> +#include <linux/udp.h> + +#define VNI_HASH_BITS 10 +#define VNI_HASH_SIZE (1<<VNI_HASH_BITS) + +struct vxlan_sock; +typedef void (vxlan_rcv_t)(struct vxlan_sock *vh, struct sk_buff *skb, __be32 key); + +/* per UDP socket information */ +struct vxlan_sock { + struct hlist_node hlist; + vxlan_rcv_t *rcv; + void *data; + struct work_struct del_work; + struct socket *sock; + struct rcu_head rcu; + struct hlist_head vni_list[VNI_HASH_SIZE]; + atomic_t refcnt; +}; + +struct vxlan_sock *vxlan_sock_add(struct net *net, __be16 port, + vxlan_rcv_t *rcv, void *data, + bool no_share); + +void vxlan_sock_release(struct vxlan_sock *vs); +#endif |