net: phy: add interrupt support for aquantia phy
[deliverable/linux.git] / include / net / lwtunnel.h
CommitLineData
499a2425
RP
1#ifndef __NET_LWTUNNEL_H
2#define __NET_LWTUNNEL_H 1
3
4#include <linux/lwtunnel.h>
5#include <linux/netdevice.h>
6#include <linux/skbuff.h>
7#include <linux/types.h>
8#include <net/route.h>
9
10#define LWTUNNEL_HASH_BITS 7
11#define LWTUNNEL_HASH_SIZE (1 << LWTUNNEL_HASH_BITS)
12
13/* lw tunnel state flags */
25368623
TH
14#define LWTUNNEL_STATE_OUTPUT_REDIRECT BIT(0)
15#define LWTUNNEL_STATE_INPUT_REDIRECT BIT(1)
499a2425
RP
16
17struct lwtunnel_state {
18 __u16 type;
19 __u16 flags;
20 atomic_t refcnt;
25368623
TH
21 int (*orig_output)(struct sock *sk, struct sk_buff *skb);
22 int (*orig_input)(struct sk_buff *);
499a2425
RP
23 int len;
24 __u8 data[0];
25};
26
27struct lwtunnel_encap_ops {
28 int (*build_state)(struct net_device *dev, struct nlattr *encap,
29 struct lwtunnel_state **ts);
30 int (*output)(struct sock *sk, struct sk_buff *skb);
25368623 31 int (*input)(struct sk_buff *skb);
499a2425
RP
32 int (*fill_encap)(struct sk_buff *skb,
33 struct lwtunnel_state *lwtstate);
34 int (*get_encap_size)(struct lwtunnel_state *lwtstate);
35 int (*cmp_encap)(struct lwtunnel_state *a, struct lwtunnel_state *b);
36};
37
499a2425 38#ifdef CONFIG_LWTUNNEL
df383e62
JB
39static inline void lwtstate_free(struct lwtunnel_state *lws)
40{
41 kfree(lws);
42}
43
5a6228a0
ND
44static inline struct lwtunnel_state *
45lwtstate_get(struct lwtunnel_state *lws)
499a2425 46{
5a6228a0
ND
47 if (lws)
48 atomic_inc(&lws->refcnt);
49
50 return lws;
499a2425
RP
51}
52
5a6228a0 53static inline void lwtstate_put(struct lwtunnel_state *lws)
499a2425
RP
54{
55 if (!lws)
56 return;
57
58 if (atomic_dec_and_test(&lws->refcnt))
df383e62 59 lwtstate_free(lws);
499a2425
RP
60}
61
62static inline bool lwtunnel_output_redirect(struct lwtunnel_state *lwtstate)
63{
64 if (lwtstate && (lwtstate->flags & LWTUNNEL_STATE_OUTPUT_REDIRECT))
65 return true;
66
67 return false;
68}
69
25368623
TH
70static inline bool lwtunnel_input_redirect(struct lwtunnel_state *lwtstate)
71{
72 if (lwtstate && (lwtstate->flags & LWTUNNEL_STATE_INPUT_REDIRECT))
73 return true;
74
75 return false;
76}
499a2425
RP
77int lwtunnel_encap_add_ops(const struct lwtunnel_encap_ops *op,
78 unsigned int num);
79int lwtunnel_encap_del_ops(const struct lwtunnel_encap_ops *op,
80 unsigned int num);
81int lwtunnel_build_state(struct net_device *dev, u16 encap_type,
82 struct nlattr *encap,
83 struct lwtunnel_state **lws);
84int lwtunnel_fill_encap(struct sk_buff *skb,
85 struct lwtunnel_state *lwtstate);
86int lwtunnel_get_encap_size(struct lwtunnel_state *lwtstate);
87struct lwtunnel_state *lwtunnel_state_alloc(int hdr_len);
88int lwtunnel_cmp_encap(struct lwtunnel_state *a, struct lwtunnel_state *b);
ffce4196 89int lwtunnel_output(struct sock *sk, struct sk_buff *skb);
25368623 90int lwtunnel_input(struct sk_buff *skb);
499a2425
RP
91
92#else
93
824e7383
YX
94static inline void lwtstate_free(struct lwtunnel_state *lws)
95{
96}
97
5a6228a0
ND
98static inline struct lwtunnel_state *
99lwtstate_get(struct lwtunnel_state *lws)
499a2425 100{
5a6228a0 101 return lws;
499a2425
RP
102}
103
5a6228a0 104static inline void lwtstate_put(struct lwtunnel_state *lws)
499a2425
RP
105{
106}
107
108static inline bool lwtunnel_output_redirect(struct lwtunnel_state *lwtstate)
109{
110 return false;
111}
112
25368623
TH
113static inline bool lwtunnel_input_redirect(struct lwtunnel_state *lwtstate)
114{
115 return false;
116}
117
499a2425
RP
118static inline int lwtunnel_encap_add_ops(const struct lwtunnel_encap_ops *op,
119 unsigned int num)
120{
121 return -EOPNOTSUPP;
122
123}
124
125static inline int lwtunnel_encap_del_ops(const struct lwtunnel_encap_ops *op,
126 unsigned int num)
127{
128 return -EOPNOTSUPP;
129}
130
131static inline int lwtunnel_build_state(struct net_device *dev, u16 encap_type,
132 struct nlattr *encap,
133 struct lwtunnel_state **lws)
134{
135 return -EOPNOTSUPP;
136}
137
138static inline int lwtunnel_fill_encap(struct sk_buff *skb,
139 struct lwtunnel_state *lwtstate)
140{
141 return 0;
142}
143
144static inline int lwtunnel_get_encap_size(struct lwtunnel_state *lwtstate)
145{
146 return 0;
147}
148
149static inline struct lwtunnel_state *lwtunnel_state_alloc(int hdr_len)
150{
151 return NULL;
152}
153
154static inline int lwtunnel_cmp_encap(struct lwtunnel_state *a,
155 struct lwtunnel_state *b)
156{
157 return 0;
158}
159
ffce4196
RP
160static inline int lwtunnel_output(struct sock *sk, struct sk_buff *skb)
161{
162 return -EOPNOTSUPP;
163}
164
25368623
TH
165static inline int lwtunnel_input(struct sk_buff *skb)
166{
167 return -EOPNOTSUPP;
168}
169
499a2425
RP
170#endif
171
172#endif /* __NET_LWTUNNEL_H */
This page took 0.039282 seconds and 5 git commands to generate.