~ubuntu-branches/ubuntu/wily/openvswitch/wily

« back to all changes in this revision

Viewing changes to datapath/linux/compat/include/net/geneve.h

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2015-08-10 11:35:15 UTC
  • mfrom: (1.1.30)
  • Revision ID: package-import@ubuntu.com-20150810113515-575vj06oq29emxsn
Tags: 2.4.0~git20150810.97bab95-0ubuntu1
* New upstream snapshot from 2.4 branch:
  - d/*: Align any relevant packaging changes with upstream.
* d/*: wrap-and-sort.
* d/openvswitch-{common,vswitch}.install: Correct install location for
  bash completion files.
* d/tests/openflow.py: Explicitly use ovs-testcontroller as provided
  by 2.4.0 release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef __NET_GENEVE_WRAPPER_H
 
2
#define __NET_GENEVE_WRAPPER_H  1
 
3
 
 
4
#include <linux/version.h>
 
5
 
 
6
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)
 
7
#include_next <net/geneve.h>
 
8
#else
 
9
 
 
10
#ifdef CONFIG_INET
 
11
#include <net/udp_tunnel.h>
 
12
#endif
 
13
 
 
14
 
 
15
/* Geneve Header:
 
16
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
17
 *  |Ver|  Opt Len  |O|C|    Rsvd.  |          Protocol Type        |
 
18
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
19
 *  |        Virtual Network Identifier (VNI)       |    Reserved   |
 
20
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
21
 *  |                    Variable Length Options                    |
 
22
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
23
 *
 
24
 * Option Header:
 
25
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
26
 *  |          Option Class         |      Type     |R|R|R| Length  |
 
27
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
28
 *  |                      Variable Option Data                     |
 
29
 *  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
30
 */
 
31
 
 
32
struct geneve_opt {
 
33
        __be16  opt_class;
 
34
        u8      type;
 
35
#ifdef __LITTLE_ENDIAN_BITFIELD
 
36
        u8      length:5;
 
37
        u8      r3:1;
 
38
        u8      r2:1;
 
39
        u8      r1:1;
 
40
#else
 
41
        u8      r1:1;
 
42
        u8      r2:1;
 
43
        u8      r3:1;
 
44
        u8      length:5;
 
45
#endif
 
46
        u8      opt_data[];
 
47
};
 
48
 
 
49
#define GENEVE_CRIT_OPT_TYPE (1 << 7)
 
50
 
 
51
struct genevehdr {
 
52
#ifdef __LITTLE_ENDIAN_BITFIELD
 
53
        u8 opt_len:6;
 
54
        u8 ver:2;
 
55
        u8 rsvd1:6;
 
56
        u8 critical:1;
 
57
        u8 oam:1;
 
58
#else
 
59
        u8 ver:2;
 
60
        u8 opt_len:6;
 
61
        u8 oam:1;
 
62
        u8 critical:1;
 
63
        u8 rsvd1:6;
 
64
#endif
 
65
        __be16 proto_type;
 
66
        u8 vni[3];
 
67
        u8 rsvd2;
 
68
        struct geneve_opt options[];
 
69
};
 
70
 
 
71
#ifdef CONFIG_INET
 
72
struct geneve_sock;
 
73
 
 
74
typedef void (geneve_rcv_t)(struct geneve_sock *gs, struct sk_buff *skb);
 
75
 
 
76
struct geneve_sock {
 
77
        geneve_rcv_t            *rcv;
 
78
        void                    *rcv_data;
 
79
        struct socket           *sock;
 
80
        struct rcu_head         rcu;
 
81
};
 
82
 
 
83
#define GENEVE_VER 0
 
84
#define GENEVE_BASE_HLEN (sizeof(struct udphdr) + sizeof(struct genevehdr))
 
85
 
 
86
#define geneve_sock_add rpl_geneve_sock_add
 
87
struct geneve_sock *rpl_geneve_sock_add(struct net *net, __be16 port,
 
88
                                        geneve_rcv_t *rcv, void *data,
 
89
                                        bool no_share, bool ipv6);
 
90
 
 
91
#define geneve_sock_release rpl_geneve_sock_release
 
92
void rpl_geneve_sock_release(struct geneve_sock *vs);
 
93
 
 
94
#define geneve_xmit_skb rpl_geneve_xmit_skb
 
95
int rpl_geneve_xmit_skb(struct geneve_sock *gs, struct rtable *rt,
 
96
                        struct sk_buff *skb, __be32 src, __be32 dst, __u8 tos,
 
97
                        __u8 ttl, __be16 df, __be16 src_port, __be16 dst_port,
 
98
                        __be16 tun_flags, u8 vni[3], u8 opt_len, u8 *opt,
 
99
                        bool csum, bool xnet);
 
100
#endif /*ifdef CONFIG_INET */
 
101
 
 
102
#endif /* kernel < 4.0 */
 
103
 
 
104
#endif /*ifdef__NET_GENEVE_WRAPPER_H */