--- openflow-2013-10-17-2.h	2015-07-23 09:54:17.804479389 -0700
+++ openflow-2014-10-01.h	2015-07-23 09:54:17.812479389 -0700
@@ -2158,7 +2158,10 @@
   OFPBFC_MSG_TOO_MANY   = 12, /* Can't handle this many messages in bundle. */
   OFPBFC_MSG_FAILED     = 13, /* One message in bundle failed. */
   OFPBFC_TIMEOUT        = 14, /* Bundle is taking too long. */
-  OFPBFC_BUNDLE_IN_PROGRESS = 15, /* Bundle is locking the resource. */
+  OFPBFC_BUNDLE_IN_PROGRESS = 15,  /* Bundle is locking the resource. */
+  OFPBFC_SCHED_NOT_SUPPORTED = 16, /* Scheduled commit was received and scheduling is not supported. */
+  OFPBFC_SCHED_FUTURE = 17,        /* Scheduled commit time exceeds upper bound. */
+  OFPBFC_SCHED_PAST = 18,          /* Scheduled commit time exceeds lower bound. */
 };
 
 /* OFPT_ERROR: Error message (datapath -> controller). */
@@ -2287,6 +2290,11 @@
      * The reply body is an array of struct ofp_controller_status. */
     OFPMP_CONTROLLER_STATUS = 18,
 
+    /* Bundle features.
+    * The request body is ofp_bundle_features_request.
+    * The reply body is struct ofp_bundle_features. */
+    OFPMP_BUNDLE_FEATURES = 19,
+
     /* Experimenter extension.
      * The request and reply bodies begin with
      * struct ofp_experimenter_multipart_header.
@@ -3152,6 +3160,61 @@
     OFPCT_STATUS_DOWN   = 1,    /* Control channel is not operational. */
 };
 
+struct ofp_bundle_features_prop_header {
+	uint16_t type;          /* One of OFPTMPBF_*. */
+	uint16_t length;        /* Length in bytes of this property. */
+};
+OFP_ASSERT(sizeof(struct ofp_bundle_features_prop_header) == 4);
+
+/* Body of OFPMP_BUNDLE_FEATURES request. */
+struct ofp_bundle_features_request {
+	uint32_t feature_request_flags;  /* Bitmap of "ofp_bundle_feature_flags". */
+	uint8_t pad[4];
+
+	/* Bundle features property list - 0 or more. */
+	struct ofp_bundle_features_prop_header properties[0];
+};
+OFP_ASSERT(sizeof(struct ofp_bundle_features_request) == 8);
+
+/* Bundle features property types. */
+enum ofp_bundle_features_prop_type {
+	OFPTMPBF_TIME_CAPABILITY = 0x1, /* Time feature property. */
+	OFPTMPBF_EXPERIMENTER = 0xFFFF, /* Experimenter property. */
+};
+
+struct ofp_bundle_features_prop_time {
+	uint16_t type;                    /* OFPTMPBF_TIME_CAPABILITY. */
+	uint16_t length;                  /* Length in bytes of this property. */
+	uint8_t pad[4];
+	struct ofp_time sched_accuracy;   /* The scheduling accuracy, i.e., how accurately the switch can
+                                           * perform a scheduled commit. This field is used only in bundle
+                                           * features replies, and is ignored in bundle features requests. */
+	struct ofp_time sched_max_future; /* The maximal difference between the
+                                           * scheduling time and the current time.*/
+	struct ofp_time sched_max_past;   /* If the scheduling time occurs in the past, defines the maximal
+                                           * difference between the current time and the scheduling time.*/
+	struct ofp_time timestamp;        /* Indicates the time during the transmission of this message.*/
+};
+OFP_ASSERT(sizeof(struct ofp_bundle_features_prop_time) == 72);
+
+enum ofp_bundle_feature_flags {
+	OFPBF_TIMESTAMP = 1 << 0,       /* When enabled, the current request 
+                                         * includes a timestamp, using the time property. */
+	OFPBF_TIME_SET_SCHED = 1 << 1,  /* When enabled, the current request includes 
+                                         * the sched_max_future and sched_max_past 
+                                         * parameters, using the time property. */
+};
+
+/* Body of reply to OFPMP_BUNDLE_FEATURES request. */
+struct ofp_bundle_features {
+	uint16_t capabilities; /* Bitmap of "ofp_bundle_flags". */
+	uint8_t pad[6];
+
+	/* Bundle features property list - 0 or more. */
+	struct ofp_bundle_features_prop_header properties[0];
+};
+OFP_ASSERT(sizeof(struct ofp_bundle_features) == 8);
+
 /* Body for ofp_multipart_request/reply of type OFPMP_EXPERIMENTER. */
 struct ofp_experimenter_multipart_header {
     uint32_t experimenter;    /* Experimenter ID. */
@@ -3378,6 +3441,7 @@
 /* Bundle property types. */
 enum ofp_bundle_prop_type {
     OFPBPT_EXPERIMENTER           = 0xFFFF, /* Experimenter property. */
+    OFPBPT_TIME                   = 1,      /* Time property. */ 
 };
 
 /* Common header for all Bundle Properties */
@@ -3403,6 +3467,23 @@
 };
 OFP_ASSERT(sizeof(struct ofp_bundle_prop_experimenter) == 12);
 
+/* Time Format. */
+struct ofp_time{
+	uint64_t seconds;
+	uint32_t nanoseconds;
+	uint8_t  pad[4];
+};
+OFP_ASSERT(sizeof(struct ofp_time)==16);
+
+/* Bundle time property. */
+struct ofp_bundle_prop_time{
+	uint16_t type;       /* OFPBPT_TIME */
+	uint16_t length;     /* Length in bytes of this property (24). */
+	uint8_t  pad[4];
+	struct ofp_time scheduled_time;
+};
+OFP_ASSERT(sizeof(struct ofp_bundle_prop_time)==24);
+
 /* Bundle control message types */
 enum ofp_bundle_ctrl_type {
     OFPBCT_OPEN_REQUEST    = 0,
@@ -3419,6 +3500,7 @@
 enum ofp_bundle_flags {
     OFPBF_ATOMIC  = 1 << 0,  /* Execute atomically. */
     OFPBF_ORDERED = 1 << 1,  /* Execute in specified order. */
+    OFPBF_TIME    = 1 << 2,  /* Execute in specified time. */ 
 };
 
 /* Message structure for OFPT_BUNDLE_CONTROL. */
