lib/ofp-actions: use mf_subvalue in struct ofpact_reg_load.
[sliver-openvswitch.git] / lib / meta-flow.h
index e4237d1..60bfeca 100644 (file)
@@ -24,8 +24,8 @@
 #include "ofp-errors.h"
 #include "packets.h"
 
-struct cls_rule;
 struct ds;
+struct match;
 
 /* The comment on each of these indicates the member in "union mf_value" used
  * to represent its value. */
@@ -67,7 +67,9 @@ enum mf_field_id {
 
     MFF_VLAN_TCI,               /* be16 */
     MFF_DL_VLAN,                /* be16 (OpenFlow 1.0 compatibility) */
+    MFF_VLAN_VID,               /* be16 (OpenFlow 1.2 compatibility) */
     MFF_DL_VLAN_PCP,            /* u8 (OpenFlow 1.0 compatibility) */
+    MFF_VLAN_PCP,               /* be16 (OpenFlow 1.2 compatibility) */
 
     /* L3. */
     MFF_IPV4_SRC,               /* be32 */
@@ -154,6 +156,7 @@ enum mf_prereqs {
 
     /* L2 requirements. */
     MFP_ARP,
+    MFP_VLAN_VID,
     MFP_IPV4,
     MFP_IPV6,
     MFP_IP_ANY,
@@ -215,7 +218,6 @@ struct mf_field {
 
     /* Properties. */
     enum mf_maskable maskable;
-    flow_wildcards_t fww_bit;   /* Either 0 or exactly one FWW_* bit. */
     enum mf_string string;
     enum mf_prereqs prereqs;
     bool writable;              /* May be written by actions? */
@@ -292,7 +294,7 @@ void mf_get_mask(const struct mf_field *, const struct flow_wildcards *,
 
 /* Prerequisites. */
 bool mf_are_prereqs_ok(const struct mf_field *, const struct flow *);
-void mf_force_prereqs(const struct mf_field *, struct cls_rule *);
+void mf_force_prereqs(const struct mf_field *, struct match *);
 
 /* Field values. */
 bool mf_is_value_valid(const struct mf_field *, const union mf_value *value);
@@ -300,24 +302,26 @@ bool mf_is_value_valid(const struct mf_field *, const union mf_value *value);
 void mf_get_value(const struct mf_field *, const struct flow *,
                   union mf_value *value);
 void mf_set_value(const struct mf_field *, const union mf_value *value,
-                  struct cls_rule *);
+                  struct match *);
 void mf_set_flow_value(const struct mf_field *, const union mf_value *value,
                        struct flow *);
 bool mf_is_zero(const struct mf_field *, const struct flow *);
 
-void mf_get(const struct mf_field *, const struct cls_rule *,
+void mf_get(const struct mf_field *, const struct match *,
             union mf_value *value, union mf_value *mask);
 void mf_set(const struct mf_field *,
             const union mf_value *value, const union mf_value *mask,
-            struct cls_rule *);
+            struct match *);
 
-void mf_set_wild(const struct mf_field *, struct cls_rule *);
+void mf_set_wild(const struct mf_field *, struct match *);
 
 void mf_random_value(const struct mf_field *, union mf_value *value);
 
 /* Subfields. */
+void mf_write_subfield_flow(const struct mf_subfield *,
+                            const union mf_subvalue *, struct flow *);
 void mf_write_subfield(const struct mf_subfield *, const union mf_subvalue *,
-                       struct cls_rule *);
+                       struct match *);
 
 void mf_read_subfield(const struct mf_subfield *, const struct flow *,
                       union mf_subvalue *);
@@ -338,5 +342,6 @@ char *mf_parse_value(const struct mf_field *, const char *, union mf_value *);
 void mf_format(const struct mf_field *,
                const union mf_value *value, const union mf_value *mask,
                struct ds *);
+void mf_format_subvalue(const union mf_subvalue *subvalue, struct ds *s);
 
 #endif /* meta-flow.h */