~james-page/ubuntu/saucy/openvswitch/1.12-snapshot

« back to all changes in this revision

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

  • Committer: James Page
  • Date: 2013-08-21 10:16:57 UTC
  • mfrom: (1.1.20)
  • Revision ID: james.page@canonical.com-20130821101657-3o0z0qeiv5zkwlzi
New upstream snapshot

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef __LINUX_GRE_WRAPPER_H
 
2
#define __LINUX_GRE_WRAPPER_H
 
3
 
 
4
#include <linux/skbuff.h>
 
5
#include <net/ip_tunnels.h>
 
6
 
 
7
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)
 
8
#include_next <net/gre.h>
 
9
 
 
10
#else /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) */
 
11
 
 
12
#define GREPROTO_CISCO          0
 
13
#define GREPROTO_MAX            2
 
14
 
 
15
struct gre_protocol {
 
16
        int  (*handler)(struct sk_buff *skb);
 
17
};
 
18
 
 
19
int gre_add_protocol(const struct gre_protocol *proto, u8 version);
 
20
int gre_del_protocol(const struct gre_protocol *proto, u8 version);
 
21
 
 
22
#endif
 
23
 
 
24
struct gre_base_hdr {
 
25
        __be16 flags;
 
26
        __be16 protocol;
 
27
};
 
28
#define GRE_HEADER_SECTION 4
 
29
 
 
30
#define MAX_GRE_PROTO_PRIORITY 255
 
31
struct gre_cisco_protocol {
 
32
        int (*handler)(struct sk_buff *skb, const struct tnl_ptk_info *tpi);
 
33
        u8 priority;
 
34
};
 
35
 
 
36
#define gre_build_header rpl_gre_build_header
 
37
void gre_build_header(struct sk_buff *skb, const struct tnl_ptk_info *tpi,
 
38
                      int hdr_len);
 
39
 
 
40
#define gre_handle_offloads rpl_gre_handle_offloads
 
41
struct sk_buff *gre_handle_offloads(struct sk_buff *skb, bool gre_csum);
 
42
 
 
43
int gre_cisco_register(struct gre_cisco_protocol *proto);
 
44
int gre_cisco_unregister(struct gre_cisco_protocol *proto);
 
45
 
 
46
static inline int ip_gre_calc_hlen(__be16 o_flags)
 
47
{
 
48
        int addend = 4;
 
49
 
 
50
        if (o_flags & TUNNEL_CSUM)
 
51
                addend += 4;
 
52
        if (o_flags & TUNNEL_KEY)
 
53
                addend += 4;
 
54
        if (o_flags & TUNNEL_SEQ)
 
55
                addend += 4;
 
56
        return addend;
 
57
}
 
58
 
 
59
static inline __be16 gre_flags_to_tnl_flags(__be16 flags)
 
60
{
 
61
        __be16 tflags = 0;
 
62
 
 
63
        if (flags & GRE_CSUM)
 
64
                tflags |= TUNNEL_CSUM;
 
65
        if (flags & GRE_ROUTING)
 
66
                tflags |= TUNNEL_ROUTING;
 
67
        if (flags & GRE_KEY)
 
68
                tflags |= TUNNEL_KEY;
 
69
        if (flags & GRE_SEQ)
 
70
                tflags |= TUNNEL_SEQ;
 
71
        if (flags & GRE_STRICT)
 
72
                tflags |= TUNNEL_STRICT;
 
73
        if (flags & GRE_REC)
 
74
                tflags |= TUNNEL_REC;
 
75
        if (flags & GRE_VERSION)
 
76
                tflags |= TUNNEL_VERSION;
 
77
 
 
78
        return tflags;
 
79
}
 
80
 
 
81
static inline __be16 tnl_flags_to_gre_flags(__be16 tflags)
 
82
{
 
83
        __be16 flags = 0;
 
84
 
 
85
        if (tflags & TUNNEL_CSUM)
 
86
                flags |= GRE_CSUM;
 
87
        if (tflags & TUNNEL_ROUTING)
 
88
                flags |= GRE_ROUTING;
 
89
        if (tflags & TUNNEL_KEY)
 
90
                flags |= GRE_KEY;
 
91
        if (tflags & TUNNEL_SEQ)
 
92
                flags |= GRE_SEQ;
 
93
        if (tflags & TUNNEL_STRICT)
 
94
                flags |= GRE_STRICT;
 
95
        if (tflags & TUNNEL_REC)
 
96
                flags |= GRE_REC;
 
97
        if (tflags & TUNNEL_VERSION)
 
98
                flags |= GRE_VERSION;
 
99
 
 
100
        return flags;
 
101
}
 
102
#endif