Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/net/openvswitch/conntrack.h
170831 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (c) 2015 Nicira, Inc.
4
*/
5
6
#ifndef OVS_CONNTRACK_H
7
#define OVS_CONNTRACK_H 1
8
9
#include "flow.h"
10
11
struct ovs_conntrack_info;
12
struct ovs_ct_limit_info;
13
enum ovs_key_attr;
14
15
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
16
int ovs_ct_init(struct net *);
17
void ovs_ct_exit(struct net *);
18
bool ovs_ct_verify(struct net *, enum ovs_key_attr attr);
19
int ovs_ct_copy_action(struct net *, const struct nlattr *,
20
const struct sw_flow_key *, struct sw_flow_actions **,
21
bool log);
22
int ovs_ct_action_to_attr(const struct ovs_conntrack_info *, struct sk_buff *);
23
24
int ovs_ct_execute(struct net *, struct sk_buff *, struct sw_flow_key *,
25
const struct ovs_conntrack_info *);
26
int ovs_ct_clear(struct sk_buff *skb, struct sw_flow_key *key);
27
28
void ovs_ct_fill_key(const struct sk_buff *skb, struct sw_flow_key *key,
29
bool post_ct);
30
int ovs_ct_put_key(const struct sw_flow_key *swkey,
31
const struct sw_flow_key *output, struct sk_buff *skb);
32
void ovs_ct_free_action(const struct nlattr *a);
33
34
#define CT_SUPPORTED_MASK (OVS_CS_F_NEW | OVS_CS_F_ESTABLISHED | \
35
OVS_CS_F_RELATED | OVS_CS_F_REPLY_DIR | \
36
OVS_CS_F_INVALID | OVS_CS_F_TRACKED | \
37
OVS_CS_F_SRC_NAT | OVS_CS_F_DST_NAT)
38
#else
39
#include <linux/errno.h>
40
41
static inline int ovs_ct_init(struct net *net) { return 0; }
42
43
static inline void ovs_ct_exit(struct net *net) { }
44
45
static inline bool ovs_ct_verify(struct net *net, int attr)
46
{
47
return false;
48
}
49
50
static inline int ovs_ct_copy_action(struct net *net, const struct nlattr *nla,
51
const struct sw_flow_key *key,
52
struct sw_flow_actions **acts, bool log)
53
{
54
return -ENOTSUPP;
55
}
56
57
static inline int ovs_ct_action_to_attr(const struct ovs_conntrack_info *info,
58
struct sk_buff *skb)
59
{
60
return -ENOTSUPP;
61
}
62
63
static inline int ovs_ct_execute(struct net *net, struct sk_buff *skb,
64
struct sw_flow_key *key,
65
const struct ovs_conntrack_info *info)
66
{
67
kfree_skb(skb);
68
return -ENOTSUPP;
69
}
70
71
static inline int ovs_ct_clear(struct sk_buff *skb,
72
struct sw_flow_key *key)
73
{
74
return -ENOTSUPP;
75
}
76
77
static inline void ovs_ct_fill_key(const struct sk_buff *skb,
78
struct sw_flow_key *key,
79
bool post_ct)
80
{
81
key->ct_state = 0;
82
key->ct_zone = 0;
83
key->ct.mark = 0;
84
memset(&key->ct.labels, 0, sizeof(key->ct.labels));
85
/* Clear 'ct_orig_proto' to mark the non-existence of original
86
* direction key fields.
87
*/
88
key->ct_orig_proto = 0;
89
}
90
91
static inline int ovs_ct_put_key(const struct sw_flow_key *swkey,
92
const struct sw_flow_key *output,
93
struct sk_buff *skb)
94
{
95
return 0;
96
}
97
98
static inline void ovs_ct_free_action(const struct nlattr *a) { }
99
100
#define CT_SUPPORTED_MASK 0
101
#endif /* CONFIG_NF_CONNTRACK */
102
103
#if IS_ENABLED(CONFIG_NETFILTER_CONNCOUNT)
104
extern struct genl_family dp_ct_limit_genl_family;
105
#endif
106
#endif /* ovs_conntrack.h */
107
108