ovsdb-idl: Optimize out transactions that are complete no-ops.
[openvswitch] / include / openflow / nicira-ext.h
index 7df978b0cb9fbf0570c7e419f40374856da83243..da80ad91a9d663223b059227029627737a97cb6e 100644 (file)
@@ -125,46 +125,36 @@ OFP_ASSERT(sizeof(struct nicira_header) == 16);
 /* Values for the 'subtype' member of struct nicira_header. */
 enum nicira_type {
     /* No longer used. */
-    NXT_STATUS_REQUEST__OBSOLETE,
-    NXT_STATUS_REPLY__OBSOLETE,
-    NXT_ACT_SET_CONFIG__OBSOLETE,
-    NXT_ACT_GET_CONFIG__OBSOLETE,
-    NXT_COMMAND_REQUEST__OBSOLETE,
-    NXT_COMMAND_REPLY__OBSOLETE,
-    NXT_FLOW_END_CONFIG__OBSOLETE,
-    NXT_FLOW_END__OBSOLETE,
-    NXT_MGMT__OBSOLETE,
-
-    /* Use the high 32 bits of the cookie field as the tunnel ID in the flow
-     * match. */
-    NXT_TUN_ID_FROM_COOKIE,
+    NXT_STATUS_REQUEST__OBSOLETE = 0,
+    NXT_STATUS_REPLY__OBSOLETE = 1,
+    NXT_ACT_SET_CONFIG__OBSOLETE = 2,
+    NXT_ACT_GET_CONFIG__OBSOLETE = 3,
+    NXT_COMMAND_REQUEST__OBSOLETE = 4,
+    NXT_COMMAND_REPLY__OBSOLETE = 5,
+    NXT_FLOW_END_CONFIG__OBSOLETE = 6,
+    NXT_FLOW_END__OBSOLETE = 7,
+    NXT_MGMT__OBSOLETE = 8,
+    NXT_TUN_ID_FROM_COOKIE__OBSOLETE = 9,
 
     /* Controller role support.  The request body is struct nx_role_request.
      * The reply echos the request. */
-    NXT_ROLE_REQUEST,
-    NXT_ROLE_REPLY,
+    NXT_ROLE_REQUEST = 10,
+    NXT_ROLE_REPLY = 11,
+
+    /* Flexible flow specification (aka NXM = Nicira Extended Match). */
+    NXT_SET_FLOW_FORMAT = 12,   /* Set flow format. */
+    NXT_FLOW_MOD = 13,          /* Analogous to OFPT_FLOW_MOD. */
+    NXT_FLOW_REMOVED = 14,      /* Analogous to OFPT_FLOW_REMOVED. */
 
     /* Use the upper 8 bits of the 'command' member in struct ofp_flow_mod to
      * designate the table to which a flow is to be added?  See the big comment
-     * on struct nxt_flow_mod_table_id for more information.
-     *
-     * A screwup caused this extension to be assigned the same value as
-     * NXT_SET_FLOW_FORMAT (see below).  The two extensions do have different
-     * lengths, so they can still be distinguished. */
-    NXT_FLOW_MOD_TABLE_ID,
-
-    /* Flexible flow specification (aka NXM = Nicira Extended Match). */
-    NXT_SET_FLOW_FORMAT = NXT_FLOW_MOD_TABLE_ID, /* Set flow format. */
-    NXT_FLOW_MOD,               /* Analogous to OFPT_FLOW_MOD. */
-    NXT_FLOW_REMOVED            /* Analogous to OFPT_FLOW_REMOVED. */
+     * on struct nxt_flow_mod_table_id for more information. */
+    NXT_FLOW_MOD_TABLE_ID = 15
 };
 
 /* Header for Nicira vendor stats request and reply messages. */
 struct nicira_stats_msg {
-    struct ofp_header header;   /* OFPT_STATS_REQUEST or OFPT_STATS_REPLY. */
-    ovs_be16 type;              /* OFPST_VENDOR. */
-    ovs_be16 flags;             /* OFPSF_{REQ,REPLY}_*. */
-    ovs_be32 vendor;            /* NX_VENDOR_ID. */
+    struct ofp_vendor_stats_msg vsm; /* Vendor NX_VENDOR_ID. */
     ovs_be32 subtype;           /* One of NXST_* below. */
     uint8_t pad[4];             /* Align to 64-bits. */
 };
@@ -177,16 +167,6 @@ enum nicira_stats_type {
     NXST_AGGREGATE              /* Analogous to OFPST_AGGREGATE. */
 };
 
-/* NXT_TUN_ID_FROM_COOKIE request. */
-struct nxt_tun_id_cookie {
-    struct ofp_header header;
-    ovs_be32 vendor;            /* NX_VENDOR_ID. */
-    ovs_be32 subtype;           /* NXT_TUN_ID_FROM_COOKIE */
-    uint8_t set;                /* Nonzero to enable, zero to disable. */
-    uint8_t pad[7];
-};
-OFP_ASSERT(sizeof(struct nxt_tun_id_cookie) == 24);
-
 /* This command enables or disables an Open vSwitch extension that allows a
  * controller to specify the OpenFlow table to which a flow should be added,
  * instead of having the switch decide which table is most appropriate as
@@ -270,7 +250,7 @@ enum nx_action_subtype {
     NXAST_SNAT__OBSOLETE,       /* No longer used. */
     NXAST_RESUBMIT,             /* struct nx_action_resubmit */
     NXAST_SET_TUNNEL,           /* struct nx_action_set_tunnel */
