struct ofp_prop_header {
ovs_be16 type;
ovs_be16 len;
+ /* Followed by:
+ * - 'len - 4' bytes of payload.
+ * - PAD_SIZE(len, 8) bytes of zeros. */
};
OFP_ASSERT(sizeof(struct ofp_prop_header) == 4);
ovs_be32 experimenter; /* Experimenter ID which takes the same form as
* in struct ofp_experimenter_header. */
ovs_be32 exp_type; /* Experimenter defined. */
+ /* Followed by:
+ * - 'len - 12' bytes of payload.
+ * - PAD_SIZE(len, 8) bytes of zeros. */
};
OFP_ASSERT(sizeof(struct ofp_prop_experimenter) == 12);
/* Why is this packet being sent to the controller? */
enum ofp_packet_in_reason {
+ /* Standard reasons. */
OFPR_NO_MATCH, /* No matching flow. */
OFPR_ACTION, /* Action explicitly output to controller. */
OFPR_INVALID_TTL, /* Packet has invalid TTL. */
(OFPR10_BITS | \
(1u << OFPR_ACTION_SET) | (1u << OFPR_GROUP) | (1u << OFPR_PACKET_OUT))
+ /* Nonstandard reason--not exposed via OpenFlow. */
+ OFPR_EXPLICIT_MISS,
+ OFPR_IMPLICIT_MISS,
+
OFPR_N_REASONS
};