--- openflow-2013-02-04.h	2015-07-23 09:54:17.400479372 -0700
+++ openflow-2012-06-26.h	2015-07-23 09:54:17.404479372 -0700
@@ -152,6 +152,9 @@
 
     /* Controller role change event messages. */
     OFPT_ROLE_STATUS        = 30, /* Async message */
+
+    /* Asynchronous messages. */
+    OFPT_TABLE_STATUS       = 31, /* Async message */
 };
 
 /* Header on all OpenFlow packets. */
@@ -234,12 +237,14 @@
 
 /* Flags to configure the table. Reserved for future use. */
 enum ofp_table_config {
-    OFPTC_DEPRECATED_MASK       = 3,  /* Deprecated bits */
+    OFPTC_DEPRECATED_MASK       = 3,       /* Deprecated bits */
+    OFPTC_VACANCY_EVENTS        = 1 << 3,  /* Enable vacancy events. */
 };
 
 /* Table Mod property types.
  */
 enum ofp_table_mod_prop_type {
+    OFPTMPT_VACANCY                = 0x3,    /* Vacancy property. */
     OFPTMPT_EXPERIMENTER           = 0xFFFF, /* Experimenter property. */
 };
 
@@ -250,6 +255,17 @@
 };
 OFP_ASSERT(sizeof(struct ofp_table_mod_prop_header) == 4);
 
+/* Vacancy table mod property */
+struct ofp_table_mod_prop_vacancy {
+    uint16_t         type;   /* One of OFPTMPT_VACANCY. */
+    uint16_t         length; /* Length in bytes of this property. */
+    uint8_t vacancy_down;    /* Vacancy threshold when space decreases (%). */
+    uint8_t vacancy_up;      /* Vacancy threshold when space increases (%). */
+    uint8_t vacancy;         /* Current vacancy (%) - only in ofp_table_desc. */
+    uint8_t pad[1];          /* Align to 64 bits. */
+};
+OFP_ASSERT(sizeof(struct ofp_table_mod_prop_vacancy) == 8);
+
 /* Experimenter table mod property */
 struct ofp_table_mod_prop_experimenter {
     uint16_t         type;    /* One of OFPTMPT_EXPERIMENTER. */
@@ -2821,4 +2837,18 @@
 };
 OFP_ASSERT(sizeof(struct ofp_async_config) == 8);
 
+/* What changed about the table */
+enum ofp_table_reason {
+    OFPTR_VACANCY  = 3,        /* Vacancy threshold event. */
+};
+
+/* A table config has changed in the datapath */
+struct ofp_table_status {
+    struct ofp_header header;
+    uint8_t reason;         /* One of OFPPR_*. */
+    uint8_t pad[7];         /* Pad to 64 bits */
+    struct ofp_table_desc table;   /* New table config. */
+};
+OFP_ASSERT(sizeof(struct ofp_table_status) == 24);
+
 #endif /* openflow/openflow.h */
