Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
net
openvswitch
datapath.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2007-2012 Nicira, Inc.
3
*
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of version 2 of the GNU General Public
6
* License as published by the Free Software Foundation.
7
*
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* General Public License for more details.
12
*
13
* You should have received a copy of the GNU General Public License
14
* along with this program; if not, write to the Free Software
15
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16
* 02110-1301, USA
17
*/
18
19
#ifndef DATAPATH_H
20
#define DATAPATH_H 1
21
22
#include <asm/page.h>
23
#include <linux/kernel.h>
24
#include <
linux/mutex.h
>
25
#include <linux/netdevice.h>
26
#include <
linux/skbuff.h
>
27
#include <
linux/u64_stats_sync.h
>
28
29
#include "
flow.h
"
30
#include "
vport.h
"
31
32
#define DP_MAX_PORTS USHRT_MAX
33
#define DP_VPORT_HASH_BUCKETS 1024
34
35
#define SAMPLE_ACTION_DEPTH 3
36
49
struct
dp_stats_percpu
{
50
u64
n_hit
;
51
u64
n_missed
;
52
u64
n_lost
;
53
struct
u64_stats_sync
sync
;
54
};
55
70
struct
datapath
{
71
struct
rcu_head
rcu
;
72
struct
list_head
list_node
;
73
74
/* Flow table. */
75
struct
flow_table
__rcu
*
table
;
76
77
/* Switch ports. */
78
struct
hlist_head
*
ports
;
79
80
/* Stats. */
81
struct
dp_stats_percpu
__percpu
*
stats_percpu
;
82
83
#ifdef CONFIG_NET_NS
84
/* Network namespace ref. */
85
struct
net
*
net
;
86
#endif
87
};
88
89
struct
vport
*
ovs_lookup_vport
(
const
struct
datapath
*
dp
,
u16
port_no
);
90
91
static
inline
struct
vport
*ovs_vport_rcu(
const
struct
datapath
*
dp
,
int
port_no
)
92
{
93
WARN_ON_ONCE
(!rcu_read_lock_held());
94
return
ovs_lookup_vport
(dp, port_no);
95
}
96
97
static
inline
struct
vport
*ovs_vport_rtnl_rcu(
const
struct
datapath
*dp,
int
port_no)
98
{
99
WARN_ON_ONCE
(!rcu_read_lock_held() && !
rtnl_is_locked
());
100
return
ovs_lookup_vport
(dp, port_no);
101
}
102
103
static
inline
struct
vport
*ovs_vport_rtnl(
const
struct
datapath
*dp,
int
port_no)
104
{
105
ASSERT_RTNL
();
106
return
ovs_lookup_vport
(dp, port_no);
107
}
108
113
struct
ovs_skb_cb
{
114
struct
sw_flow
*
flow
;
115
};
116
#define OVS_CB(skb) ((struct ovs_skb_cb *)(skb)->cb)
117
128
struct
dp_upcall_info
{
129
u8
cmd
;
130
const
struct
sw_flow_key
*
key
;
131
const
struct
nlattr
*
userdata
;
132
u32
portid
;
133
};
134
135
static
inline
struct
net
*ovs_dp_get_net(
struct
datapath
*dp)
136
{
137
return
read_pnet
(&dp->net);
138
}
139
140
static
inline
void
ovs_dp_set_net(
struct
datapath
*dp,
struct
net
*
net
)
141
{
142
write_pnet
(&dp->net, net);
143
}
144
145
extern
struct
notifier_block
ovs_dp_device_notifier
;
146
extern
struct
genl_multicast_group
ovs_dp_vport_multicast_group
;
147
148
void
ovs_dp_process_received_packet
(
struct
vport
*,
struct
sk_buff
*);
149
void
ovs_dp_detach_port
(
struct
vport
*);
150
int
ovs_dp_upcall
(
struct
datapath
*,
struct
sk_buff
*,
151
const
struct
dp_upcall_info
*);
152
153
const
char
*
ovs_dp_name
(
const
struct
datapath
*dp);
154
struct
sk_buff
*
ovs_vport_cmd_build_info
(
struct
vport
*,
u32
pid
,
u32
seq,
155
u8
cmd
);
156
157
int
ovs_execute_actions
(
struct
datapath
*dp,
struct
sk_buff
*
skb
);
158
#endif
/* datapath.h */
Generated on Thu Jan 10 2013 15:01:13 for Linux Kernel by
1.8.2