--- openflow-2012-01-23-3.h	2015-07-23 09:54:16.996479356 -0700
+++ openflow-2012-01-24.h	2015-07-23 09:54:17.000479356 -0700
@@ -454,9 +454,10 @@
     OFPXMT_OFP_MPLS_BOS       = 36, /* MPLS BoS bit. */
     OFPXMT_OFB_PBB_ISID       = 37, /* PBB I-SID. */
     OFPXMT_OFB_TUNNEL_ID      = 38, /* Logical Port Metadata. */
+    OFPXMT_OFB_METER_COLOR    = 39, /* Metering color. */
 };
 
-#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 39) - 1)
+#define OFPXMT_OFB_ALL    ((UINT64_C(1) << 40) - 1)
 
 /* OpenFlow port on which the packet was received.
  * May be a physical port, a logical port, or the reserved port OFPP_LOCAL
@@ -853,6 +854,15 @@
 #define OXM_OF_TUNNEL_ID    OXM_HEADER  (0x8000, OFPXMT_OFB_TUNNEL_ID, 8)
 #define OXM_OF_TUNNEL_ID_W  OXM_HEADER_W(0x8000, OFPXMT_OFB_TUNNEL_ID, 8)
 
+/* The metering color (packet metadata).
+ *
+ * Prereqs: None.
+ *
+ * Format: 32-bit integer in network byte order.
+ *
+ * Masking: Not maskable. */
+#define OXM_OF_METER_COLOR  OXM_HEADER  (0x8000, OFPXMT_OFB_METER_COLOR, 4)
+
 /* Header for OXM experimenter match fields. */
 struct ofp_oxm_experimenter_header {
     uint32_t oxm_header;        /* oxm_class = OFPXMC_EXPERIMENTER */
@@ -1281,9 +1291,11 @@
 
 /* Meter property types */
 enum ofp_meter_prop_type {
-    OFPMPT_DROP           = 1,      /* Drop packet */
-    OFPMPT_DSCP_REMARK    = 2,      /* Remark DSCP in the IP header */
-    OFPMPT_EXPERIMENTER   = 0xFFFF  /* Experimenter meter property */
+    OFPMPT_DROP            = 1,      /* Drop packet */
+    OFPMPT_DSCP_REMARK     = 2,      /* Remark DSCP in the IP header */
+    OFPMPT_COLOR_INCREASE  = 3,      /* Increase metering color by amount */
+    OFPMPT_COLOR_RAISE_TO  = 4,      /* Raise metering color to level */
+    OFPMPT_EXPERIMENTER    = 0xFFFF  /* Experimenter meter property */
 };
 
 /* Common header for all rate properties */
@@ -1316,6 +1328,26 @@
 };
 OFP_ASSERT(sizeof(struct ofp_meter_prop_dscp_remark) == 16);
 
+/* OFPMPT_COLOR_INCREASE property - Increase metering color by amount */
+struct ofp_meter_prop_color_increase {
+    uint16_t        type;    /* One of OFPMPT_COLOR_INCREASE. */
+    uint16_t        len;     /* Length in bytes of this property. */
+    uint32_t        rate;    /* Rate for dropping packets. */
+    uint32_t        burst_size;   /* Size of bursts */
+    uint32_t        amount;       /* Amount to add to metering color */
+};
+OFP_ASSERT(sizeof(struct ofp_meter_prop_color_increase) == 16);
+
+/* OFPMPT_COLOR_RAISE_TO property - Raise metering color to level */
+struct ofp_meter_prop_color_raise_to {
+    uint16_t        type;    /* One of OFPMPT_COLOR_RAISE_TO. */
+    uint16_t        len;     /* Length in bytes of this property. */
+    uint32_t        rate;    /* Rate for dropping packets. */
+    uint32_t        burst_size;   /* Size of bursts */
+    uint32_t        level;        /* Minimum color level for packet */
+};
+OFP_ASSERT(sizeof(struct ofp_meter_prop_color_raise_to) == 16);
+
 /* OFPMPT_EXPERIMENTER property - Write actions in action set */
 struct ofp_meter_prop_experimenter {
     uint16_t        type;    /* One of OFPMPT_*. */
@@ -1571,8 +1603,9 @@
     OFPMMFC_BAD_RATE      = 6,  /* Rate unsupported. */
     OFPMMFC_BAD_BURST     = 7,  /* Burst size unsupported. */
     OFPMMFC_BAD_PROPERTY  = 8,  /* Property unsupported. */
-    OFPGMFC_OUT_OF_METERS = 9,  /* No more meters available. */
-    OFPGMFC_OUT_OF_PROPERTIES = 10,  /* The maximum number of properties
+    OFPMMFC_BAD_PROP_VALUE = 9, /* Property value unsupported. */
+    OFPGMFC_OUT_OF_METERS  = 10, /* No more meters available. */
+    OFPGMFC_OUT_OF_PROPERTIES = 11,  /* The maximum number of properties
                                       * for a meter has been exceeded. */
 };
 
