History

openvswitch: Expose <linux/openvswitch.h> to userspace

It contains the public netlink interface bits required by userspace to make use of the interface.

Thomas Graf committed 13 years ago

Commit 22e38801 parent 14b57a13 files · +458 −432Browse files

Unified · Split

3 files
  1. include/linux/openvswitch.h +1 −432
  2. include/uapi/linux/Kbuild +1 −0
  3. include/uapi/linux/openvswitch.h +456 −0
include/linux/openvswitch.h+1−432
@@ -19,437 +19,6 @@ · 18 unmodified lines
1919 #ifndef _LINUX_OPENVSWITCH_H
2020 #define _LINUX_OPENVSWITCH_H 1
2121
22−#include <linux/types.h>
23−#include <linux/if_ether.h>
24−
25−/**
26− * struct ovs_header - header for OVS Generic Netlink messages.
27− * @dp_ifindex: ifindex of local port for datapath (0 to make a request not
28− * specific to a datapath).
29− *
30− * Attributes following the header are specific to a particular OVS Generic
31− * Netlink family, but all of the OVS families use this header.
32− */
33−
34−struct ovs_header {
35− int dp_ifindex;
36−};
37−
38−/* Datapaths. */
39−
40−#define OVS_DATAPATH_FAMILY "ovs_datapath"
41−#define OVS_DATAPATH_MCGROUP "ovs_datapath"
42−#define OVS_DATAPATH_VERSION 0x1
43−
44−enum ovs_datapath_cmd {
45− OVS_DP_CMD_UNSPEC,
46− OVS_DP_CMD_NEW,
47− OVS_DP_CMD_DEL,
48− OVS_DP_CMD_GET,
49− OVS_DP_CMD_SET
50−};
51−
52−/**
53− * enum ovs_datapath_attr - attributes for %OVS_DP_* commands.
54− * @OVS_DP_ATTR_NAME: Name of the network device that serves as the "local
55− * port". This is the name of the network device whose dp_ifindex is given in
56− * the &struct ovs_header. Always present in notifications. Required in
57− * %OVS_DP_NEW requests. May be used as an alternative to specifying
58− * dp_ifindex in other requests (with a dp_ifindex of 0).
59− * @OVS_DP_ATTR_UPCALL_PID: The Netlink socket in userspace that is initially
60− * set on the datapath port (for OVS_ACTION_ATTR_MISS). Only valid on
61− * %OVS_DP_CMD_NEW requests. A value of zero indicates that upcalls should
62− * not be sent.
63− * @OVS_DP_ATTR_STATS: Statistics about packets that have passed through the
64− * datapath. Always present in notifications.
65− *
66− * These attributes follow the &struct ovs_header within the Generic Netlink
67− * payload for %OVS_DP_* commands.
68− */
69−enum ovs_datapath_attr {
70− OVS_DP_ATTR_UNSPEC,
71− OVS_DP_ATTR_NAME, /* name of dp_ifindex netdev */
72− OVS_DP_ATTR_UPCALL_PID, /* Netlink PID to receive upcalls */
73− OVS_DP_ATTR_STATS, /* struct ovs_dp_stats */
74− __OVS_DP_ATTR_MAX
75−};
76−
77−#define OVS_DP_ATTR_MAX (__OVS_DP_ATTR_MAX - 1)
78−
79−struct ovs_dp_stats {
80− __u64 n_hit; /* Number of flow table matches. */
81− __u64 n_missed; /* Number of flow table misses. */
82− __u64 n_lost; /* Number of misses not sent to userspace. */
83− __u64 n_flows; /* Number of flows present */
84−};
85−
86−struct ovs_vport_stats {
87− __u64 rx_packets; /* total packets received */
88− __u64 tx_packets; /* total packets transmitted */
89− __u64 rx_bytes; /* total bytes received */
90− __u64 tx_bytes; /* total bytes transmitted */
91− __u64 rx_errors; /* bad packets received */
92− __u64 tx_errors; /* packet transmit problems */
93− __u64 rx_dropped; /* no space in linux buffers */
94− __u64 tx_dropped; /* no space available in linux */
95−};
96−
97−/* Fixed logical ports. */
98−#define OVSP_LOCAL ((__u32)0)
99−
100−/* Packet transfer. */
101−
102−#define OVS_PACKET_FAMILY "ovs_packet"
103−#define OVS_PACKET_VERSION 0x1
104−
105−enum ovs_packet_cmd {
106− OVS_PACKET_CMD_UNSPEC,
107−
108− /* Kernel-to-user notifications. */
109− OVS_PACKET_CMD_MISS, /* Flow table miss. */
110− OVS_PACKET_CMD_ACTION, /* OVS_ACTION_ATTR_USERSPACE action. */
111−
112− /* Userspace commands. */
113− OVS_PACKET_CMD_EXECUTE /* Apply actions to a packet. */
114−};
115−
116−/**
117− * enum ovs_packet_attr - attributes for %OVS_PACKET_* commands.
118− * @OVS_PACKET_ATTR_PACKET: Present for all notifications. Contains the entire
119− * packet as received, from the start of the Ethernet header onward. For
120− * %OVS_PACKET_CMD_ACTION, %OVS_PACKET_ATTR_PACKET reflects changes made by
121− * actions preceding %OVS_ACTION_ATTR_USERSPACE, but %OVS_PACKET_ATTR_KEY is
122− * the flow key extracted from the packet as originally received.
123− * @OVS_PACKET_ATTR_KEY: Present for all notifications. Contains the flow key
124− * extracted from the packet as nested %OVS_KEY_ATTR_* attributes. This allows
125− * userspace to adapt its flow setup strategy by comparing its notion of the
126− * flow key against the kernel's.
127− * @OVS_PACKET_ATTR_ACTIONS: Contains actions for the packet. Used
128− * for %OVS_PACKET_CMD_EXECUTE. It has nested %OVS_ACTION_ATTR_* attributes.
129− * @OVS_PACKET_ATTR_USERDATA: Present for an %OVS_PACKET_CMD_ACTION
130− * notification if the %OVS_ACTION_ATTR_USERSPACE action specified an
131− * %OVS_USERSPACE_ATTR_USERDATA attribute, with the same length and content
132− * specified there.
133− *
134− * These attributes follow the &struct ovs_header within the Generic Netlink
135− * payload for %OVS_PACKET_* commands.
136− */
137−enum ovs_packet_attr {
138− OVS_PACKET_ATTR_UNSPEC,
139− OVS_PACKET_ATTR_PACKET, /* Packet data. */
140− OVS_PACKET_ATTR_KEY, /* Nested OVS_KEY_ATTR_* attributes. */
141− OVS_PACKET_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
142− OVS_PACKET_ATTR_USERDATA, /* OVS_ACTION_ATTR_USERSPACE arg. */
143− __OVS_PACKET_ATTR_MAX
144−};
145−
146−#define OVS_PACKET_ATTR_MAX (__OVS_PACKET_ATTR_MAX - 1)
147−
148−/* Virtual ports. */
149−
150−#define OVS_VPORT_FAMILY "ovs_vport"
151−#define OVS_VPORT_MCGROUP "ovs_vport"
152−#define OVS_VPORT_VERSION 0x1
153−
154−enum ovs_vport_cmd {
155− OVS_VPORT_CMD_UNSPEC,
156− OVS_VPORT_CMD_NEW,
157− OVS_VPORT_CMD_DEL,
158− OVS_VPORT_CMD_GET,
159− OVS_VPORT_CMD_SET
160−};
161−
162−enum ovs_vport_type {
163− OVS_VPORT_TYPE_UNSPEC,
164− OVS_VPORT_TYPE_NETDEV, /* network device */
165− OVS_VPORT_TYPE_INTERNAL, /* network device implemented by datapath */
166− __OVS_VPORT_TYPE_MAX
167−};
168−
169−#define OVS_VPORT_TYPE_MAX (__OVS_VPORT_TYPE_MAX - 1)
170−
171−/**
172− * enum ovs_vport_attr - attributes for %OVS_VPORT_* commands.
173− * @OVS_VPORT_ATTR_PORT_NO: 32-bit port number within datapath.
174− * @OVS_VPORT_ATTR_TYPE: 32-bit %OVS_VPORT_TYPE_* constant describing the type
175− * of vport.
176− * @OVS_VPORT_ATTR_NAME: Name of vport. For a vport based on a network device
177− * this is the name of the network device. Maximum length %IFNAMSIZ-1 bytes
178− * plus a null terminator.
179− * @OVS_VPORT_ATTR_OPTIONS: Vport-specific configuration information.
180− * @OVS_VPORT_ATTR_UPCALL_PID: The Netlink socket in userspace that
181− * OVS_PACKET_CMD_MISS upcalls will be directed to for packets received on
182− * this port. A value of zero indicates that upcalls should not be sent.
183− * @OVS_VPORT_ATTR_STATS: A &struct ovs_vport_stats giving statistics for
184− * packets sent or received through the vport.
185− *
186− * These attributes follow the &struct ovs_header within the Generic Netlink
187− * payload for %OVS_VPORT_* commands.
188− *
189− * For %OVS_VPORT_CMD_NEW requests, the %OVS_VPORT_ATTR_TYPE and
190− * %OVS_VPORT_ATTR_NAME attributes are required. %OVS_VPORT_ATTR_PORT_NO is
191− * optional; if not specified a free port number is automatically selected.
192− * Whether %OVS_VPORT_ATTR_OPTIONS is required or optional depends on the type
193− * of vport.
194− * and other attributes are ignored.
195− *
196− * For other requests, if %OVS_VPORT_ATTR_NAME is specified then it is used to
197− * look up the vport to operate on; otherwise dp_idx from the &struct
198− * ovs_header plus %OVS_VPORT_ATTR_PORT_NO determine the vport.
199− */
200−enum ovs_vport_attr {
201− OVS_VPORT_ATTR_UNSPEC,
202− OVS_VPORT_ATTR_PORT_NO, /* u32 port number within datapath */
203− OVS_VPORT_ATTR_TYPE, /* u32 OVS_VPORT_TYPE_* constant. */
204− OVS_VPORT_ATTR_NAME, /* string name, up to IFNAMSIZ bytes long */
205− OVS_VPORT_ATTR_OPTIONS, /* nested attributes, varies by vport type */
206− OVS_VPORT_ATTR_UPCALL_PID, /* u32 Netlink PID to receive upcalls */
207− OVS_VPORT_ATTR_STATS, /* struct ovs_vport_stats */
208− __OVS_VPORT_ATTR_MAX
209−};
210−
211−#define OVS_VPORT_ATTR_MAX (__OVS_VPORT_ATTR_MAX - 1)
212−
213−/* Flows. */
214−
215−#define OVS_FLOW_FAMILY "ovs_flow"
216−#define OVS_FLOW_MCGROUP "ovs_flow"
217−#define OVS_FLOW_VERSION 0x1
218−
219−enum ovs_flow_cmd {
220− OVS_FLOW_CMD_UNSPEC,
221− OVS_FLOW_CMD_NEW,
222− OVS_FLOW_CMD_DEL,
223− OVS_FLOW_CMD_GET,
224− OVS_FLOW_CMD_SET
225−};
226−
227−struct ovs_flow_stats {
228− __u64 n_packets; /* Number of matched packets. */
229− __u64 n_bytes; /* Number of matched bytes. */
230−};
231−
232−enum ovs_key_attr {
233− OVS_KEY_ATTR_UNSPEC,
234− OVS_KEY_ATTR_ENCAP, /* Nested set of encapsulated attributes. */
235− OVS_KEY_ATTR_PRIORITY, /* u32 skb->priority */
236− OVS_KEY_ATTR_IN_PORT, /* u32 OVS dp port number */
237− OVS_KEY_ATTR_ETHERNET, /* struct ovs_key_ethernet */
238− OVS_KEY_ATTR_VLAN, /* be16 VLAN TCI */
239− OVS_KEY_ATTR_ETHERTYPE, /* be16 Ethernet type */
240− OVS_KEY_ATTR_IPV4, /* struct ovs_key_ipv4 */
241− OVS_KEY_ATTR_IPV6, /* struct ovs_key_ipv6 */
242− OVS_KEY_ATTR_TCP, /* struct ovs_key_tcp */
243− OVS_KEY_ATTR_UDP, /* struct ovs_key_udp */
244− OVS_KEY_ATTR_ICMP, /* struct ovs_key_icmp */
245− OVS_KEY_ATTR_ICMPV6, /* struct ovs_key_icmpv6 */
246− OVS_KEY_ATTR_ARP, /* struct ovs_key_arp */
247− OVS_KEY_ATTR_ND, /* struct ovs_key_nd */
248− OVS_KEY_ATTR_SKB_MARK, /* u32 skb mark */
249− __OVS_KEY_ATTR_MAX
250−};
251−
252−#define OVS_KEY_ATTR_MAX (__OVS_KEY_ATTR_MAX - 1)
253−
254−/**
255− * enum ovs_frag_type - IPv4 and IPv6 fragment type
256− * @OVS_FRAG_TYPE_NONE: Packet is not a fragment.
257− * @OVS_FRAG_TYPE_FIRST: Packet is a fragment with offset 0.
258− * @OVS_FRAG_TYPE_LATER: Packet is a fragment with nonzero offset.
259− *
260− * Used as the @ipv4_frag in &struct ovs_key_ipv4 and as @ipv6_frag &struct
261− * ovs_key_ipv6.
262− */
263−enum ovs_frag_type {
264− OVS_FRAG_TYPE_NONE,
265− OVS_FRAG_TYPE_FIRST,
266− OVS_FRAG_TYPE_LATER,
267− __OVS_FRAG_TYPE_MAX
268−};
269−
270−#define OVS_FRAG_TYPE_MAX (__OVS_FRAG_TYPE_MAX - 1)
271−
272−struct ovs_key_ethernet {
273− __u8 eth_src[ETH_ALEN];
274− __u8 eth_dst[ETH_ALEN];
275−};
276−
277−struct ovs_key_ipv4 {
278− __be32 ipv4_src;
279− __be32 ipv4_dst;
280− __u8 ipv4_proto;
281− __u8 ipv4_tos;
282− __u8 ipv4_ttl;
283− __u8 ipv4_frag; /* One of OVS_FRAG_TYPE_*. */
284−};
285−
286−struct ovs_key_ipv6 {
287− __be32 ipv6_src[4];
288− __be32 ipv6_dst[4];
289− __be32 ipv6_label; /* 20-bits in least-significant bits. */
290− __u8 ipv6_proto;
291− __u8 ipv6_tclass;
292− __u8 ipv6_hlimit;
293− __u8 ipv6_frag; /* One of OVS_FRAG_TYPE_*. */
294−};
295−
296−struct ovs_key_tcp {
297− __be16 tcp_src;
298− __be16 tcp_dst;
299−};
300−
301−struct ovs_key_udp {
302− __be16 udp_src;
303− __be16 udp_dst;
304−};
305−
306−struct ovs_key_icmp {
307− __u8 icmp_type;
308− __u8 icmp_code;
309−};
310−
311−struct ovs_key_icmpv6 {
312− __u8 icmpv6_type;
313− __u8 icmpv6_code;
314−};
315−
316−struct ovs_key_arp {
317− __be32 arp_sip;
318− __be32 arp_tip;
319− __be16 arp_op;
320− __u8 arp_sha[ETH_ALEN];
321− __u8 arp_tha[ETH_ALEN];
322−};
323−
324−struct ovs_key_nd {
325− __u32 nd_target[4];
326− __u8 nd_sll[ETH_ALEN];
327− __u8 nd_tll[ETH_ALEN];
328−};
329−
330−/**
331− * enum ovs_flow_attr - attributes for %OVS_FLOW_* commands.
332− * @OVS_FLOW_ATTR_KEY: Nested %OVS_KEY_ATTR_* attributes specifying the flow
333− * key. Always present in notifications. Required for all requests (except
334− * dumps).
335− * @OVS_FLOW_ATTR_ACTIONS: Nested %OVS_ACTION_ATTR_* attributes specifying
336− * the actions to take for packets that match the key. Always present in
337− * notifications. Required for %OVS_FLOW_CMD_NEW requests, optional for
338− * %OVS_FLOW_CMD_SET requests.
339− * @OVS_FLOW_ATTR_STATS: &struct ovs_flow_stats giving statistics for this
340− * flow. Present in notifications if the stats would be nonzero. Ignored in
341− * requests.
342− * @OVS_FLOW_ATTR_TCP_FLAGS: An 8-bit value giving the OR'd value of all of the
343− * TCP flags seen on packets in this flow. Only present in notifications for
344− * TCP flows, and only if it would be nonzero. Ignored in requests.
345− * @OVS_FLOW_ATTR_USED: A 64-bit integer giving the time, in milliseconds on
346− * the system monotonic clock, at which a packet was last processed for this
347− * flow. Only present in notifications if a packet has been processed for this
348− * flow. Ignored in requests.
349− * @OVS_FLOW_ATTR_CLEAR: If present in a %OVS_FLOW_CMD_SET request, clears the
350− * last-used time, accumulated TCP flags, and statistics for this flow.
351− * Otherwise ignored in requests. Never present in notifications.
352− *
353− * These attributes follow the &struct ovs_header within the Generic Netlink
354− * payload for %OVS_FLOW_* commands.
355− */
356−enum ovs_flow_attr {
357− OVS_FLOW_ATTR_UNSPEC,
358− OVS_FLOW_ATTR_KEY, /* Sequence of OVS_KEY_ATTR_* attributes. */
359− OVS_FLOW_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
360− OVS_FLOW_ATTR_STATS, /* struct ovs_flow_stats. */
361− OVS_FLOW_ATTR_TCP_FLAGS, /* 8-bit OR'd TCP flags. */
362− OVS_FLOW_ATTR_USED, /* u64 msecs last used in monotonic time. */
363− OVS_FLOW_ATTR_CLEAR, /* Flag to clear stats, tcp_flags, used. */
364− __OVS_FLOW_ATTR_MAX
365−};
366−
367−#define OVS_FLOW_ATTR_MAX (__OVS_FLOW_ATTR_MAX - 1)
368−
369−/**
370− * enum ovs_sample_attr - Attributes for %OVS_ACTION_ATTR_SAMPLE action.
371− * @OVS_SAMPLE_ATTR_PROBABILITY: 32-bit fraction of packets to sample with
372− * @OVS_ACTION_ATTR_SAMPLE. A value of 0 samples no packets, a value of
373− * %UINT32_MAX samples all packets and intermediate values sample intermediate
374− * fractions of packets.
375− * @OVS_SAMPLE_ATTR_ACTIONS: Set of actions to execute in sampling event.
376− * Actions are passed as nested attributes.
377− *
378− * Executes the specified actions with the given probability on a per-packet
379− * basis.
380− */
381−enum ovs_sample_attr {
382− OVS_SAMPLE_ATTR_UNSPEC,
383− OVS_SAMPLE_ATTR_PROBABILITY, /* u32 number */
384− OVS_SAMPLE_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
385− __OVS_SAMPLE_ATTR_MAX,
386−};
387−
388−#define OVS_SAMPLE_ATTR_MAX (__OVS_SAMPLE_ATTR_MAX - 1)
389−
390−/**
391− * enum ovs_userspace_attr - Attributes for %OVS_ACTION_ATTR_USERSPACE action.
392− * @OVS_USERSPACE_ATTR_PID: u32 Netlink PID to which the %OVS_PACKET_CMD_ACTION
393− * message should be sent. Required.
394− * @OVS_USERSPACE_ATTR_USERDATA: If present, its variable-length argument is
395− * copied to the %OVS_PACKET_CMD_ACTION message as %OVS_PACKET_ATTR_USERDATA.
396− */
397−enum ovs_userspace_attr {
398− OVS_USERSPACE_ATTR_UNSPEC,
399− OVS_USERSPACE_ATTR_PID, /* u32 Netlink PID to receive upcalls. */
400− OVS_USERSPACE_ATTR_USERDATA, /* Optional user-specified cookie. */
401− __OVS_USERSPACE_ATTR_MAX
402−};
403−
404−#define OVS_USERSPACE_ATTR_MAX (__OVS_USERSPACE_ATTR_MAX - 1)
405−
406−/**
407− * struct ovs_action_push_vlan - %OVS_ACTION_ATTR_PUSH_VLAN action argument.
408− * @vlan_tpid: Tag protocol identifier (TPID) to push.
409− * @vlan_tci: Tag control identifier (TCI) to push. The CFI bit must be set
410− * (but it will not be set in the 802.1Q header that is pushed).
411− *
412− * The @vlan_tpid value is typically %ETH_P_8021Q. The only acceptable TPID
413− * values are those that the kernel module also parses as 802.1Q headers, to
414− * prevent %OVS_ACTION_ATTR_PUSH_VLAN followed by %OVS_ACTION_ATTR_POP_VLAN
415− * from having surprising results.
416− */
417−struct ovs_action_push_vlan {
418− __be16 vlan_tpid; /* 802.1Q TPID. */
419− __be16 vlan_tci; /* 802.1Q TCI (VLAN ID and priority). */
420−};
421−
422−/**
423− * enum ovs_action_attr - Action types.
424− *
425− * @OVS_ACTION_ATTR_OUTPUT: Output packet to port.
426− * @OVS_ACTION_ATTR_USERSPACE: Send packet to userspace according to nested
427− * %OVS_USERSPACE_ATTR_* attributes.
428− * @OVS_ACTION_ATTR_SET: Replaces the contents of an existing header. The
429− * single nested %OVS_KEY_ATTR_* attribute specifies a header to modify and its
430− * value.
431− * @OVS_ACTION_ATTR_PUSH_VLAN: Push a new outermost 802.1Q header onto the
432− * packet.
433− * @OVS_ACTION_ATTR_POP_VLAN: Pop the outermost 802.1Q header off the packet.
434− * @OVS_ACTION_ATTR_SAMPLE: Probabilitically executes actions, as specified in
435− * the nested %OVS_SAMPLE_ATTR_* attributes.
436− *
437− * Only a single header can be set with a single %OVS_ACTION_ATTR_SET. Not all
438− * fields within a header are modifiable, e.g. the IPv4 protocol and fragment
439− * type may not be changed.
440− */
441−
442−enum ovs_action_attr {
443− OVS_ACTION_ATTR_UNSPEC,
444− OVS_ACTION_ATTR_OUTPUT, /* u32 port number. */
445− OVS_ACTION_ATTR_USERSPACE, /* Nested OVS_USERSPACE_ATTR_*. */
446− OVS_ACTION_ATTR_SET, /* One nested OVS_KEY_ATTR_*. */
447− OVS_ACTION_ATTR_PUSH_VLAN, /* struct ovs_action_push_vlan. */
448− OVS_ACTION_ATTR_POP_VLAN, /* No argument. */
449− OVS_ACTION_ATTR_SAMPLE, /* Nested OVS_SAMPLE_ATTR_*. */
450− __OVS_ACTION_ATTR_MAX
451−};
452−
453−#define OVS_ACTION_ATTR_MAX (__OVS_ACTION_ATTR_MAX - 1)
22+#include <uapi/linux/openvswitch.h>
45423
45524 #endif /* _LINUX_OPENVSWITCH_H */
include/uapi/linux/Kbuild+1−0
@@ -285,6 +285,7 @@ header-y += nvram.h · 284 unmodified lines
285285 header-y += omap3isp.h
286286 header-y += omapfb.h
287287 header-y += oom.h
288+header-y += openvswitch.h
288289 header-y += packet_diag.h
289290 header-y += param.h
290291 header-y += parport.h
include/uapi/linux/openvswitch.h+456−0
@@ -0,0 +1,456 @@
1+
2+/*
3+ * Copyright (c) 2007-2011 Nicira Networks.
4+ *
5+ * This program is free software; you can redistribute it and/or
6+ * modify it under the terms of version 2 of the GNU General Public
7+ * License as published by the Free Software Foundation.
8+ *
9+ * This program is distributed in the hope that it will be useful, but
10+ * WITHOUT ANY WARRANTY; without even the implied warranty of
11+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12+ * General Public License for more details.
13+ *
14+ * You should have received a copy of the GNU General Public License
15+ * along with this program; if not, write to the Free Software
16+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17+ * 02110-1301, USA
18+ */
19+
20+#ifndef _UAPI__LINUX_OPENVSWITCH_H
21+#define _UAPI__LINUX_OPENVSWITCH_H 1
22+
23+#include <linux/types.h>
24+#include <linux/if_ether.h>
25+
26+/**
27+ * struct ovs_header - header for OVS Generic Netlink messages.
28+ * @dp_ifindex: ifindex of local port for datapath (0 to make a request not
29+ * specific to a datapath).
30+ *
31+ * Attributes following the header are specific to a particular OVS Generic
32+ * Netlink family, but all of the OVS families use this header.
33+ */
34+
35+struct ovs_header {
36+ int dp_ifindex;
37+};
38+
39+/* Datapaths. */
40+
41+#define OVS_DATAPATH_FAMILY "ovs_datapath"
42+#define OVS_DATAPATH_MCGROUP "ovs_datapath"
43+#define OVS_DATAPATH_VERSION 0x1
44+
45+enum ovs_datapath_cmd {
46+ OVS_DP_CMD_UNSPEC,
47+ OVS_DP_CMD_NEW,
48+ OVS_DP_CMD_DEL,
49+ OVS_DP_CMD_GET,
50+ OVS_DP_CMD_SET
51+};
52+
53+/**
54+ * enum ovs_datapath_attr - attributes for %OVS_DP_* commands.
55+ * @OVS_DP_ATTR_NAME: Name of the network device that serves as the "local
56+ * port". This is the name of the network device whose dp_ifindex is given in
57+ * the &struct ovs_header. Always present in notifications. Required in
58+ * %OVS_DP_NEW requests. May be used as an alternative to specifying
59+ * dp_ifindex in other requests (with a dp_ifindex of 0).
60+ * @OVS_DP_ATTR_UPCALL_PID: The Netlink socket in userspace that is initially
61+ * set on the datapath port (for OVS_ACTION_ATTR_MISS). Only valid on
62+ * %OVS_DP_CMD_NEW requests. A value of zero indicates that upcalls should
63+ * not be sent.
64+ * @OVS_DP_ATTR_STATS: Statistics about packets that have passed through the
65+ * datapath. Always present in notifications.
66+ *
67+ * These attributes follow the &struct ovs_header within the Generic Netlink
68+ * payload for %OVS_DP_* commands.
69+ */
70+enum ovs_datapath_attr {
71+ OVS_DP_ATTR_UNSPEC,
72+ OVS_DP_ATTR_NAME, /* name of dp_ifindex netdev */
73+ OVS_DP_ATTR_UPCALL_PID, /* Netlink PID to receive upcalls */
74+ OVS_DP_ATTR_STATS, /* struct ovs_dp_stats */
75+ __OVS_DP_ATTR_MAX
76+};
77+
78+#define OVS_DP_ATTR_MAX (__OVS_DP_ATTR_MAX - 1)
79+
80+struct ovs_dp_stats {
81+ __u64 n_hit; /* Number of flow table matches. */
82+ __u64 n_missed; /* Number of flow table misses. */
83+ __u64 n_lost; /* Number of misses not sent to userspace. */
84+ __u64 n_flows; /* Number of flows present */
85+};
86+
87+struct ovs_vport_stats {
88+ __u64 rx_packets; /* total packets received */
89+ __u64 tx_packets; /* total packets transmitted */
90+ __u64 rx_bytes; /* total bytes received */
91+ __u64 tx_bytes; /* total bytes transmitted */
92+ __u64 rx_errors; /* bad packets received */
93+ __u64 tx_errors; /* packet transmit problems */
94+ __u64 rx_dropped; /* no space in linux buffers */
95+ __u64 tx_dropped; /* no space available in linux */
96+};
97+
98+/* Fixed logical ports. */
99+#define OVSP_LOCAL ((__u32)0)
100+
101+/* Packet transfer. */
102+
103+#define OVS_PACKET_FAMILY "ovs_packet"
104+#define OVS_PACKET_VERSION 0x1
105+
106+enum ovs_packet_cmd {
107+ OVS_PACKET_CMD_UNSPEC,
108+
109+ /* Kernel-to-user notifications. */
110+ OVS_PACKET_CMD_MISS, /* Flow table miss. */
111+ OVS_PACKET_CMD_ACTION, /* OVS_ACTION_ATTR_USERSPACE action. */
112+
113+ /* Userspace commands. */
114+ OVS_PACKET_CMD_EXECUTE /* Apply actions to a packet. */
115+};
116+
117+/**
118+ * enum ovs_packet_attr - attributes for %OVS_PACKET_* commands.
119+ * @OVS_PACKET_ATTR_PACKET: Present for all notifications. Contains the entire
120+ * packet as received, from the start of the Ethernet header onward. For
121+ * %OVS_PACKET_CMD_ACTION, %OVS_PACKET_ATTR_PACKET reflects changes made by
122+ * actions preceding %OVS_ACTION_ATTR_USERSPACE, but %OVS_PACKET_ATTR_KEY is
123+ * the flow key extracted from the packet as originally received.
124+ * @OVS_PACKET_ATTR_KEY: Present for all notifications. Contains the flow key
125+ * extracted from the packet as nested %OVS_KEY_ATTR_* attributes. This allows
126+ * userspace to adapt its flow setup strategy by comparing its notion of the
127+ * flow key against the kernel's.
128+ * @OVS_PACKET_ATTR_ACTIONS: Contains actions for the packet. Used
129+ * for %OVS_PACKET_CMD_EXECUTE. It has nested %OVS_ACTION_ATTR_* attributes.
130+ * @OVS_PACKET_ATTR_USERDATA: Present for an %OVS_PACKET_CMD_ACTION
131+ * notification if the %OVS_ACTION_ATTR_USERSPACE action specified an
132+ * %OVS_USERSPACE_ATTR_USERDATA attribute, with the same length and content
133+ * specified there.
134+ *
135+ * These attributes follow the &struct ovs_header within the Generic Netlink
136+ * payload for %OVS_PACKET_* commands.
137+ */
138+enum ovs_packet_attr {
139+ OVS_PACKET_ATTR_UNSPEC,
140+ OVS_PACKET_ATTR_PACKET, /* Packet data. */
141+ OVS_PACKET_ATTR_KEY, /* Nested OVS_KEY_ATTR_* attributes. */
142+ OVS_PACKET_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
143+ OVS_PACKET_ATTR_USERDATA, /* OVS_ACTION_ATTR_USERSPACE arg. */
144+ __OVS_PACKET_ATTR_MAX
145+};
146+
147+#define OVS_PACKET_ATTR_MAX (__OVS_PACKET_ATTR_MAX - 1)
148+
149+/* Virtual ports. */
150+
151+#define OVS_VPORT_FAMILY "ovs_vport"
152+#define OVS_VPORT_MCGROUP "ovs_vport"
153+#define OVS_VPORT_VERSION 0x1
154+
155+enum ovs_vport_cmd {
156+ OVS_VPORT_CMD_UNSPEC,
157+ OVS_VPORT_CMD_NEW,
158+ OVS_VPORT_CMD_DEL,
159+ OVS_VPORT_CMD_GET,
160+ OVS_VPORT_CMD_SET
161+};
162+
163+enum ovs_vport_type {
164+ OVS_VPORT_TYPE_UNSPEC,
165+ OVS_VPORT_TYPE_NETDEV, /* network device */
166+ OVS_VPORT_TYPE_INTERNAL, /* network device implemented by datapath */
167+ __OVS_VPORT_TYPE_MAX
168+};
169+
170+#define OVS_VPORT_TYPE_MAX (__OVS_VPORT_TYPE_MAX - 1)
171+
172+/**
173+ * enum ovs_vport_attr - attributes for %OVS_VPORT_* commands.
174+ * @OVS_VPORT_ATTR_PORT_NO: 32-bit port number within datapath.
175+ * @OVS_VPORT_ATTR_TYPE: 32-bit %OVS_VPORT_TYPE_* constant describing the type
176+ * of vport.
177+ * @OVS_VPORT_ATTR_NAME: Name of vport. For a vport based on a network device
178+ * this is the name of the network device. Maximum length %IFNAMSIZ-1 bytes
179+ * plus a null terminator.
180+ * @OVS_VPORT_ATTR_OPTIONS: Vport-specific configuration information.
181+ * @OVS_VPORT_ATTR_UPCALL_PID: The Netlink socket in userspace that
182+ * OVS_PACKET_CMD_MISS upcalls will be directed to for packets received on
183+ * this port. A value of zero indicates that upcalls should not be sent.
184+ * @OVS_VPORT_ATTR_STATS: A &struct ovs_vport_stats giving statistics for
185+ * packets sent or received through the vport.
186+ *
187+ * These attributes follow the &struct ovs_header within the Generic Netlink
188+ * payload for %OVS_VPORT_* commands.
189+ *
190+ * For %OVS_VPORT_CMD_NEW requests, the %OVS_VPORT_ATTR_TYPE and
191+ * %OVS_VPORT_ATTR_NAME attributes are required. %OVS_VPORT_ATTR_PORT_NO is
192+ * optional; if not specified a free port number is automatically selected.
193+ * Whether %OVS_VPORT_ATTR_OPTIONS is required or optional depends on the type
194+ * of vport.
195+ * and other attributes are ignored.
196+ *
197+ * For other requests, if %OVS_VPORT_ATTR_NAME is specified then it is used to
198+ * look up the vport to operate on; otherwise dp_idx from the &struct
199+ * ovs_header plus %OVS_VPORT_ATTR_PORT_NO determine the vport.
200+ */
201+enum ovs_vport_attr {
202+ OVS_VPORT_ATTR_UNSPEC,
203+ OVS_VPORT_ATTR_PORT_NO, /* u32 port number within datapath */
204+ OVS_VPORT_ATTR_TYPE, /* u32 OVS_VPORT_TYPE_* constant. */
205+ OVS_VPORT_ATTR_NAME, /* string name, up to IFNAMSIZ bytes long */
206+ OVS_VPORT_ATTR_OPTIONS, /* nested attributes, varies by vport type */
207+ OVS_VPORT_ATTR_UPCALL_PID, /* u32 Netlink PID to receive upcalls */
208+ OVS_VPORT_ATTR_STATS, /* struct ovs_vport_stats */
209+ __OVS_VPORT_ATTR_MAX
210+};
211+
212+#define OVS_VPORT_ATTR_MAX (__OVS_VPORT_ATTR_MAX - 1)
213+
214+/* Flows. */
215+
216+#define OVS_FLOW_FAMILY "ovs_flow"
217+#define OVS_FLOW_MCGROUP "ovs_flow"
218+#define OVS_FLOW_VERSION 0x1
219+
220+enum ovs_flow_cmd {
221+ OVS_FLOW_CMD_UNSPEC,
222+ OVS_FLOW_CMD_NEW,
223+ OVS_FLOW_CMD_DEL,
224+ OVS_FLOW_CMD_GET,
225+ OVS_FLOW_CMD_SET
226+};
227+
228+struct ovs_flow_stats {
229+ __u64 n_packets; /* Number of matched packets. */
230+ __u64 n_bytes; /* Number of matched bytes. */
231+};
232+
233+enum ovs_key_attr {
234+ OVS_KEY_ATTR_UNSPEC,
235+ OVS_KEY_ATTR_ENCAP, /* Nested set of encapsulated attributes. */
236+ OVS_KEY_ATTR_PRIORITY, /* u32 skb->priority */
237+ OVS_KEY_ATTR_IN_PORT, /* u32 OVS dp port number */
238+ OVS_KEY_ATTR_ETHERNET, /* struct ovs_key_ethernet */
239+ OVS_KEY_ATTR_VLAN, /* be16 VLAN TCI */
240+ OVS_KEY_ATTR_ETHERTYPE, /* be16 Ethernet type */
241+ OVS_KEY_ATTR_IPV4, /* struct ovs_key_ipv4 */
242+ OVS_KEY_ATTR_IPV6, /* struct ovs_key_ipv6 */
243+ OVS_KEY_ATTR_TCP, /* struct ovs_key_tcp */
244+ OVS_KEY_ATTR_UDP, /* struct ovs_key_udp */
245+ OVS_KEY_ATTR_ICMP, /* struct ovs_key_icmp */
246+ OVS_KEY_ATTR_ICMPV6, /* struct ovs_key_icmpv6 */
247+ OVS_KEY_ATTR_ARP, /* struct ovs_key_arp */
248+ OVS_KEY_ATTR_ND, /* struct ovs_key_nd */
249+ OVS_KEY_ATTR_SKB_MARK, /* u32 skb mark */
250+ __OVS_KEY_ATTR_MAX
251+};
252+
253+#define OVS_KEY_ATTR_MAX (__OVS_KEY_ATTR_MAX - 1)
254+
255+/**
256+ * enum ovs_frag_type - IPv4 and IPv6 fragment type
257+ * @OVS_FRAG_TYPE_NONE: Packet is not a fragment.
258+ * @OVS_FRAG_TYPE_FIRST: Packet is a fragment with offset 0.
259+ * @OVS_FRAG_TYPE_LATER: Packet is a fragment with nonzero offset.
260+ *
261+ * Used as the @ipv4_frag in &struct ovs_key_ipv4 and as @ipv6_frag &struct
262+ * ovs_key_ipv6.
263+ */
264+enum ovs_frag_type {
265+ OVS_FRAG_TYPE_NONE,
266+ OVS_FRAG_TYPE_FIRST,
267+ OVS_FRAG_TYPE_LATER,
268+ __OVS_FRAG_TYPE_MAX
269+};
270+
271+#define OVS_FRAG_TYPE_MAX (__OVS_FRAG_TYPE_MAX - 1)
272+
273+struct ovs_key_ethernet {
274+ __u8 eth_src[ETH_ALEN];
275+ __u8 eth_dst[ETH_ALEN];
276+};
277+
278+struct ovs_key_ipv4 {
279+ __be32 ipv4_src;
280+ __be32 ipv4_dst;
281+ __u8 ipv4_proto;
282+ __u8 ipv4_tos;
283+ __u8 ipv4_ttl;
284+ __u8 ipv4_frag; /* One of OVS_FRAG_TYPE_*. */
285+};
286+
287+struct ovs_key_ipv6 {
288+ __be32 ipv6_src[4];
289+ __be32 ipv6_dst[4];
290+ __be32 ipv6_label; /* 20-bits in least-significant bits. */
291+ __u8 ipv6_proto;
292+ __u8 ipv6_tclass;
293+ __u8 ipv6_hlimit;
294+ __u8 ipv6_frag; /* One of OVS_FRAG_TYPE_*. */
295+};
296+
297+struct ovs_key_tcp {
298+ __be16 tcp_src;
299+ __be16 tcp_dst;
300+};
301+
302+struct ovs_key_udp {
303+ __be16 udp_src;
304+ __be16 udp_dst;
305+};
306+
307+struct ovs_key_icmp {
308+ __u8 icmp_type;
309+ __u8 icmp_code;
310+};
311+
312+struct ovs_key_icmpv6 {
313+ __u8 icmpv6_type;
314+ __u8 icmpv6_code;
315+};
316+
317+struct ovs_key_arp {
318+ __be32 arp_sip;
319+ __be32 arp_tip;
320+ __be16 arp_op;
321+ __u8 arp_sha[ETH_ALEN];
322+ __u8 arp_tha[ETH_ALEN];
323+};
324+
325+struct ovs_key_nd {
326+ __u32 nd_target[4];
327+ __u8 nd_sll[ETH_ALEN];
328+ __u8 nd_tll[ETH_ALEN];
329+};
330+
331+/**
332+ * enum ovs_flow_attr - attributes for %OVS_FLOW_* commands.
333+ * @OVS_FLOW_ATTR_KEY: Nested %OVS_KEY_ATTR_* attributes specifying the flow
334+ * key. Always present in notifications. Required for all requests (except
335+ * dumps).
336+ * @OVS_FLOW_ATTR_ACTIONS: Nested %OVS_ACTION_ATTR_* attributes specifying
337+ * the actions to take for packets that match the key. Always present in
338+ * notifications. Required for %OVS_FLOW_CMD_NEW requests, optional for
339+ * %OVS_FLOW_CMD_SET requests.
340+ * @OVS_FLOW_ATTR_STATS: &struct ovs_flow_stats giving statistics for this
341+ * flow. Present in notifications if the stats would be nonzero. Ignored in
342+ * requests.
343+ * @OVS_FLOW_ATTR_TCP_FLAGS: An 8-bit value giving the OR'd value of all of the
344+ * TCP flags seen on packets in this flow. Only present in notifications for
345+ * TCP flows, and only if it would be nonzero. Ignored in requests.
346+ * @OVS_FLOW_ATTR_USED: A 64-bit integer giving the time, in milliseconds on
347+ * the system monotonic clock, at which a packet was last processed for this
348+ * flow. Only present in notifications if a packet has been processed for this
349+ * flow. Ignored in requests.
350+ * @OVS_FLOW_ATTR_CLEAR: If present in a %OVS_FLOW_CMD_SET request, clears the
351+ * last-used time, accumulated TCP flags, and statistics for this flow.
352+ * Otherwise ignored in requests. Never present in notifications.
353+ *
354+ * These attributes follow the &struct ovs_header within the Generic Netlink
355+ * payload for %OVS_FLOW_* commands.
356+ */
357+enum ovs_flow_attr {
358+ OVS_FLOW_ATTR_UNSPEC,
359+ OVS_FLOW_ATTR_KEY, /* Sequence of OVS_KEY_ATTR_* attributes. */
360+ OVS_FLOW_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
361+ OVS_FLOW_ATTR_STATS, /* struct ovs_flow_stats. */
362+ OVS_FLOW_ATTR_TCP_FLAGS, /* 8-bit OR'd TCP flags. */
363+ OVS_FLOW_ATTR_USED, /* u64 msecs last used in monotonic time. */
364+ OVS_FLOW_ATTR_CLEAR, /* Flag to clear stats, tcp_flags, used. */
365+ __OVS_FLOW_ATTR_MAX
366+};
367+
368+#define OVS_FLOW_ATTR_MAX (__OVS_FLOW_ATTR_MAX - 1)
369+
370+/**
371+ * enum ovs_sample_attr - Attributes for %OVS_ACTION_ATTR_SAMPLE action.
372+ * @OVS_SAMPLE_ATTR_PROBABILITY: 32-bit fraction of packets to sample with
373+ * @OVS_ACTION_ATTR_SAMPLE. A value of 0 samples no packets, a value of
374+ * %UINT32_MAX samples all packets and intermediate values sample intermediate
375+ * fractions of packets.
376+ * @OVS_SAMPLE_ATTR_ACTIONS: Set of actions to execute in sampling event.
377+ * Actions are passed as nested attributes.
378+ *
379+ * Executes the specified actions with the given probability on a per-packet
380+ * basis.
381+ */
382+enum ovs_sample_attr {
383+ OVS_SAMPLE_ATTR_UNSPEC,
384+ OVS_SAMPLE_ATTR_PROBABILITY, /* u32 number */
385+ OVS_SAMPLE_ATTR_ACTIONS, /* Nested OVS_ACTION_ATTR_* attributes. */
386+ __OVS_SAMPLE_ATTR_MAX,
387+};
388+
389+#define OVS_SAMPLE_ATTR_MAX (__OVS_SAMPLE_ATTR_MAX - 1)
390+
391+/**
392+ * enum ovs_userspace_attr - Attributes for %OVS_ACTION_ATTR_USERSPACE action.
393+ * @OVS_USERSPACE_ATTR_PID: u32 Netlink PID to which the %OVS_PACKET_CMD_ACTION
394+ * message should be sent. Required.
395+ * @OVS_USERSPACE_ATTR_USERDATA: If present, its variable-length argument is
396+ * copied to the %OVS_PACKET_CMD_ACTION message as %OVS_PACKET_ATTR_USERDATA.
397+ */
398+enum ovs_userspace_attr {
399+ OVS_USERSPACE_ATTR_UNSPEC,
400+ OVS_USERSPACE_ATTR_PID, /* u32 Netlink PID to receive upcalls. */
401+ OVS_USERSPACE_ATTR_USERDATA, /* Optional user-specified cookie. */
402+ __OVS_USERSPACE_ATTR_MAX
403+};
404+
405+#define OVS_USERSPACE_ATTR_MAX (__OVS_USERSPACE_ATTR_MAX - 1)
406+
407+/**
408+ * struct ovs_action_push_vlan - %OVS_ACTION_ATTR_PUSH_VLAN action argument.
409+ * @vlan_tpid: Tag protocol identifier (TPID) to push.
410+ * @vlan_tci: Tag control identifier (TCI) to push. The CFI bit must be set
411+ * (but it will not be set in the 802.1Q header that is pushed).
412+ *
413+ * The @vlan_tpid value is typically %ETH_P_8021Q. The only acceptable TPID
414+ * values are those that the kernel module also parses as 802.1Q headers, to
415+ * prevent %OVS_ACTION_ATTR_PUSH_VLAN followed by %OVS_ACTION_ATTR_POP_VLAN
416+ * from having surprising results.
417+ */
418+struct ovs_action_push_vlan {
419+ __be16 vlan_tpid; /* 802.1Q TPID. */
420+ __be16 vlan_tci; /* 802.1Q TCI (VLAN ID and priority). */
421+};
422+
423+/**
424+ * enum ovs_action_attr - Action types.
425+ *
426+ * @OVS_ACTION_ATTR_OUTPUT: Output packet to port.
427+ * @OVS_ACTION_ATTR_USERSPACE: Send packet to userspace according to nested
428+ * %OVS_USERSPACE_ATTR_* attributes.
429+ * @OVS_ACTION_ATTR_SET: Replaces the contents of an existing header. The
430+ * single nested %OVS_KEY_ATTR_* attribute specifies a header to modify and its
431+ * value.
432+ * @OVS_ACTION_ATTR_PUSH_VLAN: Push a new outermost 802.1Q header onto the
433+ * packet.
434+ * @OVS_ACTION_ATTR_POP_VLAN: Pop the outermost 802.1Q header off the packet.
435+ * @OVS_ACTION_ATTR_SAMPLE: Probabilitically executes actions, as specified in
436+ * the nested %OVS_SAMPLE_ATTR_* attributes.
437+ *
438+ * Only a single header can be set with a single %OVS_ACTION_ATTR_SET. Not all
439+ * fields within a header are modifiable, e.g. the IPv4 protocol and fragment
440+ * type may not be changed.
441+ */
442+
443+enum ovs_action_attr {
444+ OVS_ACTION_ATTR_UNSPEC,
445+ OVS_ACTION_ATTR_OUTPUT, /* u32 port number. */
446+ OVS_ACTION_ATTR_USERSPACE, /* Nested OVS_USERSPACE_ATTR_*. */
447+ OVS_ACTION_ATTR_SET, /* One nested OVS_KEY_ATTR_*. */
448+ OVS_ACTION_ATTR_PUSH_VLAN, /* struct ovs_action_push_vlan. */
449+ OVS_ACTION_ATTR_POP_VLAN, /* No argument. */
450+ OVS_ACTION_ATTR_SAMPLE, /* Nested OVS_SAMPLE_ATTR_*. */
451+ __OVS_ACTION_ATTR_MAX
452+};
453+
454+#define OVS_ACTION_ATTR_MAX (__OVS_ACTION_ATTR_MAX - 1)
455+
456+#endif /* _LINUX_OPENVSWITCH_H */

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t