datapath: Add support for lwtunnel
[cascardo/ovs.git] / datapath / linux / compat / include / net / geneve.h
1 #ifndef __NET_GENEVE_WRAPPER_H
2 #define __NET_GENEVE_WRAPPER_H  1
3
4 #ifdef CONFIG_INET
5 #include <net/udp_tunnel.h>
6 #endif
7
8
9 #ifdef HAVE_METADATA_DST
10 #include_next <net/geneve.h>
11
12 static inline int rpl_geneve_init_module(void)
13 {
14         return 0;
15 }
16 static inline void rpl_geneve_cleanup_module(void)
17 {}
18
19 #define geneve_xmit dev_queue_xmit
20
21 #else
22 /* Geneve Header:
23  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
24  *  |Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |
25  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
26  *  |        Virtual Network Identifier (VNI)       |    Reserved   |
27  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28  *  |                    Variable Length Options                    |
29  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
30  *
31  * Option Header:
32  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
33  *  |          Option Class         |      Type     |R|R|R| Length  |
34  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
35  *  |                      Variable Option Data                     |
36  *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
37  */
38
39 struct geneve_opt {
40         __be16  opt_class;
41         u8      type;
42 #ifdef __LITTLE_ENDIAN_BITFIELD
43         u8      length:5;
44         u8      r3:1;
45         u8      r2:1;
46         u8      r1:1;
47 #else
48         u8      r1:1;
49         u8      r2:1;
50         u8      r3:1;
51         u8      length:5;
52 #endif
53         u8      opt_data[];
54 };
55
56 #define GENEVE_CRIT_OPT_TYPE (1 << 7)
57
58 struct genevehdr {
59 #ifdef __LITTLE_ENDIAN_BITFIELD
60         u8 opt_len:6;
61         u8 ver:2;
62         u8 rsvd1:6;
63         u8 critical:1;
64         u8 oam:1;
65 #else
66         u8 ver:2;
67         u8 opt_len:6;
68         u8 oam:1;
69         u8 critical:1;
70         u8 rsvd1:6;
71 #endif
72         __be16 proto_type;
73         u8 vni[3];
74         u8 rsvd2;
75         struct geneve_opt options[];
76 };
77
78 #ifdef CONFIG_INET
79 #define geneve_dev_create_fb rpl_geneve_dev_create_fb
80 struct net_device *rpl_geneve_dev_create_fb(struct net *net, const char *name,
81                                         u8 name_assign_type, u16 dst_port);
82 #endif /*ifdef CONFIG_INET */
83
84 int rpl_geneve_init_module(void);
85 void rpl_geneve_cleanup_module(void);
86
87 #define geneve_xmit rpl_geneve_xmit
88 netdev_tx_t rpl_geneve_xmit(struct sk_buff *skb);
89
90 #endif
91 #define geneve_init_module rpl_geneve_init_module
92 #define geneve_cleanup_module rpl_geneve_cleanup_module
93
94 #endif /*ifdef__NET_GENEVE_H */