--- openflow-2013-06-14.h	2015-07-23 09:54:17.480479376 -0700
+++ openflow-2013-01-23.h	2015-07-23 09:54:17.488479376 -0700
@@ -354,6 +354,7 @@
  */
 enum ofp_port_desc_prop_type {
     OFPPDPT_ETHERNET          = 0,      /* Ethernet property. */
+    OFPPDPT_OPTICAL           = 1,      /* Optical property. */
     OFPPDPT_EXPERIMENTER      = 0xFFFF, /* Experimenter property. */
 };
 
@@ -381,6 +382,32 @@
 };
 OFP_ASSERT(sizeof(struct ofp_port_desc_prop_ethernet) == 32);
 
+/* Features of optical ports available in switch. */
+enum ofp_optical_port_features {
+    OFPOPF_RX_TUNE   = 1 << 0,  /* Receiver is tunable */
+    OFPOPF_TX_TUNE   = 1 << 1,  /* Transmit is tunable */
+    OFPOPF_TX_PWR    = 1 << 2,  /* Power is configurable */
+    OFPOPF_USE_FREQ  = 1 << 3,  /* Use Frequency, not wavelength */
+};
+
+/* Optical port description property. */
+struct ofp_port_desc_prop_optical {
+    uint16_t         type;    /* OFPPDPT_3OPTICAL. */
+    uint16_t         length;  /* Length in bytes of this property. */
+    uint8_t          pad[4];  /* Align to 64 bits. */
+
+    uint32_t supported;     /* Features supported by the port. */
+    uint32_t tx_min_freq_lmda;   /* Minimum TX Frequency/Wavelength */
+    uint32_t tx_max_freq_lmda;   /* Maximum TX Frequency/Wavelength */
+    uint32_t tx_grid_freq_lmda;  /* TX Grid Spacing Frequency/Wavelength */
+    uint32_t rx_min_freq_lmda;   /* Minimum RX Frequency/Wavelength */
+    uint32_t rx_max_freq_lmda;   /* Maximum RX Frequency/Wavelength */
+    uint32_t rx_grid_freq_lmda;  /* RX Grid Spacing Frequency/Wavelength */
+    uint16_t tx_pwr_min;         /* Minimum TX power */
+    uint16_t tx_pwr_max;         /* Maximum TX power */
+};
+OFP_ASSERT(sizeof(struct ofp_port_desc_prop_optical) == 40);
+
 /* Experimenter port description property. */
 struct ofp_port_desc_prop_experimenter {
     uint16_t         type;    /* OFPPDPT_EXPERIMENTER. */
@@ -453,6 +480,7 @@
  */
 enum ofp_port_mod_prop_type {
     OFPPMPT_ETHERNET          = 0,      /* Ethernet property. */
+    OFPPMPT_OPTICAL           = 1,      /* Optical property. */
     OFPPMPT_EXPERIMENTER      = 0xFFFF, /* Experimenter property. */
 };
 
@@ -472,6 +500,17 @@
 };
 OFP_ASSERT(sizeof(struct ofp_port_mod_prop_ethernet) == 8);
 
+struct ofp_port_mod_prop_optical {
+    uint16_t      type;       /* OFPPMPT_OPTICAL. */
+    uint16_t      length;     /* Length in bytes of this property. */
+    uint32_t      configure;  /* Bitmap of OFPOPF_*. */
+    uint32_t      freq_lmda;  /* The "center" frequency */
+    int32_t       fl_offset;  /* signed frequency offset */
+    uint32_t      grid_span;  /* The size of the grid for this port */
+    uint32_t      tx_pwr;     /* tx power setting */
+};
+OFP_ASSERT(sizeof(struct ofp_port_mod_prop_optical) == 48);
+
 /* Experimenter port mod property. */
 struct ofp_port_mod_prop_experimenter {
     uint16_t         type;    /* OFPPMPT_EXPERIMENTER. */
@@ -2266,6 +2305,7 @@
  */
 enum ofp_port_stats_prop_type {
     OFPPSPT_ETHERNET          = 0,      /* Ethernet property. */
+    OFPPSPT_OPTICAL           = 1,      /* Optical property. */
     OFPPSPT_EXPERIMENTER      = 0xFFFF, /* Experimenter property. */
 };
 
@@ -2289,6 +2329,36 @@
 };
 OFP_ASSERT(sizeof(struct ofp_port_stats_prop_ethernet) == 40);
 
+/* Optical port stats property. */
+struct ofp_port_stats_prop_optical {
+    uint16_t         type;    /* OFPPSPT_OPTICAL. */
+    uint16_t         length;  /* Length in bytes of this property. */
+    uint8_t          pad[4];  /* Align to 64 bits. */
+
+    uint32_t flags;          /* Features enabled by the port. */
+    uint32_t tx_freq_lmda;   /* Current TX Frequency/Wavelength */
+    uint32_t tx_offset;      /* TX Offset */
+    uint32_t tx_grid_span;   /* TX Grid Spacing */
+    uint32_t rx_freq_lmda;   /* Current RX Frequency/Wavelength */
+    uint32_t rx_offset;      /* RX Offset */
+    uint32_t rx_grid_span;   /* RX Grid Spacing */
+    uint16_t tx_pwr;         /* Current TX power */
+    uint16_t rx_pwr;         /* Current RX power */
+    uint16_t bias_current;   /* TX Bias Current */
+    uint16_t temperature;    /* TX Laser Temperature */
+};
+OFP_ASSERT(sizeof(struct ofp_port_stats_prop_optical) == 44);
+
+/* Flags is one of OFPOSF_ below */
+enum ofp_port_stats_optical_flags  {
+    OFPOSF_RX_TUNE   = 1 << 0,  /* Receiver tune info valid */
+    OFPOSF_TX_TUNE   = 1 << 1,  /* Transmit tune info valid */
+    OFPOSF_TX_PWR    = 1 << 2,  /* TX Power is valid */
+    OFPOSF_RX_PWR    = 1 << 4,  /* RX power is valid */
+    OFPOSF_TX_BIAS   = 1 << 5,  /* Transmit bias is valid */
+    OFPOSF_TX_TEMP   = 1 << 6,  /* TX Temp is valid */
+};
+
 /* Experimenter port stats property. */
 struct ofp_port_stats_prop_experimenter {
     uint16_t         type;    /* OFPPSPT_EXPERIMENTER. */
