1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux 1 2 3 /* 4 * Copyright (c) 2007-2017 Nicira, Inc. 5 * 6 * This program is free software; you can redi 7 * modify it under the terms of version 2 of t 8 * License as published by the Free Software F 9 * 10 * This program is distributed in the hope tha 11 * WITHOUT ANY WARRANTY; without even the impl 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR 13 * General Public License for more details. 14 * 15 * You should have received a copy of the GNU 16 * along with this program; if not, write to t 17 * Foundation, Inc., 51 Franklin Street, Fifth 18 * 02110-1301, USA 19 */ 20 21 #ifndef _UAPI__LINUX_OPENVSWITCH_H 22 #define _UAPI__LINUX_OPENVSWITCH_H 1 23 24 #include <linux/types.h> 25 #include <linux/if_ether.h> 26 27 /** 28 * struct ovs_header - header for OVS Generic 29 * @dp_ifindex: ifindex of local port for data 30 * specific to a datapath). 31 * 32 * Attributes following the header are specifi 33 * Netlink family, but all of the OVS families 34 */ 35 36 struct ovs_header { 37 int dp_ifindex; 38 }; 39 40 /* Datapaths. */ 41 42 #define OVS_DATAPATH_FAMILY "ovs_datapath" 43 #define OVS_DATAPATH_MCGROUP "ovs_datapath" 44 45 /* V2: 46 * - API users are expected to provide OVS_D 47 * when creating the datapath. 48 */ 49 #define OVS_DATAPATH_VERSION 2 50 51 /* First OVS datapath version to support featu 52 #define OVS_DP_VER_FEATURES 2 53 54 enum ovs_datapath_cmd { 55 OVS_DP_CMD_UNSPEC, 56 OVS_DP_CMD_NEW, 57 OVS_DP_CMD_DEL, 58 OVS_DP_CMD_GET, 59 OVS_DP_CMD_SET 60 }; 61 62 /** 63 * enum ovs_datapath_attr - attributes for %OV 64 * @OVS_DP_ATTR_NAME: Name of the network devi 65 * port". This is the name of the network dev 66 * the &struct ovs_header. Always present in 67 * %OVS_DP_NEW requests. May be used as an al 68 * dp_ifindex in other requests (with a dp_ifi 69 * @OVS_DP_ATTR_UPCALL_PID: The Netlink socket 70 * set on the datapath port (for OVS_ACTION_AT 71 * %OVS_DP_CMD_NEW requests. A value of zero i 72 * not be sent. 73 * @OVS_DP_ATTR_PER_CPU_PIDS: Per-cpu array of 74 * OVS_DP_F_DISPATCH_UPCALL_PER_CPU feature is 75 * @OVS_DP_ATTR_STATS: Statistics about packet 76 * datapath. Always present in notifications. 77 * @OVS_DP_ATTR_MEGAFLOW_STATS: Statistics abo 78 * datapath. Always present in notifications. 79 * @OVS_DP_ATTR_IFINDEX: Interface index for a 80 * valid for %OVS_DP_CMD_NEW requests. 81 * 82 * These attributes follow the &struct ovs_hea 83 * payload for %OVS_DP_* commands. 84 */ 85 enum ovs_datapath_attr { 86 OVS_DP_ATTR_UNSPEC, 87 OVS_DP_ATTR_NAME, /* nam 88 OVS_DP_ATTR_UPCALL_PID, /* Net 89 OVS_DP_ATTR_STATS, /* str 90 OVS_DP_ATTR_MEGAFLOW_STATS, /* str 91 OVS_DP_ATTR_USER_FEATURES, /* OVS 92 OVS_DP_ATTR_PAD, 93 OVS_DP_ATTR_MASKS_CACHE_SIZE, 94 OVS_DP_ATTR_PER_CPU_PIDS, /* Netlink 95 * per-cpu 96 */ 97 OVS_DP_ATTR_IFINDEX, 98 __OVS_DP_ATTR_MAX 99 }; 100 101 #define OVS_DP_ATTR_MAX (__OVS_DP_ATTR_MAX - 1 102 103 struct ovs_dp_stats { 104 __u64 n_hit; /* Number of 105 __u64 n_missed; /* Number of 106 __u64 n_lost; /* Number of 107 __u64 n_flows; /* Number of 108 }; 109 110 struct ovs_dp_megaflow_stats { 111 __u64 n_mask_hit; /* Number of 112 __u32 n_masks; /* Number of 113 __u32 pad0; /* Pad for fu 114 __u64 n_cache_hit; /* Number of 115 __u64 pad1; /* Pad for fu 116 }; 117 118 struct ovs_vport_stats { 119 __u64 rx_packets; /* tot 120 __u64 tx_packets; /* tot 121 __u64 rx_bytes; /* tot 122 __u64 tx_bytes; /* tot 123 __u64 rx_errors; /* bad 124 __u64 tx_errors; /* pac 125 __u64 rx_dropped; /* no 126 __u64 tx_dropped; /* no 127 }; 128 129 /* Allow last Netlink attribute to be unaligne 130 #define OVS_DP_F_UNALIGNED (1 << 0) 131 132 /* Allow datapath to associate multiple Netlin 133 #define OVS_DP_F_VPORT_PIDS (1 << 1) 134 135 /* Allow tc offload recirc sharing */ 136 #define OVS_DP_F_TC_RECIRC_SHARING (1 << 137 138 /* Allow per-cpu dispatch of upcalls */ 139 #define OVS_DP_F_DISPATCH_UPCALL_PER_CPU 140 141 /* Fixed logical ports. */ 142 #define OVSP_LOCAL ((__u32)0) 143 144 /* Packet transfer. */ 145 146 #define OVS_PACKET_FAMILY "ovs_packet" 147 #define OVS_PACKET_VERSION 0x1 148 149 enum ovs_packet_cmd { 150 OVS_PACKET_CMD_UNSPEC, 151 152 /* Kernel-to-user notifications. */ 153 OVS_PACKET_CMD_MISS, /* Flow table 154 OVS_PACKET_CMD_ACTION, /* OVS_ACTION_ 155 156 /* Userspace commands. */ 157 OVS_PACKET_CMD_EXECUTE /* Apply actio 158 }; 159 160 /** 161 * enum ovs_packet_attr - attributes for %OVS_ 162 * @OVS_PACKET_ATTR_PACKET: Present for all no 163 * packet as received, from the start of the E 164 * %OVS_PACKET_CMD_ACTION, %OVS_PACKET_ATTR_PA 165 * actions preceding %OVS_ACTION_ATTR_USERSPAC 166 * the flow key extracted from the packet as o 167 * @OVS_PACKET_ATTR_KEY: Present for all notif 168 * extracted from the packet as nested %OVS_KE 169 * userspace to adapt its flow setup strategy 170 * flow key against the kernel's. 171 * @OVS_PACKET_ATTR_ACTIONS: Contains actions 172 * for %OVS_PACKET_CMD_EXECUTE. It has nested 173 * Also used in upcall when %OVS_ACTION_ATTR_U 174 * %OVS_USERSPACE_ATTR_ACTIONS attribute. 175 * @OVS_PACKET_ATTR_USERDATA: Present for an % 176 * notification if the %OVS_ACTION_ATTR_USERSP 177 * %OVS_USERSPACE_ATTR_USERDATA attribute, wit 178 * specified there. 179 * @OVS_PACKET_ATTR_EGRESS_TUN_KEY: Present fo 180 * notification if the %OVS_ACTION_ATTR_USERSP 181 * %OVS_USERSPACE_ATTR_EGRESS_TUN_PORT attribu 182 * output port is actually a tunnel port. Cont 183 * extracted from the packet as nested %OVS_TU 184 * @OVS_PACKET_ATTR_MRU: Present for an %OVS_P 185 * @OVS_PACKET_ATTR_LEN: Packet size before tr 186 * %OVS_PACKET_ATTR_USERSPACE action specify t 187 * size. 188 * @OVS_PACKET_ATTR_HASH: Packet hash info (e. 189 * 190 * These attributes follow the &struct ovs_hea 191 * payload for %OVS_PACKET_* commands. 192 */ 193 enum ovs_packet_attr { 194 OVS_PACKET_ATTR_UNSPEC, 195 OVS_PACKET_ATTR_PACKET, /* Packet 196 OVS_PACKET_ATTR_KEY, /* Nested 197 OVS_PACKET_ATTR_ACTIONS, /* Nested 198 OVS_PACKET_ATTR_USERDATA, /* OVS_AC 199 OVS_PACKET_ATTR_EGRESS_TUN_KEY, /* Ne 200 at 201 OVS_PACKET_ATTR_UNUSED1, 202 OVS_PACKET_ATTR_UNUSED2, 203 OVS_PACKET_ATTR_PROBE, /* Packet 204 error l 205 OVS_PACKET_ATTR_MRU, /* Maximum 206 OVS_PACKET_ATTR_LEN, /* Packet 207 OVS_PACKET_ATTR_HASH, /* Packet 208 __OVS_PACKET_ATTR_MAX 209 }; 210 211 #define OVS_PACKET_ATTR_MAX (__OVS_PACKET_ATTR 212 213 /* Virtual ports. */ 214 215 #define OVS_VPORT_FAMILY "ovs_vport" 216 #define OVS_VPORT_MCGROUP "ovs_vport" 217 #define OVS_VPORT_VERSION 0x1 218 219 enum ovs_vport_cmd { 220 OVS_VPORT_CMD_UNSPEC, 221 OVS_VPORT_CMD_NEW, 222 OVS_VPORT_CMD_DEL, 223 OVS_VPORT_CMD_GET, 224 OVS_VPORT_CMD_SET 225 }; 226 227 enum ovs_vport_type { 228 OVS_VPORT_TYPE_UNSPEC, 229 OVS_VPORT_TYPE_NETDEV, /* network de 230 OVS_VPORT_TYPE_INTERNAL, /* network de 231 OVS_VPORT_TYPE_GRE, /* GRE tunnel 232 OVS_VPORT_TYPE_VXLAN, /* VXLAN tunn 233 OVS_VPORT_TYPE_GENEVE, /* Geneve tun 234 __OVS_VPORT_TYPE_MAX 235 }; 236 237 #define OVS_VPORT_TYPE_MAX (__OVS_VPORT_TYPE_M 238 239 /** 240 * enum ovs_vport_attr - attributes for %OVS_V 241 * @OVS_VPORT_ATTR_PORT_NO: 32-bit port number 242 * @OVS_VPORT_ATTR_TYPE: 32-bit %OVS_VPORT_TYP 243 * of vport. 244 * @OVS_VPORT_ATTR_NAME: Name of vport. For a 245 * this is the name of the network device. Ma 246 * plus a null terminator. 247 * @OVS_VPORT_ATTR_OPTIONS: Vport-specific con 248 * @OVS_VPORT_ATTR_UPCALL_PID: The array of Ne 249 * among which OVS_PACKET_CMD_MISS upcalls wil 250 * received on this port. If this is a single 251 * upcalls should not be sent. 252 * @OVS_VPORT_ATTR_STATS: A &struct ovs_vport_ 253 * packets sent or received through the vport. 254 * 255 * These attributes follow the &struct ovs_hea 256 * payload for %OVS_VPORT_* commands. 257 * 258 * For %OVS_VPORT_CMD_NEW requests, the %OVS_V 259 * %OVS_VPORT_ATTR_NAME attributes are require 260 * optional; if not specified a free port numb 261 * Whether %OVS_VPORT_ATTR_OPTIONS is required 262 * of vport. 263 * 264 * For other requests, if %OVS_VPORT_ATTR_NAME 265 * look up the vport to operate on; otherwise 266 * ovs_header plus %OVS_VPORT_ATTR_PORT_NO det 267 */ 268 enum ovs_vport_attr { 269 OVS_VPORT_ATTR_UNSPEC, 270 OVS_VPORT_ATTR_PORT_NO, /* u32 port nu 271 OVS_VPORT_ATTR_TYPE, /* u32 OVS_VPO 272 OVS_VPORT_ATTR_NAME, /* string name 273 OVS_VPORT_ATTR_OPTIONS, /* nested attr 274 OVS_VPORT_ATTR_UPCALL_PID, /* array of 275 /* receiving u 276 OVS_VPORT_ATTR_STATS, /* struct ovs_ 277 OVS_VPORT_ATTR_PAD, 278 OVS_VPORT_ATTR_IFINDEX, 279 OVS_VPORT_ATTR_NETNSID, 280 OVS_VPORT_ATTR_UPCALL_STATS, 281 __OVS_VPORT_ATTR_MAX 282 }; 283 284 #define OVS_VPORT_ATTR_MAX (__OVS_VPORT_ATTR_M 285 286 /** 287 * enum ovs_vport_upcall_attr - attributes for 288 * @OVS_VPORT_UPCALL_SUCCESS: 64-bit upcall su 289 * @OVS_VPORT_UPCALL_FAIL: 64-bit upcall fail 290 */ 291 enum ovs_vport_upcall_attr { 292 OVS_VPORT_UPCALL_ATTR_SUCCESS, 293 OVS_VPORT_UPCALL_ATTR_FAIL, 294 __OVS_VPORT_UPCALL_ATTR_MAX 295 }; 296 297 #define OVS_VPORT_UPCALL_ATTR_MAX (__OVS_VPORT 298 299 enum { 300 OVS_VXLAN_EXT_UNSPEC, 301 OVS_VXLAN_EXT_GBP, /* Flag or __u 302 __OVS_VXLAN_EXT_MAX, 303 }; 304 305 #define OVS_VXLAN_EXT_MAX (__OVS_VXLAN_EXT_MAX 306 307 308 /* OVS_VPORT_ATTR_OPTIONS attributes for tunne 309 */ 310 enum { 311 OVS_TUNNEL_ATTR_UNSPEC, 312 OVS_TUNNEL_ATTR_DST_PORT, /* 16-bit UD 313 OVS_TUNNEL_ATTR_EXTENSION, 314 __OVS_TUNNEL_ATTR_MAX 315 }; 316 317 #define OVS_TUNNEL_ATTR_MAX (__OVS_TUNNEL_ATTR 318 319 /* Flows. */ 320 321 #define OVS_FLOW_FAMILY "ovs_flow" 322 #define OVS_FLOW_MCGROUP "ovs_flow" 323 #define OVS_FLOW_VERSION 0x1 324 325 enum ovs_flow_cmd { 326 OVS_FLOW_CMD_UNSPEC, 327 OVS_FLOW_CMD_NEW, 328 OVS_FLOW_CMD_DEL, 329 OVS_FLOW_CMD_GET, 330 OVS_FLOW_CMD_SET 331 }; 332 333 struct ovs_flow_stats { 334 __u64 n_packets; /* Number of 335 __u64 n_bytes; /* Number of 336 }; 337 338 enum ovs_key_attr { 339 OVS_KEY_ATTR_UNSPEC, 340 OVS_KEY_ATTR_ENCAP, /* Nested set 341 OVS_KEY_ATTR_PRIORITY, /* u32 skb->pr 342 OVS_KEY_ATTR_IN_PORT, /* u32 OVS dp 343 OVS_KEY_ATTR_ETHERNET, /* struct ovs_ 344 OVS_KEY_ATTR_VLAN, /* be16 VLAN T 345 OVS_KEY_ATTR_ETHERTYPE, /* be16 Ethern 346 OVS_KEY_ATTR_IPV4, /* struct ovs_ 347 OVS_KEY_ATTR_IPV6, /* struct ovs_ 348 OVS_KEY_ATTR_TCP, /* struct ovs_ 349 OVS_KEY_ATTR_UDP, /* struct ovs_ 350 OVS_KEY_ATTR_ICMP, /* struct ovs_ 351 OVS_KEY_ATTR_ICMPV6, /* struct ovs_ 352 OVS_KEY_ATTR_ARP, /* struct ovs_ 353 OVS_KEY_ATTR_ND, /* struct ovs_ 354 OVS_KEY_ATTR_SKB_MARK, /* u32 skb mar 355 OVS_KEY_ATTR_TUNNEL, /* Nested set 356 OVS_KEY_ATTR_SCTP, /* struct ovs_ 357 OVS_KEY_ATTR_TCP_FLAGS, /* be16 TCP fl 358 OVS_KEY_ATTR_DP_HASH, /* u32 hash 359 is not comp 360 OVS_KEY_ATTR_RECIRC_ID, /* u32 recirc 361 OVS_KEY_ATTR_MPLS, /* array of st 362 * The impleme 363 * the accepte 364 OVS_KEY_ATTR_CT_STATE, /* u32 bitmask 365 OVS_KEY_ATTR_CT_ZONE, /* u16 connect 366 OVS_KEY_ATTR_CT_MARK, /* u32 connect 367 OVS_KEY_ATTR_CT_LABELS, /* 16-octet co 368 OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4, /* 369 OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6, /* 370 OVS_KEY_ATTR_NSH, /* Nested set 371 372 /* User space decided to squat on type 373 * below, but should not be sent to th 374 * 375 * WARNING: No new types should be add 376 * for both kernel and user s 377 * to keep compatibility othe 378 */ 379 OVS_KEY_ATTR_PACKET_TYPE, /* be32 pa 380 OVS_KEY_ATTR_ND_EXTENSIONS, /* IPv6 Ne 381 382 OVS_KEY_ATTR_TUNNEL_INFO, /* struct 383 * For in- 384 */ 385 OVS_KEY_ATTR_IPV6_EXTHDRS, /* struct 386 __OVS_KEY_ATTR_MAX 387 }; 388 389 #define OVS_KEY_ATTR_MAX (__OVS_KEY_ATTR_MAX - 390 391 enum ovs_tunnel_key_attr { 392 /* OVS_TUNNEL_KEY_ATTR_NONE, standard 393 OVS_TUNNEL_KEY_ATTR_ID, 394 OVS_TUNNEL_KEY_ATTR_IPV4_SRC, 395 OVS_TUNNEL_KEY_ATTR_IPV4_DST, 396 OVS_TUNNEL_KEY_ATTR_TOS, 397 OVS_TUNNEL_KEY_ATTR_TTL, 398 OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT, 399 OVS_TUNNEL_KEY_ATTR_CSUM, 400 OVS_TUNNEL_KEY_ATTR_OAM, 401 OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS, 402 OVS_TUNNEL_KEY_ATTR_TP_SRC, 403 OVS_TUNNEL_KEY_ATTR_TP_DST, 404 OVS_TUNNEL_KEY_ATTR_VXLAN_OPTS, 405 OVS_TUNNEL_KEY_ATTR_IPV6_SRC, 406 OVS_TUNNEL_KEY_ATTR_IPV6_DST, 407 OVS_TUNNEL_KEY_ATTR_PAD, 408 OVS_TUNNEL_KEY_ATTR_ERSPAN_OPTS, 409 OVS_TUNNEL_KEY_ATTR_IPV4_INFO_BRIDGE, 410 __OVS_TUNNEL_KEY_ATTR_MAX 411 }; 412 413 #define OVS_TUNNEL_KEY_ATTR_MAX (__OVS_TUNNEL_ 414 415 /** 416 * enum ovs_frag_type - IPv4 and IPv6 fragment 417 * @OVS_FRAG_TYPE_NONE: Packet is not a fragme 418 * @OVS_FRAG_TYPE_FIRST: Packet is a fragment 419 * @OVS_FRAG_TYPE_LATER: Packet is a fragment 420 * 421 * Used as the @ipv4_frag in &struct ovs_key_i 422 * ovs_key_ipv6. 423 */ 424 enum ovs_frag_type { 425 OVS_FRAG_TYPE_NONE, 426 OVS_FRAG_TYPE_FIRST, 427 OVS_FRAG_TYPE_LATER, 428 __OVS_FRAG_TYPE_MAX 429 }; 430 431 #define OVS_FRAG_TYPE_MAX (__OVS_FRAG_TYPE_MAX 432 433 struct ovs_key_ethernet { 434 __u8 eth_src[ETH_ALEN]; 435 __u8 eth_dst[ETH_ALEN]; 436 }; 437 438 struct ovs_key_mpls { 439 __be32 mpls_lse; 440 }; 441 442 struct ovs_key_ipv4 { 443 __be32 ipv4_src; 444 __be32 ipv4_dst; 445 __u8 ipv4_proto; 446 __u8 ipv4_tos; 447 __u8 ipv4_ttl; 448 __u8 ipv4_frag; /* One of OVS_ 449 }; 450 451 struct ovs_key_ipv6 { 452 __be32 ipv6_src[4]; 453 __be32 ipv6_dst[4]; 454 __be32 ipv6_label; /* 20-bits in 455 __u8 ipv6_proto; 456 __u8 ipv6_tclass; 457 __u8 ipv6_hlimit; 458 __u8 ipv6_frag; /* One of OVS_ 459 }; 460 461 /* separate structure to support backward comp 462 struct ovs_key_ipv6_exthdrs { 463 __u16 hdrs; 464 }; 465 466 struct ovs_key_tcp { 467 __be16 tcp_src; 468 __be16 tcp_dst; 469 }; 470 471 struct ovs_key_udp { 472 __be16 udp_src; 473 __be16 udp_dst; 474 }; 475 476 struct ovs_key_sctp { 477 __be16 sctp_src; 478 __be16 sctp_dst; 479 }; 480 481 struct ovs_key_icmp { 482 __u8 icmp_type; 483 __u8 icmp_code; 484 }; 485 486 struct ovs_key_icmpv6 { 487 __u8 icmpv6_type; 488 __u8 icmpv6_code; 489 }; 490 491 struct ovs_key_arp { 492 __be32 arp_sip; 493 __be32 arp_tip; 494 __be16 arp_op; 495 __u8 arp_sha[ETH_ALEN]; 496 __u8 arp_tha[ETH_ALEN]; 497 }; 498 499 struct ovs_key_nd { 500 __be32 nd_target[4]; 501 __u8 nd_sll[ETH_ALEN]; 502 __u8 nd_tll[ETH_ALEN]; 503 }; 504 505 #define OVS_CT_LABELS_LEN_32 4 506 #define OVS_CT_LABELS_LEN (OVS_CT_LABELS 507 struct ovs_key_ct_labels { 508 union { 509 __u8 ct_labels[OVS_CT_LABEL 510 __u32 ct_labels_32[OVS_CT_LA 511 }; 512 }; 513 514 /* OVS_KEY_ATTR_CT_STATE flags */ 515 #define OVS_CS_F_NEW 0x01 /* Beg 516 #define OVS_CS_F_ESTABLISHED 0x02 /* Par 517 #define OVS_CS_F_RELATED 0x04 /* Rel 518 * con 519 #define OVS_CS_F_REPLY_DIR 0x08 /* Flo 520 #define OVS_CS_F_INVALID 0x10 /* Cou 521 #define OVS_CS_F_TRACKED 0x20 /* Con 522 #define OVS_CS_F_SRC_NAT 0x40 /* Pac 523 * man 524 */ 525 #define OVS_CS_F_DST_NAT 0x80 /* Pac 526 * was 527 */ 528 529 #define OVS_CS_F_NAT_MASK (OVS_CS_F_SRC_NAT | 530 531 struct ovs_key_ct_tuple_ipv4 { 532 __be32 ipv4_src; 533 __be32 ipv4_dst; 534 __be16 src_port; 535 __be16 dst_port; 536 __u8 ipv4_proto; 537 }; 538 539 struct ovs_key_ct_tuple_ipv6 { 540 __be32 ipv6_src[4]; 541 __be32 ipv6_dst[4]; 542 __be16 src_port; 543 __be16 dst_port; 544 __u8 ipv6_proto; 545 }; 546 547 enum ovs_nsh_key_attr { 548 OVS_NSH_KEY_ATTR_UNSPEC, 549 OVS_NSH_KEY_ATTR_BASE, /* struct ovs_ 550 OVS_NSH_KEY_ATTR_MD1, /* struct ovs_ 551 OVS_NSH_KEY_ATTR_MD2, /* variable-le 552 __OVS_NSH_KEY_ATTR_MAX 553 }; 554 555 #define OVS_NSH_KEY_ATTR_MAX (__OVS_NSH_KEY_AT 556 557 struct ovs_nsh_key_base { 558 __u8 flags; 559 __u8 ttl; 560 __u8 mdtype; 561 __u8 np; 562 __be32 path_hdr; 563 }; 564 565 #define NSH_MD1_CONTEXT_SIZE 4 566 567 struct ovs_nsh_key_md1 { 568 __be32 context[NSH_MD1_CONTEXT_SIZE]; 569 }; 570 571 /** 572 * enum ovs_flow_attr - attributes for %OVS_FL 573 * @OVS_FLOW_ATTR_KEY: Nested %OVS_KEY_ATTR_* 574 * key. Always present in notifications. Req 575 * dumps). 576 * @OVS_FLOW_ATTR_ACTIONS: Nested %OVS_ACTION_ 577 * the actions to take for packets that match 578 * notifications. Required for %OVS_FLOW_CMD_ 579 * %OVS_FLOW_CMD_SET requests. An %OVS_FLOW_C 580 * %OVS_FLOW_ATTR_ACTIONS will not modify the 581 * an %OVS_FLOW_ATTR_ACTIONS without any neste 582 * @OVS_FLOW_ATTR_STATS: &struct ovs_flow_stat 583 * flow. Present in notifications if the stat 584 * requests. 585 * @OVS_FLOW_ATTR_TCP_FLAGS: An 8-bit value gi 586 * TCP flags seen on packets in this flow. On 587 * TCP flows, and only if it would be nonzero. 588 * @OVS_FLOW_ATTR_USED: A 64-bit integer givin 589 * the system monotonic clock, at which a pack 590 * flow. Only present in notifications if a p 591 * flow. Ignored in requests. 592 * @OVS_FLOW_ATTR_CLEAR: If present in a %OVS_ 593 * last-used time, accumulated TCP flags, and 594 * Otherwise ignored in requests. Never prese 595 * @OVS_FLOW_ATTR_MASK: Nested %OVS_KEY_ATTR_* 596 * mask bits for wildcarded flow match. Mask b 597 * match with corresponding flow key bit, whil 598 * a wildcarded match. Omitting attribute is t 599 * corresponding fields. Optional for all requ 600 * all flow key bits are exact match bits. 601 * @OVS_FLOW_ATTR_UFID: A value between 1-16 o 602 * identifier for the flow. Causes the flow to 603 * than the value of the %OVS_FLOW_ATTR_KEY at 604 * requests. Present in notifications if the f 605 * attribute. 606 * @OVS_FLOW_ATTR_UFID_FLAGS: A 32-bit value o 607 * flags that provide alternative semantics fo 608 * retrieval. Optional for all requests. 609 * 610 * These attributes follow the &struct ovs_hea 611 * payload for %OVS_FLOW_* commands. 612 */ 613 enum ovs_flow_attr { 614 OVS_FLOW_ATTR_UNSPEC, 615 OVS_FLOW_ATTR_KEY, /* Sequence o 616 OVS_FLOW_ATTR_ACTIONS, /* Nested OVS 617 OVS_FLOW_ATTR_STATS, /* struct ovs 618 OVS_FLOW_ATTR_TCP_FLAGS, /* 8-bit OR'd 619 OVS_FLOW_ATTR_USED, /* u64 msecs 620 OVS_FLOW_ATTR_CLEAR, /* Flag to cl 621 OVS_FLOW_ATTR_MASK, /* Sequence o 622 OVS_FLOW_ATTR_PROBE, /* Flow opera 623 * logging sh 624 OVS_FLOW_ATTR_UFID, /* Variable l 625 OVS_FLOW_ATTR_UFID_FLAGS,/* u32 of OVS 626 OVS_FLOW_ATTR_PAD, 627 __OVS_FLOW_ATTR_MAX 628 }; 629 630 #define OVS_FLOW_ATTR_MAX (__OVS_FLOW_ATTR_MAX 631 632 /** 633 * Omit attributes for notifications. 634 * 635 * If a datapath request contains an %OVS_UFID 636 * may omit the corresponding %OVS_FLOW_ATTR_* 637 */ 638 #define OVS_UFID_F_OMIT_KEY (1 << 0) 639 #define OVS_UFID_F_OMIT_MASK (1 << 1) 640 #define OVS_UFID_F_OMIT_ACTIONS (1 << 2) 641 642 /** 643 * enum ovs_sample_attr - Attributes for %OVS_ 644 * @OVS_SAMPLE_ATTR_PROBABILITY: 32-bit fracti 645 * @OVS_ACTION_ATTR_SAMPLE. A value of 0 samp 646 * %UINT32_MAX samples all packets and interme 647 * fractions of packets. 648 * @OVS_SAMPLE_ATTR_ACTIONS: Set of actions to 649 * Actions are passed as nested attributes. 650 * 651 * Executes the specified actions with the giv 652 * basis. Nested actions will be able to acces 653 * parent @OVS_ACTION_ATTR_SAMPLE. 654 */ 655 enum ovs_sample_attr { 656 OVS_SAMPLE_ATTR_UNSPEC, 657 OVS_SAMPLE_ATTR_PROBABILITY, /* u32 nu 658 OVS_SAMPLE_ATTR_ACTIONS, /* Nested 659 __OVS_SAMPLE_ATTR_MAX, 660 661 #ifdef __KERNEL__ 662 OVS_SAMPLE_ATTR_ARG /* struct 663 #endif 664 }; 665 666 #define OVS_SAMPLE_ATTR_MAX (__OVS_SAMPLE_ATTR 667 668 #ifdef __KERNEL__ 669 struct sample_arg { 670 bool exec; /* When t 671 * change 672 */ 673 u32 probability; /* Same v 674 * 'OVS_S 675 */ 676 }; 677 #endif 678 679 /** 680 * enum ovs_userspace_attr - Attributes for %O 681 * @OVS_USERSPACE_ATTR_PID: u32 Netlink PID to 682 * message should be sent. Required. 683 * @OVS_USERSPACE_ATTR_USERDATA: If present, i 684 * copied to the %OVS_PACKET_CMD_ACTION messag 685 * @OVS_USERSPACE_ATTR_EGRESS_TUN_PORT: If pre 686 * tunnel info. 687 * @OVS_USERSPACE_ATTR_ACTIONS: If present, se 688 */ 689 enum ovs_userspace_attr { 690 OVS_USERSPACE_ATTR_UNSPEC, 691 OVS_USERSPACE_ATTR_PID, /* u32 N 692 OVS_USERSPACE_ATTR_USERDATA, /* Optio 693 OVS_USERSPACE_ATTR_EGRESS_TUN_PORT, / 694 695 OVS_USERSPACE_ATTR_ACTIONS, /* Optio 696 __OVS_USERSPACE_ATTR_MAX 697 }; 698 699 #define OVS_USERSPACE_ATTR_MAX (__OVS_USERSPAC 700 701 struct ovs_action_trunc { 702 __u32 max_len; /* Max packet size in b 703 }; 704 705 /** 706 * struct ovs_action_push_mpls - %OVS_ACTION_A 707 * @mpls_lse: MPLS label stack entry to push. 708 * @mpls_ethertype: Ethertype to set in the en 709 * 710 * The only values @mpls_ethertype should ever 711 * %ETH_P_MPLS_MC, indicating MPLS unicast or 712 */ 713 struct ovs_action_push_mpls { 714 __be32 mpls_lse; 715 __be16 mpls_ethertype; /* Either %ETH_ 716 }; 717 718 /** 719 * struct ovs_action_add_mpls - %OVS_ACTION_AT 720 * argument. 721 * @mpls_lse: MPLS label stack entry to push. 722 * @mpls_ethertype: Ethertype to set in the en 723 * @tun_flags: MPLS tunnel attributes. 724 * 725 * The only values @mpls_ethertype should ever 726 * %ETH_P_MPLS_MC, indicating MPLS unicast or 727 */ 728 struct ovs_action_add_mpls { 729 __be32 mpls_lse; 730 __be16 mpls_ethertype; /* Either %ETH_ 731 __u16 tun_flags; 732 }; 733 734 #define OVS_MPLS_L3_TUNNEL_FLAG_MASK (1 << 0) 735 736 737 738 739 740 741 742 743 744 /** 745 * struct ovs_action_push_vlan - %OVS_ACTION_A 746 * @vlan_tpid: Tag protocol identifier (TPID) 747 * @vlan_tci: Tag control identifier (TCI) to 748 * (but it will not be set in the 802.1Q heade 749 * 750 * The @vlan_tpid value is typically %ETH_P_80 751 * The only acceptable TPID values are those t 752 * as 802.1Q or 802.1AD headers, to prevent %O 753 * by %OVS_ACTION_ATTR_POP_VLAN from having su 754 */ 755 struct ovs_action_push_vlan { 756 __be16 vlan_tpid; /* 802.1Q or 8 757 __be16 vlan_tci; /* 802.1Q TCI 758 }; 759 760 /* Data path hash algorithm for computing Data 761 * 762 * The algorithm type only specifies the field 763 * will be used as part of the hash. Each data 764 * to use its own hash algorithm. The hash val 765 * opaque to the user space daemon. 766 */ 767 enum ovs_hash_alg { 768 OVS_HASH_ALG_L4, 769 OVS_HASH_ALG_SYM_L4, 770 }; 771 772 /* 773 * struct ovs_action_hash - %OVS_ACTION_ATTR_H 774 * @hash_alg: Algorithm used to compute hash p 775 * @hash_basis: basis used for computing hash. 776 */ 777 struct ovs_action_hash { 778 __u32 hash_alg; /* One of ovs_has 779 __u32 hash_basis; 780 }; 781 782 /** 783 * enum ovs_ct_attr - Attributes for %OVS_ACTI 784 * @OVS_CT_ATTR_COMMIT: If present, commits th 785 * table. This allows future packets for the s 786 * as 'established' or 'related'. The flow key 787 * retain the pre-commit connection state. 788 * @OVS_CT_ATTR_ZONE: u16 connection tracking 789 * @OVS_CT_ATTR_MARK: u32 value followed by u3 790 * mask, the corresponding bit in the value is 791 * tracking mark field in the connection. 792 * @OVS_CT_ATTR_LABELS: %OVS_CT_LABELS_LEN val 793 * mask. For each bit set in the mask, the cor 794 * copied to the connection tracking label fie 795 * @OVS_CT_ATTR_HELPER: variable length string 796 * @OVS_CT_ATTR_NAT: Nested OVS_NAT_ATTR_* for 797 * translation (NAT) on the packet. 798 * @OVS_CT_ATTR_FORCE_COMMIT: Like %OVS_CT_ATT 799 * nothing if the connection is already commit 800 * packet is in conntrack entry's original dir 801 * not match, will delete the existing conntra 802 * @OVS_CT_ATTR_EVENTMASK: Mask of bits indica 803 * (enum ip_conntrack_events IPCT_*) should be 804 * zero, the corresponding event type is not g 805 * depends on system configuration, but typica 806 * generated, hence listening on NFNLGRP_CONNT 807 * of events. Explicitly passing this attribu 808 * received to the events of interest. The bi 809 * IPCT_RELATED, and 1 << IPCT_DESTROY must be 810 * be received on NFNLGRP_CONNTRACK_NEW and NF 811 * respectively. Remaining bits control the c 812 * delivered on the NFNLGRP_CONNTRACK_UPDATE g 813 * @OVS_CT_ATTR_TIMEOUT: Variable length strin 814 */ 815 enum ovs_ct_attr { 816 OVS_CT_ATTR_UNSPEC, 817 OVS_CT_ATTR_COMMIT, /* No argument 818 OVS_CT_ATTR_ZONE, /* u16 zone id 819 OVS_CT_ATTR_MARK, /* mark to ass 820 OVS_CT_ATTR_LABELS, /* labels to a 821 OVS_CT_ATTR_HELPER, /* netlink hel 822 related con 823 OVS_CT_ATTR_NAT, /* Nested OVS_ 824 OVS_CT_ATTR_FORCE_COMMIT, /* No argum 825 OVS_CT_ATTR_EVENTMASK, /* u32 mask of 826 OVS_CT_ATTR_TIMEOUT, /* Associate t 827 * fine-grain 828 __OVS_CT_ATTR_MAX 829 }; 830 831 #define OVS_CT_ATTR_MAX (__OVS_CT_ATTR_MAX - 1 832 833 /** 834 * enum ovs_nat_attr - Attributes for %OVS_CT_ 835 * 836 * @OVS_NAT_ATTR_SRC: Flag for Source NAT (man 837 * @OVS_NAT_ATTR_DST: Flag for Destination NAT 838 * address/port). Only one of (@OVS_NAT_ATTR_ 839 * specified. Effective only for packets for 840 * Packets of committed connections are mangle 841 * the committed NAT type regardless of the fl 842 * NAT action without a NAT type flag will onl 843 * connections. The following NAT attributes 844 * (non-committed) connections, and they may b 845 * action has the @OVS_CT_ATTR_COMMIT flag and 846 * @OVS_NAT_ATTR_DST is also included. 847 * @OVS_NAT_ATTR_IP_MIN: struct in_addr or str 848 * @OVS_NAT_ATTR_IP_MAX: struct in_addr or str 849 * @OVS_NAT_ATTR_PROTO_MIN: u16 L4 protocol sp 850 * @OVS_NAT_ATTR_PROTO_MAX: u16 L4 protocol sp 851 * @OVS_NAT_ATTR_PERSISTENT: Flag for persiste 852 * @OVS_NAT_ATTR_PROTO_HASH: Flag for pseudo r 853 * @OVS_NAT_ATTR_PROTO_RANDOM: Flag for fully 854 */ 855 enum ovs_nat_attr { 856 OVS_NAT_ATTR_UNSPEC, 857 OVS_NAT_ATTR_SRC, 858 OVS_NAT_ATTR_DST, 859 OVS_NAT_ATTR_IP_MIN, 860 OVS_NAT_ATTR_IP_MAX, 861 OVS_NAT_ATTR_PROTO_MIN, 862 OVS_NAT_ATTR_PROTO_MAX, 863 OVS_NAT_ATTR_PERSISTENT, 864 OVS_NAT_ATTR_PROTO_HASH, 865 OVS_NAT_ATTR_PROTO_RANDOM, 866 __OVS_NAT_ATTR_MAX, 867 }; 868 869 #define OVS_NAT_ATTR_MAX (__OVS_NAT_ATTR_MAX - 870 871 /* 872 * struct ovs_action_push_eth - %OVS_ACTION_AT 873 * @addresses: Source and destination MAC addr 874 * @eth_type: Ethernet type 875 */ 876 struct ovs_action_push_eth { 877 struct ovs_key_ethernet addresses; 878 }; 879 880 /* 881 * enum ovs_check_pkt_len_attr - Attributes fo 882 * 883 * @OVS_CHECK_PKT_LEN_ATTR_PKT_LEN: u16 Packet 884 * @OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREATER: 885 * actions to apply if the packer length is gr 886 * length in the attr - OVS_CHECK_PKT_LEN_ATTR 887 * @OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS_EQU 888 * actions to apply if the packer length is le 889 * length in the attr - OVS_CHECK_PKT_LEN_ATTR 890 */ 891 enum ovs_check_pkt_len_attr { 892 OVS_CHECK_PKT_LEN_ATTR_UNSPEC, 893 OVS_CHECK_PKT_LEN_ATTR_PKT_LEN, 894 OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_GREA 895 OVS_CHECK_PKT_LEN_ATTR_ACTIONS_IF_LESS 896 __OVS_CHECK_PKT_LEN_ATTR_MAX, 897 898 #ifdef __KERNEL__ 899 OVS_CHECK_PKT_LEN_ATTR_ARG /* 900 #endif 901 }; 902 903 #define OVS_CHECK_PKT_LEN_ATTR_MAX (__OVS_CHEC 904 905 #ifdef __KERNEL__ 906 struct check_pkt_len_arg { 907 u16 pkt_len; /* Same value as OVS_C 908 bool exec_for_greater; /* When true, 909 * not change 910 */ 911 bool exec_for_lesser_equal; /* When tr 912 * will no 913 * otherwi 914 */ 915 }; 916 #endif 917 918 #define OVS_PSAMPLE_COOKIE_MAX_SIZE 16 919 /** 920 * enum ovs_psample_attr - Attributes for %OVS 921 * action. 922 * 923 * @OVS_PSAMPLE_ATTR_GROUP: 32-bit number to i 924 * sample. 925 * @OVS_PSAMPLE_ATTR_COOKIE: An optional varia 926 * contains user-defined metadata. The maximum 927 * OVS_PSAMPLE_COOKIE_MAX_SIZE bytes. 928 * 929 * Sends the packet to the psample multicast g 930 * cookie. It is possible to combine this acti 931 * %OVS_ACTION_ATTR_TRUNC action to limit the 932 */ 933 enum ovs_psample_attr { 934 OVS_PSAMPLE_ATTR_GROUP = 1, /* u32 935 OVS_PSAMPLE_ATTR_COOKIE, /* Opt 936 937 /* private: */ 938 __OVS_PSAMPLE_ATTR_MAX 939 }; 940 941 #define OVS_PSAMPLE_ATTR_MAX (__OVS_PSAMPLE_AT 942 943 /** 944 * enum ovs_action_attr - Action types. 945 * 946 * @OVS_ACTION_ATTR_OUTPUT: Output packet to p 947 * @OVS_ACTION_ATTR_TRUNC: Output packet to po 948 * @OVS_ACTION_ATTR_USERSPACE: Send packet to 949 * %OVS_USERSPACE_ATTR_* attributes. 950 * @OVS_ACTION_ATTR_SET: Replaces the contents 951 * single nested %OVS_KEY_ATTR_* attribute spe 952 * value. 953 * @OVS_ACTION_ATTR_SET_MASKED: Replaces the c 954 * nested %OVS_KEY_ATTR_* attribute specifies 955 * and a mask. For every bit set in the mask, 956 * is copied from the value to the packet head 957 * left unchanged. The non-masked value bits 958 * Masking is not supported for the %OVS_KEY_A 959 * @OVS_ACTION_ATTR_PUSH_VLAN: Push a new oute 960 * onto the packet. 961 * @OVS_ACTION_ATTR_POP_VLAN: Pop the outermos 962 * from the packet. 963 * @OVS_ACTION_ATTR_SAMPLE: Probabilitically e 964 * the nested %OVS_SAMPLE_ATTR_* attributes. 965 * @OVS_ACTION_ATTR_PUSH_MPLS: Push a new MPLS 966 * top of the packets MPLS label stack. Set t 967 * encapsulating frame to either %ETH_P_MPLS_U 968 * indicate the new packet contents. 969 * @OVS_ACTION_ATTR_POP_MPLS: Pop an MPLS labe 970 * packet's MPLS label stack. Set the encapsu 971 * indicate the new packet contents. This coul 972 * %ETH_P_MPLS if the resulting MPLS label sta 973 * is no MPLS label stack, as determined by et 974 * @OVS_ACTION_ATTR_CT: Track the connection. 975 * entries in the flow key. 976 * @OVS_ACTION_ATTR_PUSH_ETH: Push a new outer 977 * packet. 978 * @OVS_ACTION_ATTR_POP_ETH: Pop the outermost 979 * packet. 980 * @OVS_ACTION_ATTR_CT_CLEAR: Clear conntrack 981 * @OVS_ACTION_ATTR_PUSH_NSH: push NSH header 982 * @OVS_ACTION_ATTR_POP_NSH: pop the outermost 983 * @OVS_ACTION_ATTR_METER: Run packet through 984 * packet, or modify the packet (e.g., change 985 * @OVS_ACTION_ATTR_CLONE: make a copy of the 986 * actions without affecting the original pack 987 * @OVS_ACTION_ATTR_CHECK_PKT_LEN: Check the p 988 * of actions if greater than the specified pa 989 * another set of actions. 990 * @OVS_ACTION_ATTR_ADD_MPLS: Push a new MPLS 991 * start of the packet or at the start of the 992 * of l3 tunnel flag in the tun_flags field of 993 * argument. 994 * @OVS_ACTION_ATTR_DROP: Explicit drop action 995 * @OVS_ACTION_ATTR_PSAMPLE: Send a sample of 996 * via psample. 997 * 998 * Only a single header can be set with a sing 999 * fields within a header are modifiable, e.g. 1000 * type may not be changed. 1001 * 1002 * @OVS_ACTION_ATTR_SET_TO_MASKED: Kernel int 1003 * from the @OVS_ACTION_ATTR_SET. 1004 */ 1005 1006 enum ovs_action_attr { 1007 OVS_ACTION_ATTR_UNSPEC, 1008 OVS_ACTION_ATTR_OUTPUT, /* u32 1009 OVS_ACTION_ATTR_USERSPACE, /* Nest 1010 OVS_ACTION_ATTR_SET, /* One 1011 OVS_ACTION_ATTR_PUSH_VLAN, /* stru 1012 OVS_ACTION_ATTR_POP_VLAN, /* No a 1013 OVS_ACTION_ATTR_SAMPLE, /* Nest 1014 OVS_ACTION_ATTR_RECIRC, /* u32 1015 OVS_ACTION_ATTR_HASH, /* stru 1016 OVS_ACTION_ATTR_PUSH_MPLS, /* stru 1017 OVS_ACTION_ATTR_POP_MPLS, /* __be 1018 OVS_ACTION_ATTR_SET_MASKED, /* One 1019 * data 1020 * The 1021 * bits 1022 OVS_ACTION_ATTR_CT, /* Nest 1023 OVS_ACTION_ATTR_TRUNC, /* u32 1024 OVS_ACTION_ATTR_PUSH_ETH, /* stru 1025 OVS_ACTION_ATTR_POP_ETH, /* No a 1026 OVS_ACTION_ATTR_CT_CLEAR, /* No a 1027 OVS_ACTION_ATTR_PUSH_NSH, /* Nest 1028 OVS_ACTION_ATTR_POP_NSH, /* No a 1029 OVS_ACTION_ATTR_METER, /* u32 1030 OVS_ACTION_ATTR_CLONE, /* Nest 1031 OVS_ACTION_ATTR_CHECK_PKT_LEN, /* Nes 1032 OVS_ACTION_ATTR_ADD_MPLS, /* stru 1033 OVS_ACTION_ATTR_DEC_TTL, /* Nest 1034 OVS_ACTION_ATTR_DROP, /* u32 1035 OVS_ACTION_ATTR_PSAMPLE, /* Nest 1036 1037 __OVS_ACTION_ATTR_MAX, /* Noth 1038 * from 1039 1040 #ifdef __KERNEL__ 1041 OVS_ACTION_ATTR_SET_TO_MASKED, /* Ker 1042 * set 1043 * OVS 1044 #endif 1045 }; 1046 1047 #define OVS_ACTION_ATTR_MAX (__OVS_ACTION_ATT 1048 1049 /* Meters. */ 1050 #define OVS_METER_FAMILY "ovs_meter" 1051 #define OVS_METER_MCGROUP "ovs_meter" 1052 #define OVS_METER_VERSION 0x1 1053 1054 enum ovs_meter_cmd { 1055 OVS_METER_CMD_UNSPEC, 1056 OVS_METER_CMD_FEATURES, /* Get featur 1057 OVS_METER_CMD_SET, /* Add or mod 1058 OVS_METER_CMD_DEL, /* Delete a m 1059 OVS_METER_CMD_GET /* Get meter 1060 }; 1061 1062 enum ovs_meter_attr { 1063 OVS_METER_ATTR_UNSPEC, 1064 OVS_METER_ATTR_ID, /* u32 meter 1065 OVS_METER_ATTR_KBPS, /* No argumen 1066 * per second 1067 * packets pe 1068 */ 1069 OVS_METER_ATTR_STATS, /* struct ovs 1070 OVS_METER_ATTR_BANDS, /* Nested att 1071 OVS_METER_ATTR_USED, /* u64 msecs 1072 OVS_METER_ATTR_CLEAR, /* Flag to cl 1073 OVS_METER_ATTR_MAX_METERS, /* u32 num 1074 OVS_METER_ATTR_MAX_BANDS, /* u32 max 1075 OVS_METER_ATTR_PAD, 1076 __OVS_METER_ATTR_MAX 1077 }; 1078 1079 #define OVS_METER_ATTR_MAX (__OVS_METER_ATTR_ 1080 1081 enum ovs_band_attr { 1082 OVS_BAND_ATTR_UNSPEC, 1083 OVS_BAND_ATTR_TYPE, /* u32 OVS_ME 1084 OVS_BAND_ATTR_RATE, /* u32 band r 1085 OVS_BAND_ATTR_BURST, /* u32 burst 1086 OVS_BAND_ATTR_STATS, /* struct ovs 1087 __OVS_BAND_ATTR_MAX 1088 }; 1089 1090 #define OVS_BAND_ATTR_MAX (__OVS_BAND_ATTR_MA 1091 1092 enum ovs_meter_band_type { 1093 OVS_METER_BAND_TYPE_UNSPEC, 1094 OVS_METER_BAND_TYPE_DROP, /* Drop e 1095 __OVS_METER_BAND_TYPE_MAX 1096 }; 1097 1098 #define OVS_METER_BAND_TYPE_MAX (__OVS_METER_ 1099 1100 /* Conntrack limit */ 1101 #define OVS_CT_LIMIT_FAMILY "ovs_ct_limit" 1102 #define OVS_CT_LIMIT_MCGROUP "ovs_ct_limit" 1103 #define OVS_CT_LIMIT_VERSION 0x1 1104 1105 enum ovs_ct_limit_cmd { 1106 OVS_CT_LIMIT_CMD_UNSPEC, 1107 OVS_CT_LIMIT_CMD_SET, /* Ad 1108 OVS_CT_LIMIT_CMD_DEL, /* De 1109 OVS_CT_LIMIT_CMD_GET /* Ge 1110 }; 1111 1112 enum ovs_ct_limit_attr { 1113 OVS_CT_LIMIT_ATTR_UNSPEC, 1114 OVS_CT_LIMIT_ATTR_ZONE_LIMIT, /* Ne 1115 __OVS_CT_LIMIT_ATTR_MAX 1116 }; 1117 1118 #define OVS_CT_LIMIT_ATTR_MAX (__OVS_CT_LIMIT 1119 1120 #define OVS_ZONE_LIMIT_DEFAULT_ZONE -1 1121 1122 struct ovs_zone_limit { 1123 int zone_id; 1124 __u32 limit; 1125 __u32 count; 1126 }; 1127 1128 enum ovs_dec_ttl_attr { 1129 OVS_DEC_TTL_ATTR_UNSPEC, 1130 OVS_DEC_TTL_ATTR_ACTION, /* Ne 1131 __OVS_DEC_TTL_ATTR_MAX 1132 }; 1133 1134 #define OVS_DEC_TTL_ATTR_MAX (__OVS_DEC_TTL_A 1135 1136 #endif /* _LINUX_OPENVSWITCH_H */ 1137
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.