--- openflow-2011-10-24-2.h	2015-07-23 09:54:16.756479346 -0700
+++ openflow-2011-10-24-3.h	2015-07-23 09:54:16.760479346 -0700
@@ -1438,6 +1438,11 @@
      * The reply body is an array of struct ofp_group_desc_stats. */
     OFPST_GROUP_DESC,
 
+    /* Group features.
+     * The request body is empty.
+     * The reply body is struct ofp_group_features_stats. */
+    OFPST_GROUP_FEATURES,
+
     /* Experimenter extension.
      * The request and reply bodies begin with
      * struct ofp_experimenter_stats_header.
@@ -1655,6 +1660,23 @@
 };
 OFP_ASSERT(sizeof(struct ofp_group_desc_stats) == 8);
 
+/* Meter configuration flags */
+enum ofp_group_capabilities {
+    OFPGFC_SELECT_WEIGHT   = 1 << 0,  /* Support weight for select groups */
+    OFPGFC_SELECT_LIVENESS = 1 << 1,  /* Support liveness for select groups */
+    OFPGFC_CHAINING        = 1 << 2,  /* Support chaining groups */
+    OFPGFC_CHAINING_CHECKS = 1 << 2,  /* Check chaining for loops and delete */
+};
+
+/* Body of reply to OFPST_GROUP_FEATURES request. Group features. */
+struct ofp_group_features_stats {
+    uint32_t  types;           /* Bitmap of OFPGT_* values supported. */
+    uint32_t  capabilities;    /* Bitmap of OFPGFC_* capability supported. */
+    uint32_t  max_groups[4];   /* Maximum number of groups for each type. */
+    uint32_t  actions[4];      /* Bitmaps of OFPAT_* that are supported. */
+};
+OFP_ASSERT(sizeof(struct ofp_group_features_stats) == 40);
+
 /* Body for ofp_stats_request/reply of type OFPST_EXPERIMENTER. */
 struct ofp_experimenter_stats_header {
     uint32_t experimenter;    /* Experimenter ID which takes the same form