-    NXAST_DROP_SPOOFED_ARP,     /* struct nx_action_drop_spoofed_arp */
+    NXAST_DROP_SPOOFED_ARP__OBSOLETE,
     NXAST_SET_QUEUE,            /* struct nx_action_set_queue */
     NXAST_POP_QUEUE,            /* struct nx_action_pop_queue */
     NXAST_REG_MOVE,             /* struct nx_action_reg_move */
@@ -354,24 +334,6 @@ struct nx_action_set_tunnel64 {
 };
 OFP_ASSERT(sizeof(struct nx_action_set_tunnel64) == 24);
 
-/* Action structure for NXAST_DROP_SPOOFED_ARP.
- *
- * Stops processing further actions, if the packet being processed is an
- * Ethernet+IPv4 ARP packet for which the source Ethernet address inside the
- * ARP packet differs from the source Ethernet address in the Ethernet header.
- *
- * (This  action  is  deprecated in  favor of defining flows using the
- * NXM_NX_ARP_SHA flow match and will likely be removed in a future version
- * of Open vSwitch.) */
-struct nx_action_drop_spoofed_arp {
-    ovs_be16 type;                  /* OFPAT_VENDOR. */
-    ovs_be16 len;                   /* Length is 16. */
-    ovs_be32 vendor;                /* NX_VENDOR_ID. */
-    ovs_be16 subtype;               /* NXAST_DROP_SPOOFED_ARP. */
-    uint8_t pad[6];
-};
-OFP_ASSERT(sizeof(struct nx_action_drop_spoofed_arp) == 16);
-
 /* Action structure for NXAST_SET_QUEUE.
  *
  * Set the queue that should be used when packets are output.  This is similar
@@ -658,12 +620,6 @@ enum nx_mp_algorithm {
      */
     NX_MP_ALG_ITER_HASH         /* Iterative Hash. */
 };
-
-/* Wildcard for tunnel ID. */
-#define NXFW_TUN_ID  (1 << 25)
-
-#define NXFW_ALL NXFW_TUN_ID
-#define OVSFW_ALL (OFPFW_ALL | NXFW_ALL)
 \f
 /* Action structure for NXAST_AUTOPATH.
  *
@@ -1219,8 +1175,6 @@ OFP_ASSERT(sizeof(struct nx_action_autopath) == 24);
 
 enum nx_flow_format {
     NXFF_OPENFLOW10 = 0,         /* Standard OpenFlow 1.0 compatible. */
-    NXFF_TUN_ID_FROM_COOKIE = 1, /* OpenFlow 1.0, plus obtain tunnel ID from
-                                  * cookie. */
     NXFF_NXM = 2                 /* Nicira extended match. */
 };
 
@@ -1317,8 +1271,8 @@ struct nx_flow_stats {
     ovs_be16 match_len;       /* Length of nx_match. */
     uint8_t pad2[4];          /* Align to 64 bits. */
     ovs_be64 cookie;          /* Opaque controller-issued identifier. */
-    ovs_be64 packet_count;    /* Number of packets in flow. */
-    ovs_be64 byte_count;      /* Number of bytes in flow. */
+    ovs_be64 packet_count;    /* Number of packets, UINT64_MAX if unknown. */
+    ovs_be64 byte_count;      /* Number of bytes, UINT64_MAX if unknown. */
     /* Followed by:
      *   - Exactly match_len (possibly 0) bytes containing the nx_match, then
      *   - Exactly (match_len + 7)/8*8 - match_len (between 0 and 7) bytes of
@@ -1350,14 +1304,13 @@ struct nx_aggregate_stats_request {
 OFP_ASSERT(sizeof(struct nx_aggregate_stats_request) == 32);
 
 /* Body for nicira_stats_msg reply of type NXST_AGGREGATE (analogous to
- * OFPST_AGGREGATE reply).
- *
- * ofp_aggregate_stats_reply does not contain an ofp_match structure, so we
- * reuse it entirely.  (It would be very odd to use OFPST_AGGREGATE to reply to
- * an NXST_AGGREGATE request, so we don't do that.) */
+ * OFPST_AGGREGATE reply). */
 struct nx_aggregate_stats_reply {
     struct nicira_stats_msg nsm;
-    struct ofp_aggregate_stats_reply asr;
+    ovs_be64 packet_count;     /* Number of packets, UINT64_MAX if unknown. */
+    ovs_be64 byte_count;       /* Number of bytes, UINT64_MAX if unknown. */
+    ovs_be32 flow_count;       /* Number of flows. */
+    uint8_t pad[4];            /* Align to 64 bits. */
 };
 OFP_ASSERT(sizeof(struct nx_aggregate_stats_reply) == 48);