flow: New functions for setting a VLAN VID or PCP value.
[sliver-openvswitch.git] / lib / nx-match.def
index e70a1e8..0426edf 100644 (file)
@@ -1,5 +1,5 @@
 /*                                                                -*- c -*-
- * Copyright (c) 2008, 2009, 2010 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * limitations under the License.
  */
 
-#define DEFINE_FIELD_M(HEADER, WILDCARD, DL_TYPE, NW_PROTO)             \
-        DEFINE_FIELD(HEADER, WILDCARD, DL_TYPE, NW_PROTO)               \
-        DEFINE_FIELD(HEADER##_W, WILDCARD, DL_TYPE, NW_PROTO)
+#define DEFINE_FIELD_M(HEADER, MFF_ID, WRITABLE)  \
+    DEFINE_FIELD(HEADER,     MFF_ID, WRITABLE)        \
+    DEFINE_FIELD(HEADER##_W, MFF_ID, false)
 
-/*             NXM_ bit      OFPFW_* bit     dl_type       nw_proto      */
-/*             ------------  --------------  -----------   ------------- */
-DEFINE_FIELD  (OF_IN_PORT,   OFPFW_IN_PORT,  0,            0)
-DEFINE_FIELD  (OF_ETH_DST,   OFPFW_DL_DST,   0,            0)
-DEFINE_FIELD  (OF_ETH_SRC,   OFPFW_DL_SRC,   0,            0)
-DEFINE_FIELD  (OF_ETH_TYPE,  OFPFW_DL_TYPE,  0,            0)
-DEFINE_FIELD_M(OF_VLAN_TCI,  0,              0,            0)
-DEFINE_FIELD  (OF_IP_TOS,    OFPFW_NW_TOS,   ETH_TYPE_IP,  0)
-DEFINE_FIELD  (OF_IP_PROTO,  OFPFW_NW_PROTO, ETH_TYPE_IP,  0)
-DEFINE_FIELD_M(OF_IP_SRC,    0,              ETH_TYPE_IP,  0)
-DEFINE_FIELD_M(OF_IP_DST,    0,              ETH_TYPE_IP,  0)
-DEFINE_FIELD  (OF_TCP_SRC,   OFPFW_TP_SRC,   ETH_TYPE_IP,  IP_TYPE_TCP)
-DEFINE_FIELD  (OF_TCP_DST,   OFPFW_TP_DST,   ETH_TYPE_IP,  IP_TYPE_TCP)
-DEFINE_FIELD  (OF_UDP_SRC,   OFPFW_TP_SRC,   ETH_TYPE_IP,  IP_TYPE_UDP)
-DEFINE_FIELD  (OF_UDP_DST,   OFPFW_TP_DST,   ETH_TYPE_IP,  IP_TYPE_UDP)
-DEFINE_FIELD  (OF_ICMP_TYPE, OFPFW_TP_SRC,   ETH_TYPE_IP,  IP_TYPE_ICMP)
-DEFINE_FIELD  (OF_ICMP_CODE, OFPFW_TP_DST,   ETH_TYPE_IP,  IP_TYPE_ICMP)
-DEFINE_FIELD  (OF_ARP_OP,    OFPFW_NW_PROTO, ETH_TYPE_ARP, 0)
-DEFINE_FIELD_M(OF_ARP_SPA,   0,              ETH_TYPE_ARP, 0)
-DEFINE_FIELD_M(OF_ARP_TPA,   0,              ETH_TYPE_ARP, 0)
-DEFINE_FIELD  (NX_TUN_ID,    NXFW_TUN_ID,    0,            0)
+/*             NXM_ suffix    MFF_ field ID    rw? */
+/*             ------------   ------------   ----- */
+DEFINE_FIELD_M(NX_TUN_ID,     MFF_TUN_ID,     true)
+DEFINE_FIELD  (OF_IN_PORT,    MFF_IN_PORT,   false)
+DEFINE_FIELD_M(OF_ETH_DST,    MFF_ETH_DST,    true)
+DEFINE_FIELD  (OF_ETH_SRC,    MFF_ETH_SRC,    true)
+DEFINE_FIELD  (OF_ETH_TYPE,   MFF_ETH_TYPE,  false)
+DEFINE_FIELD_M(OF_VLAN_TCI,   MFF_VLAN_TCI,   true)
+DEFINE_FIELD  (OF_IP_TOS,     MFF_IP_DSCP,    true)
+DEFINE_FIELD  (OF_IP_PROTO,   MFF_IP_PROTO,  false)
+DEFINE_FIELD_M(OF_IP_SRC,     MFF_IPV4_SRC,   true)
+DEFINE_FIELD_M(OF_IP_DST,     MFF_IPV4_DST,   true)
+DEFINE_FIELD_M(NX_IP_FRAG,    MFF_IP_FRAG,   false)
+DEFINE_FIELD  (OF_TCP_SRC,    MFF_TCP_SRC,    true)
+DEFINE_FIELD  (OF_TCP_DST,    MFF_TCP_DST,    true)
+DEFINE_FIELD  (OF_UDP_SRC,    MFF_UDP_SRC,    true)
+DEFINE_FIELD  (OF_UDP_DST,    MFF_UDP_DST,    true)
+DEFINE_FIELD  (OF_ICMP_TYPE,  MFF_ICMPV4_TYPE, false)
+DEFINE_FIELD  (OF_ICMP_CODE,  MFF_ICMPV4_CODE, false)
+DEFINE_FIELD  (OF_ARP_OP,     MFF_ARP_OP,    false)
+DEFINE_FIELD_M(OF_ARP_SPA,    MFF_ARP_SPA,   false)
+DEFINE_FIELD_M(OF_ARP_TPA,    MFF_ARP_TPA,   false)
+DEFINE_FIELD  (NX_ARP_SHA,    MFF_ARP_SHA,   false)
+DEFINE_FIELD  (NX_ARP_THA,    MFF_ARP_THA,   false)
+DEFINE_FIELD_M(NX_IPV6_SRC,   MFF_IPV6_SRC,  false)
+DEFINE_FIELD_M(NX_IPV6_DST,   MFF_IPV6_DST,  false)
+DEFINE_FIELD  (NX_IPV6_LABEL, MFF_IPV6_LABEL,false)
+DEFINE_FIELD  (NX_IP_ECN,     MFF_IP_ECN,     true)
+DEFINE_FIELD  (NX_IP_TTL,     MFF_IP_TTL,     true)
+/* XXX should we have MFF_ICMPV4_TYPE and MFF_ICMPV6_TYPE? */
+DEFINE_FIELD  (NX_ICMPV6_TYPE,MFF_ICMPV6_TYPE, false)
+DEFINE_FIELD  (NX_ICMPV6_CODE,MFF_ICMPV6_CODE, false)
+DEFINE_FIELD  (NX_ND_TARGET,  MFF_ND_TARGET, false)
+DEFINE_FIELD  (NX_ND_SLL,     MFF_ND_SLL,    false)
+DEFINE_FIELD  (NX_ND_TLL,     MFF_ND_TLL,    false)
 
-DEFINE_FIELD_M(NX_REG0,      0,              0,            0)
+DEFINE_FIELD_M(NX_REG0,       MFF_REG0,       true)
 #if FLOW_N_REGS >= 2
-DEFINE_FIELD_M(NX_REG1,      0,              0,            0)
+DEFINE_FIELD_M(NX_REG1,       MFF_REG1,       true)
 #endif
 #if FLOW_N_REGS >= 3
-DEFINE_FIELD_M(NX_REG2,      0,              0,            0)
+DEFINE_FIELD_M(NX_REG2,       MFF_REG2,       true)
 #endif
 #if FLOW_N_REGS >= 4
-DEFINE_FIELD_M(NX_REG3,      0,              0,            0)
+DEFINE_FIELD_M(NX_REG3,       MFF_REG3,       true)
 #endif
-#if FLOW_N_REGS > 4
+#if FLOW_N_REGS >= 5
+DEFINE_FIELD_M(NX_REG4,       MFF_REG4,       true)
+#endif
+#if FLOW_N_REGS > 5
 #error
 #endif