ofp-prop: New module for working with OpenFlow 1.3+ properties.
[cascardo/ovs.git] / include / openflow / openflow-common.h
index e4fecce..d2efa5f 100644 (file)
@@ -103,7 +103,8 @@ enum ofp_version {
  */
 #define OF_VENDOR_ID    0
 #define HPL_VENDOR_ID   0x000004EA /* HP Labs. */
-#define NTR_VENDOR_ID   0x00001540 /* Netronome. */
+#define NTR_VENDOR_ID   0x0000154d /* Netronome. */
+#define NTR_COMPAT_VENDOR_ID   0x00001540 /* Incorrect value used in v2.4. */
 #define NX_VENDOR_ID    0x00002320 /* Nicira. */
 #define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
 
@@ -113,8 +114,6 @@ enum ofp_version {
 #define OFP_OLD_PORT  6633
 #define OFP_PORT  6653
 
-#define OFP_ETH_ALEN 6          /* Bytes in an Ethernet address. */
-
 #define OFP_DEFAULT_MISS_SEND_LEN   128
 
 /* Values below this cutoff are 802.3 packets and the two bytes
@@ -210,28 +209,33 @@ enum ofp_port_features {
     OFPPF_10GB_FD    = 1 << 6,  /* 10 Gb full-duplex rate support. */
 };
 
-enum ofp_queue_properties {
-    OFPQT_MIN_RATE = 1,          /* Minimum datarate guaranteed. */
-    OFPQT_MAX_RATE = 2,          /* Maximum guaranteed rate. */
-    OFPQT_EXPERIMENTER = 0xffff, /* Experimenter defined property. */
+/* Generic OpenFlow property header, as used by various messages in OF1.3+, and
+ * especially in OF1.4.
+ *
+ * The OpenFlow specs prefer to define a new structure with a specialized name
+ * each time this property structure comes up: struct
+ * ofp_port_desc_prop_header, struct ofp_controller_status_prop_header, struct
+ * ofp_table_mod_prop_header, and more.  They're all the same, so it's easier
+ * to unify them.
+ */
+struct ofp_prop_header {
+    ovs_be16 type;
+    ovs_be16 len;
 };
+OFP_ASSERT(sizeof(struct ofp_prop_header) == 4);
 
-/* Common description for a queue. */
-struct ofp_queue_prop_header {
-    ovs_be16 property; /* One of OFPQT_. */
-    ovs_be16 len;      /* Length of property, including this header. */
-    uint8_t pad[4];    /* 64-bit alignemnt. */
-};
-OFP_ASSERT(sizeof(struct ofp_queue_prop_header) == 8);
-
-/* Min-Rate and Max-Rate queue property description (OFPQT_MIN and
- * OFPQT_MAX). */
-struct ofp_queue_prop_rate {
-    struct ofp_queue_prop_header prop_header;
-    ovs_be16 rate;        /* In 1/10 of a percent; >1000 -> disabled. */
-    uint8_t pad[6];       /* 64-bit alignment */
+/* Generic OpenFlow experimenter property header.
+ *
+ * Again the OpenFlow specs define this over and over again and it's easier to
+ * unify them. */
+struct ofp_prop_experimenter {
+    ovs_be16 type;          /* Generally 0xffff (in one case 0xfffe). */
+    ovs_be16 len;           /* Length in bytes of this property. */
+    ovs_be32 experimenter;  /* Experimenter ID which takes the same form as
+                             * in struct ofp_experimenter_header. */
+    ovs_be32 exp_type;      /* Experimenter defined. */
 };
-OFP_ASSERT(sizeof(struct ofp_queue_prop_rate) == 16);
+OFP_ASSERT(sizeof(struct ofp_prop_experimenter) == 12);
 
 /* Switch features. */
 struct ofp_switch_features {
@@ -301,13 +305,16 @@ enum ofp_flow_removed_reason {
     OFPRR_GROUP_DELETE,         /* Group was removed. */
     OFPRR_METER_DELETE,         /* Meter was removed. */
     OFPRR_EVICTION,             /* Switch eviction to free resources. */
+
+    OVS_OFPRR_NONE              /* OVS internal_use only, keep last!. */
 };
 
 /* What changed about the physical port */
 enum ofp_port_reason {
     OFPPR_ADD,              /* The port was added. */
     OFPPR_DELETE,           /* The port was removed. */
-    OFPPR_MODIFY            /* Some attribute of the port has changed. */
+    OFPPR_MODIFY,           /* Some attribute of the port has changed. */
+    OFPPR_N_REASONS         /* Denotes number of reasons. */
 };
 
 /* A physical port has changed in the datapath */