/*
- * Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2012, 2013, 2014 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <stddef.h>
#include <stdint.h>
#include <string.h>
-#include <linux/openvswitch.h>
+#include "flow.h"
#include "hash.h"
#include "hmap.h"
+#include "odp-netlink.h"
#include "openflow/openflow.h"
#include "util.h"
struct ds;
-struct flow;
-struct flow_tnl;
-struct flow_wildcards;
struct nlattr;
struct ofpbuf;
struct simap;
* - OVS_TUNNEL_KEY_ATTR_TTL 1 3 4 8
* - OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT 0 -- 4 4
* - OVS_TUNNEL_KEY_ATTR_CSUM 0 -- 4 4
+ * - OVS_TUNNEL_KEY_ATTR_OAM 0 -- 4 4
+ * - OVS_TUNNEL_KEY_ATTR_GENEVE_OPTS 256 -- 4 260
* OVS_KEY_ATTR_IN_PORT 4 -- 4 8
* OVS_KEY_ATTR_SKB_MARK 4 -- 4 8
+ * OVS_KEY_ATTR_DP_HASH 4 -- 4 8
+ * OVS_KEY_ATTR_RECIRC_ID 4 -- 4 8
* OVS_KEY_ATTR_ETHERNET 12 -- 4 16
* OVS_KEY_ATTR_ETHERTYPE 2 2 4 8 (outer VLAN ethertype)
- * OVS_KEY_ATTR_8021Q 4 -- 4 8
+ * OVS_KEY_ATTR_VLAN 2 2 4 8
* OVS_KEY_ATTR_ENCAP 0 -- 4 4 (VLAN encapsulation)
* OVS_KEY_ATTR_ETHERTYPE 2 2 4 8 (inner VLAN ethertype)
* OVS_KEY_ATTR_IPV6 40 -- 4 44
* OVS_KEY_ATTR_ICMPV6 2 2 4 8
* OVS_KEY_ATTR_ND 28 -- 4 32
* ----------------------------------------------------------
- * total 208
+ * total 488
*
* We include some slack space in case the calculation isn't quite right or we
* add another field and forget to adjust this value.
*/
-#define ODPUTIL_FLOW_KEY_BYTES 256
+#define ODPUTIL_FLOW_KEY_BYTES 512
+BUILD_ASSERT_DECL(FLOW_WC_SEQ == 27);
/* A buffer with sufficient size and alignment to hold an nlattr-formatted flow
* key. An array of "struct nlattr" might not, in theory, be sufficiently
const struct simap *port_names,
struct ofpbuf *, struct ofpbuf *);
-void odp_flow_key_from_flow(struct ofpbuf *, const struct flow *,
- odp_port_t odp_in_port);
+void odp_flow_key_from_flow(struct ofpbuf *, const struct flow * flow,
+ const struct flow *mask, odp_port_t odp_in_port,
+ bool recirc);
void odp_flow_key_from_mask(struct ofpbuf *, const struct flow *mask,
const struct flow *flow, uint32_t odp_in_port,
- size_t max_mpls_depth);
+ size_t max_mpls_depth, bool recirc);
uint32_t odp_flow_key_hash(const struct nlattr *, size_t);
} flow_sample;
struct {
- uint16_t type; /* USER_ACTION_COOKIE_IPFIX. */
+ uint16_t type; /* USER_ACTION_COOKIE_IPFIX. */
+ odp_port_t output_odp_port; /* The output odp port. */
} ipfix;
};
BUILD_ASSERT_DECL(sizeof(union user_action_cookie) == 16);
size_t odp_put_userspace_action(uint32_t pid,
const void *userdata, size_t userdata_size,
+ odp_port_t tunnel_out_port,
struct ofpbuf *odp_actions);
void odp_put_tunnel_action(const struct flow_tnl *tunnel,
struct ofpbuf *odp_actions);