/* 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,
- NXT_TUN_ID_FROM_COOKIE__OBSOLETE,
+ 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. */
};
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 */
};
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
ovs_be16 type; /* OFPAT_VENDOR. */
ovs_be16 len; /* Length is 20. */
ovs_be32 vendor; /* NX_VENDOR_ID. */
- ovs_be16 subtype; /* NXAST_MULTIPATH. */
+ ovs_be16 subtype; /* NXAST_AUTOPATH. */
/* Where to store the result. */
ovs_be16 ofs_nbits; /* (ofs << 6) | (n_bits - 1). */
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
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);