Merge "master" into "wdp".
[sliver-openvswitch.git] / lib / flow.h
index 3a6ae4c..0cfe9e3 100644 (file)
@@ -21,8 +21,9 @@
 #include <stdbool.h>
 #include <stdint.h>
 #include <string.h>
-#include "hash.h"
+#include "openflow/nicira-ext.h"
 #include "openflow/openflow.h"
+#include "hash.h"
 #include "openvswitch/xflow.h"
 #include "util.h"
 
@@ -34,6 +35,7 @@ typedef struct flow flow_t;
 struct flow {
     uint32_t wildcards;         /* Wildcards. */
     uint32_t priority;          /* Priority. */
+    uint32_t tun_id;            /* Encapsulating tunnel ID. */
     uint32_t nw_src;            /* IP source address. */
     uint32_t nw_dst;            /* IP destination address. */
     uint16_t in_port;           /* Input switch port. */
@@ -50,18 +52,19 @@ struct flow {
 
 /* Assert that there are FLOW_SIG_SIZE bytes of significant data in "struct
  * flow", followed by FLOW_PAD_SIZE bytes of padding. */
-#define FLOW_SIG_SIZE 41
+#define FLOW_SIG_SIZE 45
 #define FLOW_PAD_SIZE 3
 BUILD_ASSERT_DECL(offsetof(struct flow, nw_tos) == FLOW_SIG_SIZE - 1);
 BUILD_ASSERT_DECL(sizeof(((struct flow *)0)->nw_tos) == 1);
 BUILD_ASSERT_DECL(sizeof(struct flow) == FLOW_SIG_SIZE + FLOW_PAD_SIZE);
 
-int flow_extract(struct ofpbuf *, uint16_t in_port, flow_t *);
+int flow_extract(struct ofpbuf *, uint32_t tun_id, uint16_t in_port, flow_t *);
 void flow_extract_stats(const flow_t *flow, struct ofpbuf *packet, 
         struct xflow_flow_stats *stats);
-void flow_to_match(const flow_t *, struct ofp_match *);
-void flow_from_match(flow_t *, unsigned int priority,
-                     const struct ofp_match *);
+void flow_to_match(const flow_t *,
+                   bool tun_id_from_cookie, struct ofp_match *);
+void flow_from_match(const struct ofp_match *, uint32_t priority,
+                     bool tun_id_from_cookie, uint64_t cookie, flow_t *);
 char *flow_to_string(const flow_t *);
 void flow_format(struct ds *, const flow_t *);
 void flow_print(FILE *, const flow_t *);
@@ -115,7 +118,7 @@ flow_nw_bits_to_mask(uint32_t wildcards, int shift)
 static inline void
 flow_wildcards_init(struct flow_wildcards *wc, uint32_t wildcards)
 {
-    wildcards &= OFPFW_ALL;
+    wildcards &= OVSFW_ALL;
     wc->nw_src_mask = flow_nw_bits_to_mask(wildcards, OFPFW_NW_SRC_SHIFT);
     wc->nw_dst_mask = flow_nw_bits_to_mask(wildcards, OFPFW_NW_DST_SHIFT);
 }