OpenConfig model for Infinera XT3300

Change-Id: I400c9146892932afc97d1a32e425722fd7c92345
diff --git a/models/openconfig-infinera/BUCK b/models/openconfig-infinera/BUCK
new file mode 100644
index 0000000..69363e2
--- /dev/null
+++ b/models/openconfig-infinera/BUCK
@@ -0,0 +1,16 @@
+COMPILE_DEPS = [
+    '//lib:CORE_DEPS',
+    '//models/ietf:onos-models-ietf',
+]
+
+APPS = [
+    'org.onosproject.models.ietf',
+]
+
+yang_model(
+  app_name = 'org.onosproject.models.openconfig-infinera',
+  title = 'OpenConfig Infinera XT3300 YANG Models',
+  custom_registrator = False,
+  deps = COMPILE_DEPS,
+  required_apps = APPS,
+)
diff --git a/models/openconfig-infinera/pom.xml b/models/openconfig-infinera/pom.xml
new file mode 100644
index 0000000..108ecbb
--- /dev/null
+++ b/models/openconfig-infinera/pom.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Copyright 2017-present Open Networking Foundation
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onosproject</groupId>
+        <artifactId>onos-models</artifactId>
+        <version>1.14.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>onos-models-openconfig-infinera</artifactId>
+    <packaging>bundle</packaging>
+    <description>OpenConfig Infinera YANG models</description>
+
+    <properties>
+        <onos.app.name>org.onosproject.models.openconfig-infinera</onos.app.name>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-yang-model</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-apps-yang</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onosproject</groupId>
+            <artifactId>onos-models-ietf</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions combine.children="append">
+                        <Include-Resource>yang/resources/YangMetaData.ser=target/classes/yang/resources/YangMetaData.ser</Include-Resource>
+                    </instructions>
+                </configuration>
+            </plugin>
+
+            <plugin>
+                <groupId>org.onosproject</groupId>
+                <artifactId>onos-yang-compiler-maven-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.onosproject</groupId>
+                <artifactId>onos-maven-plugin</artifactId>
+            </plugin>
+
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                  <execution>
+                    <id>add-source</id>
+                    <phase>generate-sources</phase>
+                    <goals>
+                      <goal>add-source</goal>
+                    </goals>
+                    <configuration>
+                      <sources>
+                        <source>${project.build.directory}/generated-sources</source>
+                      </sources>
+                    </configuration>
+                  </execution>
+                </executions>
+            </plugin>
+
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-clean-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <id>onos-yang-plugin-workaround</id>
+                        <!-- yang plugin cannot handle non-clean compilation -->
+                        <phase>initialize</phase>
+                        <goals>
+                            <goal>clean</goal>
+                        </goals>
+                        <configuration>
+                            <excludeDefaultDirectories>true</excludeDefaultDirectories>
+                            <filesets>
+                                <fileset>
+                                    <directory>target/generated-sources</directory>
+                                </fileset>
+                            </filesets>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+            <!-- FIXME: YANG tool generates problematic code -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <compilerArgs>
+                      <arg>-XepDisableAllChecks</arg>
+                      <arg>-Xep:BetaApi:OFF</arg>
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+
+        </plugins>
+
+        <pluginManagement>
+            <plugins>
+                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>
+                                            org.apache.maven.plugins
+                                        </groupId>
+                                        <artifactId>
+                                            maven-clean-plugin
+                                        </artifactId>
+                                        <versionRange>
+                                            [3.0.0,)
+                                        </versionRange>
+                                        <goals>
+                                            <goal>clean</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <ignore></ignore>
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+
+</project>
diff --git a/models/openconfig-infinera/src/main/yang/iana-if-type@2016-11-23.yang b/models/openconfig-infinera/src/main/yang/iana-if-type@2016-11-23.yang
new file mode 100644
index 0000000..f8cfc49
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/iana-if-type@2016-11-23.yang
@@ -0,0 +1,1609 @@
+module iana-if-type {
+  namespace "urn:ietf:params:xml:ns:yang:iana-if-type";
+  prefix ianaift;
+
+  import ietf-interfaces {
+    prefix if;
+  }
+
+  organization "IANA";
+  contact
+    "        Internet Assigned Numbers Authority
+
+     Postal: ICANN
+             12025 Waterfront Drive, Suite 300
+             Los Angeles, CA 90094-2536
+             United States
+
+     Tel:    +1 310 301 5800
+     <mailto:iana&amp;iana.org>";
+  description
+    "This YANG module defines YANG identities for IANA-registered
+     interface types.
+
+     This YANG module is maintained by IANA and reflects the
+     'ifType definitions' registry.
+
+     The latest revision of this YANG module can be obtained from
+     the IANA web site.
+
+     Requests for new values should be made to IANA via
+     email (iana&amp;iana.org).
+
+     Copyright (c) 2014 IETF Trust and the persons identified as
+     authors of the code.  All rights reserved.
+
+     Redistribution and use in source and binary forms, with or
+     without modification, is permitted pursuant to, and subject
+     to the license terms contained in, the Simplified BSD License
+     set forth in Section 4.c of the IETF Trust's Legal Provisions
+     Relating to IETF Documents
+     (http://trustee.ietf.org/license-info).
+
+     The initial version of this YANG module is part of RFC 7224;
+     see the RFC itself for full legal notices.";
+  reference
+    "IANA 'ifType definitions' registry.
+     <http://www.iana.org/assignments/smi-numbers>";
+
+  revision 2016-11-23 {
+    description
+      "Registered ifTypes 283-288.";
+  }
+
+  revision 2016-06-09 {
+    description
+      "Registered ifType 282.";
+  }
+  revision 2016-05-03 {
+    description
+      "Registered ifType 281.";
+  }
+  revision 2015-06-12 {
+    description
+      "Corrected formatting issue.";
+  }  
+  revision 2014-09-24 {
+    description
+      "Registered ifType 280.";
+  }
+  revision 2014-09-19 {
+    description
+      "Registered ifType 279.";
+  }
+  revision 2014-07-03 {
+    description
+      "Registered ifTypes 277-278.";
+  }
+  revision 2014-05-19 {
+    description
+      "Updated the contact address.";
+  }
+  revision 2014-05-08 {
+    description
+      "Initial revision.";
+    reference
+      "RFC 7224: IANA Interface Type YANG Module";
+  }
+
+  identity iana-interface-type {
+    base if:interface-type;
+    description
+      "This identity is used as a base for all interface types
+       defined in the 'ifType definitions' registry.";
+  }
+
+  identity other {
+    base iana-interface-type;
+  }
+  identity regular1822 {
+    base iana-interface-type;
+  }
+  identity hdh1822 {
+    base iana-interface-type;
+  }
+  identity ddnX25 {
+    base iana-interface-type;
+  }
+  identity rfc877x25 {
+    base iana-interface-type;
+    reference
+      "RFC 1382 - SNMP MIB Extension for the X.25 Packet Layer";
+  }
+  identity ethernetCsmacd {
+    base iana-interface-type;
+    description
+      "For all Ethernet-like interfaces, regardless of speed,
+       as per RFC 3635.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity iso88023Csmacd {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Deprecated via RFC 3635.
+       Use ethernetCsmacd(6) instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity iso88024TokenBus {
+    base iana-interface-type;
+  }
+  identity iso88025TokenRing {
+    base iana-interface-type;
+  }
+  identity iso88026Man {
+    base iana-interface-type;
+  }
+  identity starLan {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Deprecated via RFC 3635.
+       Use ethernetCsmacd(6) instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity proteon10Mbit {
+    base iana-interface-type;
+  }
+  identity proteon80Mbit {
+    base iana-interface-type;
+  }
+  identity hyperchannel {
+    base iana-interface-type;
+  }
+  identity fddi {
+    base iana-interface-type;
+    reference
+      "RFC 1512 - FDDI Management Information Base";
+  }
+  identity lapb {
+    base iana-interface-type;
+    reference
+      "RFC 1381 - SNMP MIB Extension for X.25 LAPB";
+  }
+  identity sdlc {
+    base iana-interface-type;
+  }
+  identity ds1 {
+    base iana-interface-type;
+    description
+      "DS1-MIB.";
+    reference
+      "RFC 4805 - Definitions of Managed Objects for the
+                  DS1, J1, E1, DS2, and E2 Interface Types";
+  }
+  identity e1 {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; see DS1-MIB.";
+    reference
+      "RFC 4805 - Definitions of Managed Objects for the
+                  DS1, J1, E1, DS2, and E2 Interface Types";
+  }
+  identity basicISDN {
+    base iana-interface-type;
+    description
+      "No longer used.  See also RFC 2127.";
+  }
+  identity primaryISDN {
+    base iana-interface-type;
+    description
+      "No longer used.  See also RFC 2127.";
+  }
+  identity propPointToPointSerial {
+    base iana-interface-type;
+    description
+      "Proprietary serial.";
+  }
+  identity ppp {
+    base iana-interface-type;
+  }
+  identity softwareLoopback {
+    base iana-interface-type;
+  }
+  identity eon {
+    base iana-interface-type;
+    description
+      "CLNP over IP.";
+  }
+  identity ethernet3Mbit {
+    base iana-interface-type;
+  }
+  identity nsip {
+    base iana-interface-type;
+    description
+      "XNS over IP.";
+  }
+  identity slip {
+    base iana-interface-type;
+    description
+      "Generic SLIP.";
+  }
+  identity ultra {
+    base iana-interface-type;
+    description
+      "Ultra Technologies.";
+  }
+  identity ds3 {
+    base iana-interface-type;
+    description
+      "DS3-MIB.";
+    reference
+      "RFC 3896 - Definitions of Managed Objects for the
+                  DS3/E3 Interface Type";
+  }
+  identity sip {
+    base iana-interface-type;
+    description
+      "SMDS, coffee.";
+    reference
+      "RFC 1694 - Definitions of Managed Objects for SMDS
+                  Interfaces using SMIv2";
+  }
+  identity frameRelay {
+    base iana-interface-type;
+    description
+      "DTE only.";
+    reference
+      "RFC 2115 - Management Information Base for Frame Relay
+                  DTEs Using SMIv2";
+  }
+  identity rs232 {
+    base iana-interface-type;
+    reference
+      "RFC 1659 - Definitions of Managed Objects for RS-232-like
+                  Hardware Devices using SMIv2";
+  }
+  identity para {
+    base iana-interface-type;
+    description
+      "Parallel-port.";
+    reference
+      "RFC 1660 - Definitions of Managed Objects for
+                  Parallel-printer-like Hardware Devices using
+                  SMIv2";
+  }
+  identity arcnet {
+    base iana-interface-type;
+    description
+      "ARCnet.";
+  }
+  identity arcnetPlus {
+    base iana-interface-type;
+    description
+      "ARCnet Plus.";
+  }
+  identity atm {
+    base iana-interface-type;
+    description
+      "ATM cells.";
+  }
+  identity miox25 {
+    base iana-interface-type;
+    reference
+      "RFC 1461 - SNMP MIB extension for Multiprotocol
+                  Interconnect over X.25";
+  }
+  identity sonet {
+    base iana-interface-type;
+    description
+      "SONET or SDH.";
+  }
+  identity x25ple {
+    base iana-interface-type;
+    reference
+      "RFC 2127 - ISDN Management Information Base using SMIv2";
+  }
+  identity iso88022llc {
+    base iana-interface-type;
+  }
+  identity localTalk {
+    base iana-interface-type;
+  }
+  identity smdsDxi {
+    base iana-interface-type;
+  }
+  identity frameRelayService {
+    base iana-interface-type;
+    description
+      "FRNETSERV-MIB.";
+    reference
+      "RFC 2954 - Definitions of Managed Objects for Frame
+                  Relay Service";
+  }
+  identity v35 {
+    base iana-interface-type;
+  }
+  identity hssi {
+    base iana-interface-type;
+  }
+  identity hippi {
+    base iana-interface-type;
+  }
+  identity modem {
+    base iana-interface-type;
+    description
+      "Generic modem.";
+  }
+  identity aal5 {
+    base iana-interface-type;
+    description
+      "AAL5 over ATM.";
+  }
+  identity sonetPath {
+    base iana-interface-type;
+  }
+  identity sonetVT {
+    base iana-interface-type;
+  }
+  identity smdsIcip {
+    base iana-interface-type;
+    description
+      "SMDS InterCarrier Interface.";
+  }
+  identity propVirtual {
+    base iana-interface-type;
+    description
+      "Proprietary virtual/internal.";
+    reference
+      "RFC 2863 - The Interfaces Group MIB";
+  }
+  identity propMultiplexor {
+    base iana-interface-type;
+    description
+      "Proprietary multiplexing.";
+    reference
+      "RFC 2863 - The Interfaces Group MIB";
+  }
+  identity ieee80212 {
+    base iana-interface-type;
+    description
+      "100BaseVG.";
+  }
+  identity fibreChannel {
+    base iana-interface-type;
+    description
+      "Fibre Channel.";
+  }
+  identity hippiInterface {
+    base iana-interface-type;
+    description
+      "HIPPI interfaces.";
+  }
+  identity frameRelayInterconnect {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; use either
+       frameRelay(32) or frameRelayService(44).";
+  }
+  identity aflane8023 {
+    base iana-interface-type;
+    description
+      "ATM Emulated LAN for 802.3.";
+  }
+  identity aflane8025 {
+    base iana-interface-type;
+    description
+      "ATM Emulated LAN for 802.5.";
+  }
+  identity cctEmul {
+    base iana-interface-type;
+    description
+      "ATM Emulated circuit.";
+  }
+  identity fastEther {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity isdn {
+    base iana-interface-type;
+    description
+      "ISDN and X.25.";
+    reference
+      "RFC 1356 - Multiprotocol Interconnect on X.25 and ISDN
+                  in the Packet Mode";
+  }
+  identity v11 {
+    base iana-interface-type;
+    description
+      "CCITT V.11/X.21.";
+  }
+  identity v36 {
+    base iana-interface-type;
+    description
+      "CCITT V.36.";
+  }
+  identity g703at64k {
+    base iana-interface-type;
+    description
+      "CCITT G703 at 64Kbps.";
+  }
+  identity g703at2mb {
+    base iana-interface-type;
+    status obsolete;
+    description
+      "Obsolete; see DS1-MIB.";
+  }
+  identity qllc {
+    base iana-interface-type;
+    description
+      "SNA QLLC.";
+  }
+  identity fastEtherFX {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity channel {
+    base iana-interface-type;
+    description
+      "Channel.";
+  }
+  identity ieee80211 {
+    base iana-interface-type;
+    description
+      "Radio spread spectrum.";
+  }
+  identity ibm370parChan {
+    base iana-interface-type;
+    description
+      "IBM System 360/370 OEMI Channel.";
+  }
+  identity escon {
+    base iana-interface-type;
+    description
+      "IBM Enterprise Systems Connection.";
+  }
+  identity dlsw {
+    base iana-interface-type;
+    description
+      "Data Link Switching.";
+  }
+  identity isdns {
+    base iana-interface-type;
+    description
+      "ISDN S/T interface.";
+  }
+  identity isdnu {
+    base iana-interface-type;
+    description
+      "ISDN U interface.";
+  }
+  identity lapd {
+    base iana-interface-type;
+    description
+      "Link Access Protocol D.";
+  }
+  identity ipSwitch {
+    base iana-interface-type;
+    description
+      "IP Switching Objects.";
+  }
+  identity rsrb {
+    base iana-interface-type;
+    description
+      "Remote Source Route Bridging.";
+  }
+  identity atmLogical {
+    base iana-interface-type;
+    description
+      "ATM Logical Port.";
+    reference
+      "RFC 3606 - Definitions of Supplemental Managed Objects
+                  for ATM Interface";
+  }
+  identity ds0 {
+    base iana-interface-type;
+    description
+      "Digital Signal Level 0.";
+    reference
+      "RFC 2494 - Definitions of Managed Objects for the DS0
+                  and DS0 Bundle Interface Type";
+  }
+  identity ds0Bundle {
+    base iana-interface-type;
+    description
+      "Group of ds0s on the same ds1.";
+    reference
+      "RFC 2494 - Definitions of Managed Objects for the DS0
+                  and DS0 Bundle Interface Type";
+  }
+  identity bsc {
+    base iana-interface-type;
+    description
+      "Bisynchronous Protocol.";
+  }
+  identity async {
+    base iana-interface-type;
+    description
+      "Asynchronous Protocol.";
+  }
+  identity cnr {
+    base iana-interface-type;
+    description
+      "Combat Net Radio.";
+  }
+  identity iso88025Dtr {
+    base iana-interface-type;
+    description
+      "ISO 802.5r DTR.";
+  }
+  identity eplrs {
+    base iana-interface-type;
+    description
+      "Ext Pos Loc Report Sys.";
+  }
+  identity arap {
+    base iana-interface-type;
+    description
+      "Appletalk Remote Access Protocol.";
+  }
+  identity propCnls {
+    base iana-interface-type;
+    description
+      "Proprietary Connectionless Protocol.";
+  }
+  identity hostPad {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X.29 PAD Protocol.";
+  }
+  identity termPad {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X.3 PAD Facility.";
+  }
+  identity frameRelayMPI {
+    base iana-interface-type;
+    description
+      "Multiproto Interconnect over FR.";
+  }
+  identity x213 {
+    base iana-interface-type;
+    description
+      "CCITT-ITU X213.";
+  }
+  identity adsl {
+    base iana-interface-type;
+    description
+      "Asymmetric Digital Subscriber Loop.";
+  }
+  identity radsl {
+    base iana-interface-type;
+    description
+      "Rate-Adapt. Digital Subscriber Loop.";
+  }
+  identity sdsl {
+    base iana-interface-type;
+    description
+      "Symmetric Digital Subscriber Loop.";
+  }
+  identity vdsl {
+    base iana-interface-type;
+    description
+      "Very H-Speed Digital Subscrib. Loop.";
+  }
+  identity iso88025CRFPInt {
+    base iana-interface-type;
+    description
+      "ISO 802.5 CRFP.";
+  }
+  identity myrinet {
+    base iana-interface-type;
+    description
+      "Myricom Myrinet.";
+  }
+  identity voiceEM {
+    base iana-interface-type;
+    description
+      "Voice recEive and transMit.";
+  }
+  identity voiceFXO {
+    base iana-interface-type;
+    description
+      "Voice Foreign Exchange Office.";
+  }
+  identity voiceFXS {
+    base iana-interface-type;
+    description
+      "Voice Foreign Exchange Station.";
+  }
+  identity voiceEncap {
+    base iana-interface-type;
+    description
+      "Voice encapsulation.";
+  }
+  identity voiceOverIp {
+    base iana-interface-type;
+    description
+      "Voice over IP encapsulation.";
+  }
+  identity atmDxi {
+    base iana-interface-type;
+    description
+      "ATM DXI.";
+  }
+  identity atmFuni {
+    base iana-interface-type;
+    description
+      "ATM FUNI.";
+  }
+  identity atmIma {
+    base iana-interface-type;
+    description
+      "ATM IMA.";
+  }
+  identity pppMultilinkBundle {
+    base iana-interface-type;
+    description
+      "PPP Multilink Bundle.";
+  }
+  identity ipOverCdlc {
+    base iana-interface-type;
+    description
+      "IBM ipOverCdlc.";
+  }
+  identity ipOverClaw {
+    base iana-interface-type;
+    description
+      "IBM Common Link Access to Workstn.";
+  }
+  identity stackToStack {
+    base iana-interface-type;
+    description
+      "IBM stackToStack.";
+  }
+  identity virtualIpAddress {
+    base iana-interface-type;
+    description
+      "IBM VIPA.";
+  }
+  identity mpc {
+    base iana-interface-type;
+    description
+      "IBM multi-protocol channel support.";
+  }
+  identity ipOverAtm {
+    base iana-interface-type;
+    description
+      "IBM ipOverAtm.";
+    reference
+      "RFC 2320 - Definitions of Managed Objects for Classical IP
+                  and ARP Over ATM Using SMIv2 (IPOA-MIB)";
+  }
+  identity iso88025Fiber {
+    base iana-interface-type;
+    description
+      "ISO 802.5j Fiber Token Ring.";
+  }
+  identity tdlc {
+    base iana-interface-type;
+    description
+      "IBM twinaxial data link control.";
+  }
+  identity gigabitEthernet {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Obsoleted via RFC 3635.
+       ethernetCsmacd(6) should be used instead.";
+    reference
+      "RFC 3635 - Definitions of Managed Objects for the
+                  Ethernet-like Interface Types";
+  }
+  identity hdlc {
+    base iana-interface-type;
+    description
+      "HDLC.";
+  }
+  identity lapf {
+    base iana-interface-type;
+    description
+      "LAP F.";
+  }
+  identity v37 {
+    base iana-interface-type;
+    description
+      "V.37.";
+  }
+  identity x25mlp {
+    base iana-interface-type;
+    description
+      "Multi-Link Protocol.";
+  }
+  identity x25huntGroup {
+    base iana-interface-type;
+    description
+      "X25 Hunt Group.";
+  }
+  identity transpHdlc {
+    base iana-interface-type;
+    description
+      "Transp HDLC.";
+  }
+  identity interleave {
+    base iana-interface-type;
+    description
+      "Interleave channel.";
+  }
+  identity fast {
+    base iana-interface-type;
+    description
+      "Fast channel.";
+  }
+  identity ip {
+    base iana-interface-type;
+    description
+      "IP (for APPN HPR in IP networks).";
+  }
+  identity docsCableMaclayer {
+    base iana-interface-type;
+    description
+      "CATV Mac Layer.";
+  }
+  identity docsCableDownstream {
+    base iana-interface-type;
+    description
+      "CATV Downstream interface.";
+  }
+  identity docsCableUpstream {
+    base iana-interface-type;
+    description
+      "CATV Upstream interface.";
+  }
+  identity a12MppSwitch {
+    base iana-interface-type;
+    description
+      "Avalon Parallel Processor.";
+  }
+  identity tunnel {
+    base iana-interface-type;
+    description
+      "Encapsulation interface.";
+  }
+  identity coffee {
+    base iana-interface-type;
+    description
+      "Coffee pot.";
+    reference
+      "RFC 2325 - Coffee MIB";
+  }
+  identity ces {
+    base iana-interface-type;
+    description
+      "Circuit Emulation Service.";
+  }
+  identity atmSubInterface {
+    base iana-interface-type;
+    description
+      "ATM Sub Interface.";
+  }
+  identity l2vlan {
+    base iana-interface-type;
+    description
+      "Layer 2 Virtual LAN using 802.1Q.";
+  }
+  identity l3ipvlan {
+    base iana-interface-type;
+    description
+      "Layer 3 Virtual LAN using IP.";
+  }
+  identity l3ipxvlan {
+    base iana-interface-type;
+    description
+      "Layer 3 Virtual LAN using IPX.";
+  }
+  identity digitalPowerline {
+    base iana-interface-type;
+    description
+      "IP over Power Lines.";
+  }
+  identity mediaMailOverIp {
+    base iana-interface-type;
+    description
+      "Multimedia Mail over IP.";
+  }
+  identity dtm {
+    base iana-interface-type;
+    description
+      "Dynamic synchronous Transfer Mode.";
+  }
+  identity dcn {
+    base iana-interface-type;
+    description
+      "Data Communications Network.";
+  }
+  identity ipForward {
+    base iana-interface-type;
+    description
+      "IP Forwarding Interface.";
+  }
+  identity msdsl {
+    base iana-interface-type;
+    description
+      "Multi-rate Symmetric DSL.";
+  }
+  identity ieee1394 {
+    base iana-interface-type;
+
+    description
+      "IEEE1394 High Performance Serial Bus.";
+  }
+  identity if-gsn {
+    base iana-interface-type;
+    description
+      "HIPPI-6400.";
+  }
+  identity dvbRccMacLayer {
+    base iana-interface-type;
+    description
+      "DVB-RCC MAC Layer.";
+  }
+  identity dvbRccDownstream {
+    base iana-interface-type;
+    description
+      "DVB-RCC Downstream Channel.";
+  }
+  identity dvbRccUpstream {
+    base iana-interface-type;
+    description
+      "DVB-RCC Upstream Channel.";
+  }
+  identity atmVirtual {
+    base iana-interface-type;
+    description
+      "ATM Virtual Interface.";
+  }
+  identity mplsTunnel {
+    base iana-interface-type;
+    description
+      "MPLS Tunnel Virtual Interface.";
+  }
+  identity srp {
+    base iana-interface-type;
+    description
+      "Spatial Reuse Protocol.";
+  }
+  identity voiceOverAtm {
+    base iana-interface-type;
+    description
+      "Voice over ATM.";
+  }
+  identity voiceOverFrameRelay {
+    base iana-interface-type;
+    description
+      "Voice Over Frame Relay.";
+  }
+  identity idsl {
+    base iana-interface-type;
+    description
+      "Digital Subscriber Loop over ISDN.";
+  }
+  identity compositeLink {
+    base iana-interface-type;
+    description
+      "Avici Composite Link Interface.";
+  }
+  identity ss7SigLink {
+    base iana-interface-type;
+    description
+      "SS7 Signaling Link.";
+  }
+  identity propWirelessP2P {
+    base iana-interface-type;
+    description
+      "Prop. P2P wireless interface.";
+  }
+  identity frForward {
+    base iana-interface-type;
+    description
+      "Frame Forward Interface.";
+  }
+  identity rfc1483 {
+    base iana-interface-type;
+    description
+      "Multiprotocol over ATM AAL5.";
+    reference
+      "RFC 1483 - Multiprotocol Encapsulation over ATM
+                  Adaptation Layer 5";
+  }
+  identity usb {
+    base iana-interface-type;
+    description
+      "USB Interface.";
+  }
+  identity ieee8023adLag {
+    base iana-interface-type;
+    description
+      "IEEE 802.3ad Link Aggregate.";
+  }
+  identity bgppolicyaccounting {
+    base iana-interface-type;
+    description
+      "BGP Policy Accounting.";
+  }
+  identity frf16MfrBundle {
+    base iana-interface-type;
+    description
+      "FRF.16 Multilink Frame Relay.";
+  }
+  identity h323Gatekeeper {
+    base iana-interface-type;
+    description
+      "H323 Gatekeeper.";
+  }
+  identity h323Proxy {
+    base iana-interface-type;
+    description
+      "H323 Voice and Video Proxy.";
+  }
+  identity mpls {
+    base iana-interface-type;
+    description
+      "MPLS.";
+  }
+  identity mfSigLink {
+    base iana-interface-type;
+    description
+      "Multi-frequency signaling link.";
+  }
+  identity hdsl2 {
+    base iana-interface-type;
+    description
+      "High Bit-Rate DSL - 2nd generation.";
+  }
+  identity shdsl {
+    base iana-interface-type;
+    description
+      "Multirate HDSL2.";
+  }
+  identity ds1FDL {
+    base iana-interface-type;
+    description
+      "Facility Data Link (4Kbps) on a DS1.";
+  }
+  identity pos {
+    base iana-interface-type;
+    description
+      "Packet over SONET/SDH Interface.";
+  }
+  identity dvbAsiIn {
+    base iana-interface-type;
+    description
+      "DVB-ASI Input.";
+  }
+  identity dvbAsiOut {
+    base iana-interface-type;
+    description
+      "DVB-ASI Output.";
+  }
+  identity plc {
+    base iana-interface-type;
+    description
+      "Power Line Communications.";
+  }
+  identity nfas {
+    base iana-interface-type;
+    description
+      "Non-Facility Associated Signaling.";
+  }
+  identity tr008 {
+    base iana-interface-type;
+    description
+      "TR008.";
+  }
+  identity gr303RDT {
+    base iana-interface-type;
+    description
+      "Remote Digital Terminal.";
+  }
+  identity gr303IDT {
+    base iana-interface-type;
+    description
+      "Integrated Digital Terminal.";
+  }
+  identity isup {
+    base iana-interface-type;
+    description
+      "ISUP.";
+  }
+  identity propDocsWirelessMaclayer {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Maclayer.";
+  }
+  identity propDocsWirelessDownstream {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Downstream.";
+  }
+  identity propDocsWirelessUpstream {
+    base iana-interface-type;
+    description
+      "Cisco proprietary Upstream.";
+  }
+  identity hiperlan2 {
+    base iana-interface-type;
+    description
+      "HIPERLAN Type 2 Radio Interface.";
+  }
+  identity propBWAp2Mp {
+    base iana-interface-type;
+    description
+      "PropBroadbandWirelessAccesspt2Multipt (use of this value
+       for IEEE 802.16 WMAN interfaces as per IEEE Std 802.16f
+       is deprecated, and ieee80216WMAN(237) should be used
+       instead).";
+  }
+  identity sonetOverheadChannel {
+    base iana-interface-type;
+    description
+      "SONET Overhead Channel.";
+  }
+  identity digitalWrapperOverheadChannel {
+    base iana-interface-type;
+    description
+      "Digital Wrapper.";
+  }
+  identity aal2 {
+    base iana-interface-type;
+    description
+      "ATM adaptation layer 2.";
+  }
+  identity radioMAC {
+    base iana-interface-type;
+    description
+      "MAC layer over radio links.";
+  }
+  identity atmRadio {
+    base iana-interface-type;
+    description
+      "ATM over radio links.";
+  }
+  identity imt {
+    base iana-interface-type;
+    description
+      "Inter-Machine Trunks.";
+  }
+  identity mvl {
+    base iana-interface-type;
+    description
+      "Multiple Virtual Lines DSL.";
+  }
+  identity reachDSL {
+    base iana-interface-type;
+    description
+      "Long Reach DSL.";
+  }
+  identity frDlciEndPt {
+    base iana-interface-type;
+    description
+      "Frame Relay DLCI End Point.";
+  }
+  identity atmVciEndPt {
+    base iana-interface-type;
+    description
+      "ATM VCI End Point.";
+  }
+  identity opticalChannel {
+    base iana-interface-type;
+    description
+      "Optical Channel.";
+  }
+  identity opticalTransport {
+    base iana-interface-type;
+    description
+      "Optical Transport.";
+  }
+  identity propAtm {
+    base iana-interface-type;
+    description
+      "Proprietary ATM.";
+  }
+  identity voiceOverCable {
+    base iana-interface-type;
+    description
+      "Voice Over Cable Interface.";
+  }
+  identity infiniband {
+    base iana-interface-type;
+    description
+      "Infiniband.";
+  }
+  identity teLink {
+    base iana-interface-type;
+    description
+      "TE Link.";
+  }
+  identity q2931 {
+    base iana-interface-type;
+    description
+      "Q.2931.";
+  }
+  identity virtualTg {
+    base iana-interface-type;
+    description
+      "Virtual Trunk Group.";
+  }
+  identity sipTg {
+    base iana-interface-type;
+    description
+      "SIP Trunk Group.";
+  }
+  identity sipSig {
+    base iana-interface-type;
+    description
+      "SIP Signaling.";
+  }
+  identity docsCableUpstreamChannel {
+    base iana-interface-type;
+    description
+      "CATV Upstream Channel.";
+  }
+  identity econet {
+    base iana-interface-type;
+    description
+      "Acorn Econet.";
+  }
+  identity pon155 {
+    base iana-interface-type;
+    description
+      "FSAN 155Mb Symetrical PON interface.";
+  }
+  identity pon622 {
+    base iana-interface-type;
+    description
+      "FSAN 622Mb Symetrical PON interface.";
+  }
+  identity bridge {
+    base iana-interface-type;
+    description
+      "Transparent bridge interface.";
+  }
+  identity linegroup {
+    base iana-interface-type;
+    description
+      "Interface common to multiple lines.";
+  }
+  identity voiceEMFGD {
+    base iana-interface-type;
+    description
+      "Voice E&amp;M Feature Group D.";
+  }
+  identity voiceFGDEANA {
+    base iana-interface-type;
+    description
+      "Voice FGD Exchange Access North American.";
+  }
+  identity voiceDID {
+    base iana-interface-type;
+    description
+      "Voice Direct Inward Dialing.";
+  }
+  identity mpegTransport {
+    base iana-interface-type;
+    description
+      "MPEG transport interface.";
+  }
+  identity sixToFour {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "6to4 interface (DEPRECATED).";
+    reference
+      "RFC 4087 - IP Tunnel MIB";
+  }
+  identity gtp {
+    base iana-interface-type;
+    description
+      "GTP (GPRS Tunneling Protocol).";
+  }
+  identity pdnEtherLoop1 {
+    base iana-interface-type;
+    description
+      "Paradyne EtherLoop 1.";
+  }
+  identity pdnEtherLoop2 {
+    base iana-interface-type;
+    description
+      "Paradyne EtherLoop 2.";
+  }
+  identity opticalChannelGroup {
+    base iana-interface-type;
+    description
+      "Optical Channel Group.";
+  }
+  identity homepna {
+    base iana-interface-type;
+    description
+      "HomePNA ITU-T G.989.";
+  }
+  identity gfp {
+    base iana-interface-type;
+    description
+      "Generic Framing Procedure (GFP).";
+  }
+  identity ciscoISLvlan {
+    base iana-interface-type;
+    description
+      "Layer 2 Virtual LAN using Cisco ISL.";
+  }
+  identity actelisMetaLOOP {
+    base iana-interface-type;
+    description
+      "Acteleis proprietary MetaLOOP High Speed Link.";
+  }
+  identity fcipLink {
+    base iana-interface-type;
+    description
+      "FCIP Link.";
+  }
+  identity rpr {
+    base iana-interface-type;
+    description
+      "Resilient Packet Ring Interface Type.";
+  }
+  identity qam {
+    base iana-interface-type;
+    description
+      "RF Qam Interface.";
+  }
+  identity lmp {
+    base iana-interface-type;
+    description
+      "Link Management Protocol.";
+    reference
+      "RFC 4327 - Link Management Protocol (LMP) Management
+                  Information Base (MIB)";
+  }
+  identity cblVectaStar {
+    base iana-interface-type;
+    description
+      "Cambridge Broadband Networks Limited VectaStar.";
+  }
+  identity docsCableMCmtsDownstream {
+    base iana-interface-type;
+    description
+      "CATV Modular CMTS Downstream Interface.";
+  }
+  identity adsl2 {
+    base iana-interface-type;
+    status deprecated;
+    description
+      "Asymmetric Digital Subscriber Loop Version 2
+       (DEPRECATED/OBSOLETED - please use adsl2plus(238)
+       instead).";
+    reference
+      "RFC 4706 - Definitions of Managed Objects for Asymmetric
+                  Digital Subscriber Line 2 (ADSL2)";
+  }
+  identity macSecControlledIF {
+    base iana-interface-type;
+    description
+      "MACSecControlled.";
+  }
+  identity macSecUncontrolledIF {
+    base iana-interface-type;
+    description
+      "MACSecUncontrolled.";
+  }
+  identity aviciOpticalEther {
+    base iana-interface-type;
+    description
+      "Avici Optical Ethernet Aggregate.";
+  }
+  identity atmbond {
+    base iana-interface-type;
+    description
+      "atmbond.";
+  }
+  identity voiceFGDOS {
+    base iana-interface-type;
+    description
+      "Voice FGD Operator Services.";
+  }
+  identity mocaVersion1 {
+    base iana-interface-type;
+    description
+      "MultiMedia over Coax Alliance (MoCA) Interface
+       as documented in information provided privately to IANA.";
+  }
+  identity ieee80216WMAN {
+    base iana-interface-type;
+    description
+      "IEEE 802.16 WMAN interface.";
+  }
+  identity adsl2plus {
+    base iana-interface-type;
+    description
+      "Asymmetric Digital Subscriber Loop Version 2 -
+       Version 2 Plus and all variants.";
+  }
+  identity dvbRcsMacLayer {
+    base iana-interface-type;
+    description
+      "DVB-RCS MAC Layer.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+  identity dvbTdm {
+    base iana-interface-type;
+    description
+      "DVB Satellite TDM.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+  identity dvbRcsTdma {
+    base iana-interface-type;
+    description
+      "DVB-RCS TDMA.";
+    reference
+      "RFC 5728 - The SatLabs Group DVB-RCS MIB";
+  }
+  identity x86Laps {
+    base iana-interface-type;
+    description
+      "LAPS based on ITU-T X.86/Y.1323.";
+  }
+  identity wwanPP {
+    base iana-interface-type;
+    description
+      "3GPP WWAN.";
+  }
+  identity wwanPP2 {
+    base iana-interface-type;
+    description
+      "3GPP2 WWAN.";
+  }
+  identity voiceEBS {
+    base iana-interface-type;
+    description
+      "Voice P-phone EBS physical interface.";
+  }
+  identity ifPwType {
+    base iana-interface-type;
+    description
+      "Pseudowire interface type.";
+    reference
+      "RFC 5601 - Pseudowire (PW) Management Information Base (MIB)";
+  }
+  identity ilan {
+    base iana-interface-type;
+    description
+      "Internal LAN on a bridge per IEEE 802.1ap.";
+  }
+  identity pip {
+    base iana-interface-type;
+    description
+      "Provider Instance Port on a bridge per IEEE 802.1ah PBB.";
+  }
+  identity aluELP {
+    base iana-interface-type;
+    description
+      "Alcatel-Lucent Ethernet Link Protection.";
+  }
+  identity gpon {
+    base iana-interface-type;
+    description
+      "Gigabit-capable passive optical networks (G-PON) as per
+       ITU-T G.948.";
+  }
+  identity vdsl2 {
+    base iana-interface-type;
+    description
+      "Very high speed digital subscriber line Version 2
+       (as per ITU-T Recommendation G.993.2).";
+    reference
+      "RFC 5650 - Definitions of Managed Objects for Very High
+                  Speed Digital Subscriber Line 2 (VDSL2)";
+  }
+  identity capwapDot11Profile {
+    base iana-interface-type;
+    description
+      "WLAN Profile Interface.";
+    reference
+      "RFC 5834 - Control and Provisioning of Wireless Access
+                  Points (CAPWAP) Protocol Binding MIB for
+                  IEEE 802.11";
+  }
+  identity capwapDot11Bss {
+    base iana-interface-type;
+    description
+      "WLAN BSS Interface.";
+    reference
+      "RFC 5834 - Control and Provisioning of Wireless Access
+                  Points (CAPWAP) Protocol Binding MIB for
+                  IEEE 802.11";
+  }
+  identity capwapWtpVirtualRadio {
+    base iana-interface-type;
+    description
+      "WTP Virtual Radio Interface.";
+    reference
+      "RFC 5833 - Control and Provisioning of Wireless Access
+                  Points (CAPWAP) Protocol Base MIB";
+  }
+  identity bits {
+    base iana-interface-type;
+    description
+      "bitsport.";
+  }
+  identity docsCableUpstreamRfPort {
+    base iana-interface-type;
+    description
+      "DOCSIS CATV Upstream RF Port.";
+  }
+  identity cableDownstreamRfPort {
+    base iana-interface-type;
+    description
+      "CATV downstream RF Port.";
+  }
+  identity vmwareVirtualNic {
+    base iana-interface-type;
+    description
+      "VMware Virtual Network Interface.";
+  }
+  identity ieee802154 {
+    base iana-interface-type;
+    description
+      "IEEE 802.15.4 WPAN interface.";
+    reference
+      "IEEE 802.15.4-2006";
+  }
+  identity otnOdu {
+    base iana-interface-type;
+    description
+      "OTN Optical Data Unit.";
+  }
+  identity otnOtu {
+    base iana-interface-type;
+    description
+      "OTN Optical channel Transport Unit.";
+  }
+  identity ifVfiType {
+    base iana-interface-type;
+    description
+      "VPLS Forwarding Instance Interface Type.";
+  }
+  identity g9981 {
+    base iana-interface-type;
+    description
+      "G.998.1 bonded interface.";
+  }
+  identity g9982 {
+    base iana-interface-type;
+    description
+      "G.998.2 bonded interface.";
+  }
+  identity g9983 {
+    base iana-interface-type;
+    description
+      "G.998.3 bonded interface.";
+  }
+
+  identity aluEpon {
+    base iana-interface-type;
+    description
+      "Ethernet Passive Optical Networks (E-PON).";
+  }
+  identity aluEponOnu {
+    base iana-interface-type;
+    description
+      "EPON Optical Network Unit.";
+  }
+  identity aluEponPhysicalUni {
+    base iana-interface-type;
+    description
+      "EPON physical User to Network interface.";
+  }
+  identity aluEponLogicalLink {
+    base iana-interface-type;
+    description
+      "The emulation of a point-to-point link over the EPON
+       layer.";
+  }
+  identity aluGponOnu {
+    base iana-interface-type;
+    description
+      "GPON Optical Network Unit.";
+    reference
+      "ITU-T G.984.2";
+  }
+  identity aluGponPhysicalUni {
+    base iana-interface-type;
+    description
+      "GPON physical User to Network interface.";
+    reference
+      "ITU-T G.984.2";
+  }
+  identity vmwareNicTeam {
+    base iana-interface-type;
+    description
+      "VMware NIC Team.";
+  }
+  identity docsOfdmDownstream {
+    base iana-interface-type;
+    description
+      "CATV Downstream OFDM interface.";
+  }
+  identity docsOfdmaUpstream {
+    base iana-interface-type;
+    description
+      "CATV Upstream OFDMA interface.";
+  }
+  identity gfast {
+    base iana-interface-type;
+    description
+      "G.fast port.";
+    reference
+      "ITU-T G.9701";
+  }
+  identity sdci {
+    base iana-interface-type;
+    description
+      "SDCI (IO-Link).";
+    reference
+      "IEC 61131-9 Edition 1.0 2013-09";
+  }
+  identity xboxWireless {
+    base iana-interface-type;
+    description
+      "Xbox wireless.";
+  }
+  identity fastdsl {
+    base iana-interface-type;
+    description
+      "FastDSL.";
+    reference
+      "BBF TR-355";
+  }
+  identity docsCableScte55d1FwdOob {
+    base iana-interface-type;
+    description
+      "Cable SCTE 55-1 OOB Forward Channel.";
+  }
+  identity docsCableScte55d1RetOob {
+    base iana-interface-type;
+    description
+      "Cable SCTE 55-1 OOB Return Channel.";
+  }
+  identity docsCableScte55d2DsOob {
+    base iana-interface-type;
+    description
+      "Cable SCTE 55-2 OOB Downstream Channel.";
+  }
+  identity docsCableScte55d2UsOob {
+    base iana-interface-type;
+    description
+      "Cable SCTE 55-2 OOB Upstream Channel.";
+  }
+  identity docsCableNdf {
+    base iana-interface-type;
+    description
+      "Cable Narrowband Digital Forward.";
+  }
+  identity docsCableNdr {
+    base iana-interface-type;
+    description
+      "Cable Narrowband Digital Return.";
+  }
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-extensions@2015-10-09.yang b/models/openconfig-infinera/src/main/yang/openconfig-extensions@2015-10-09.yang
new file mode 100644
index 0000000..9cadce0
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-extensions@2015-10-09.yang
@@ -0,0 +1,64 @@
+module openconfig-extensions {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/openconfig-ext";
+
+  prefix "ocext";
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module provides extensions to the YANG language to allow
+    OpenConfig specific functionality and meta-data to be defined.";
+
+  revision "2015-10-09" {
+    description
+      "Initial OpenConfig public release";
+  }
+
+  revision "2015-10-05" {
+    description
+      "Initial revision";
+    reference "TBD";
+  }
+
+  // extension statements
+  extension openconfig-version {
+    argument "semver" {
+      yin-element false;
+    }
+    description
+      "The OpenConfig version number for the module. This is
+      expressed as a semantic version number of the form:
+        x.y.z
+      where:
+        * x corresponds to the major version,
+        * y corresponds to a minor version,
+        * z corresponds to a patch version.
+      This version corresponds to the model file within which it is
+      defined, and does not cover the whole set of OpenConfig models.
+      Where several modules are used to build up a single block of
+      functionality, the same module version is specified across each
+      file that makes up the module.
+      A major version number of 0 indicates that this model is still
+      in development (whether within OpenConfig or with industry
+      partners), and is potentially subject to change.
+      Following a release of major version 1, all modules will
+      increment major revision number where backwards incompatible
+      changes to the model are made.
+      The minor version is changed when features are added to the
+      model that do not impact current clients use of the model.
+      The patch-level version is incremented when non-feature changes
+      (such as bugfixes or clarifications to human-readable
+      descriptions that do not impact model functionality) are made
+      that maintain backwards compatibility.
+      The version number is stored in the module meta-data.";
+  }
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-if-ethernet@2016-12-22.yang b/models/openconfig-infinera/src/main/yang/openconfig-if-ethernet@2016-12-22.yang
new file mode 100644
index 0000000..f02f581
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-if-ethernet@2016-12-22.yang
@@ -0,0 +1,355 @@
+module openconfig-if-ethernet {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/interfaces/ethernet";
+
+  prefix "oc-eth";
+
+  // import some basic types
+  import openconfig-interfaces {
+    prefix oc-if;
+    revision-date "2016-05-26";
+  }
+  import iana-if-type {
+    prefix ift;
+    revision-date "2016-11-23";
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "Model for managing Ethernet interfaces -- augments the IETF YANG
+    model for interfaces described by RFC 7223";
+
+  oc-ext:openconfig-version "1.1.0";
+
+  revision "2016-12-22" {
+    description
+      "Fixes to Ethernet interfaces model";
+    reference "1.1.0";
+  }
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  identity ETHERNET_SPEED {
+    description "base type to specify available Ethernet link
+    speeds";
+  }
+
+  identity SPEED_10MB {
+    base ETHERNET_SPEED;
+    description "10 Mbps Ethernet";
+  }
+
+  identity SPEED_100MB {
+    base ETHERNET_SPEED;
+    description "100 Mbps Ethernet";
+  }
+
+  identity SPEED_1GB {
+    base ETHERNET_SPEED;
+    description "1 GBps Ethernet";
+  }
+
+  identity SPEED_10GB {
+    base ETHERNET_SPEED;
+    description "10 GBps Ethernet";
+  }
+
+  identity SPEED_25GB {
+    base ETHERNET_SPEED;
+    description "25 GBps Ethernet";
+  }
+
+  identity SPEED_40GB {
+    base ETHERNET_SPEED;
+    description "40 GBps Ethernet";
+  }
+
+  identity SPEED_50GB {
+    base ETHERNET_SPEED;
+    description "50 GBps Ethernet";
+  }
+
+  identity SPEED_100GB {
+    base ETHERNET_SPEED;
+    description "100 GBps Ethernet";
+  }
+
+  identity SPEED_UNKNOWN {
+    base ETHERNET_SPEED;
+    description
+      "Interface speed is unknown.  Systems may report
+      speed UNKNOWN when an interface is down or unpopuplated (e.g.,
+      pluggable not present).";
+  }
+
+  // typedef statements
+
+
+  // grouping statements
+
+  grouping ethernet-interface-config {
+    description "Configuration items for Ethernet interfaces";
+
+    leaf mac-address {
+      type yang:mac-address;
+      description
+        "Assigns a MAC address to the Ethernet interface.  If not
+        specified, the corresponding operational state leaf is
+        expected to show the system-assigned MAC address.";
+    }
+
+    leaf auto-negotiate {
+      type boolean;
+      default true;
+      description
+        "Set to TRUE to request the interface to auto-negotiate
+        transmission parameters with its peer interface.  When
+        set to FALSE, the transmission parameters are specified
+        manually.";
+      reference
+        "IEEE 802.3-2012 auto-negotiation transmission parameters";
+    }
+
+    leaf duplex-mode {
+      type enumeration {
+        enum FULL {
+          description "Full duplex mode";
+        }
+        enum HALF {
+          description "Half duplex mode";
+        }
+      }
+      description
+        "When auto-negotiate is TRUE, this optionally sets the
+        duplex mode that will be advertised to the peer.  If
+        unspecified, the interface should negotiate the duplex mode
+        directly (typically full-duplex).  When auto-negotiate is
+        FALSE, this sets the duplex mode on the interface directly.";
+    }
+
+    leaf port-speed {
+      type identityref {
+        base ETHERNET_SPEED;
+      }
+      description
+        "When auto-negotiate is TRUE, this optionally sets the
+        port-speed mode that will be advertised to the peer for
+        negotiation.  If unspecified, it is expected that the
+        interface will select the highest speed available based on
+        negotiation.  When auto-negotiate is set to FALSE, sets the
+        link speed to a fixed value -- supported values are defined
+        by ETHERNET_SPEED identities";
+    }
+
+    leaf enable-flow-control {
+      type boolean;
+      default false;
+      description
+        "Enable or disable flow control for this interface.
+        Ethernet flow control is a mechanism by which a receiver
+        may send PAUSE frames to a sender to stop transmission for
+        a specified time.
+        This setting should override auto-negotiated flow control
+        settings.  If left unspecified, and auto-negotiate is TRUE,
+        flow control mode is negotiated with the peer interface.";
+      reference
+        "IEEE 802.3x";
+    }
+  }
+
+  grouping ethernet-interface-state-counters {
+    description
+      "Ethernet-specific counters and statistics";
+
+    // ingress counters
+
+    leaf in-mac-control-frames {
+      type yang:counter64;
+      description
+        "MAC layer control frames received on the interface";
+    }
+
+    leaf in-mac-pause-frames {
+      type yang:counter64;
+      description
+        "MAC layer PAUSE frames received on the interface";
+    }
+
+    leaf in-oversize-frames {
+      type yang:counter64;
+      description
+        "Number of oversize frames received on the interface";
+    }
+
+    leaf in-jabber-frames {
+      type yang:counter64;
+      description
+        "Number of jabber frames received on the
+        interface.  Jabber frames are typically defined as oversize
+        frames which also have a bad CRC.  Implementations may use
+        slightly different definitions of what constitutes a jabber
+        frame.  Often indicative of a NIC hardware problem.";
+    }
+
+    leaf in-fragment-frames {
+      type yang:counter64;
+      description
+        "Number of fragment frames received on the interface.";
+    }
+
+    leaf in-8021q-frames {
+      type yang:counter64;
+      description
+        "Number of 802.1q tagged frames received on the interface";
+    }
+
+    leaf in-crc-errors {
+      type yang:counter64;
+      description
+        "Number of receive error events due to FCS/CRC check
+        failure";
+    }
+
+    // egress counters
+
+    leaf out-mac-control-frames {
+      type yang:counter64;
+      description
+        "MAC layer control frames sent on the interface";
+    }
+
+    leaf out-mac-pause-frames {
+      type yang:counter64;
+      description
+        "MAC layer PAUSE frames sent on the interface";
+    }
+
+    leaf out-8021q-frames {
+      type yang:counter64;
+      description
+        "Number of 802.1q tagged frames sent on the interface";
+    }
+  }
+
+  grouping ethernet-interface-state {
+    description
+      "Grouping for defining Ethernet-specific operational state";
+
+    leaf hw-mac-address {
+      type yang:mac-address;
+      description
+        "Represenets the 'burned-in',  or system-assigned, MAC
+        address for the Ethernet interface.";
+    }
+
+    leaf effective-speed {
+      type uint32;
+      units Mbps;
+      description
+        "Reports the effective speed of the interface, e.g., the
+        negotiated speed if auto-negotiate is enabled";
+    }
+
+    leaf negotiated-duplex-mode {
+      type enumeration {
+        enum FULL {
+          description "Full duplex mode";
+        }
+        enum HALF {
+          description "Half duplex mode";
+        }
+      }
+      description
+        "When auto-negotiate is set to TRUE, and the interface has
+        completed auto-negotiation with the remote peer, this value
+        shows the duplex mode that has been negotiated.";
+    }
+
+    leaf negotiated-port-speed {
+      type identityref {
+        base ETHERNET_SPEED;
+      }
+      description
+        "When auto-negotiate is set to TRUE, and the interface has
+        completed auto-negotiation with the remote peer, this value
+        shows the interface speed that has been negotiated.";
+    }
+
+    container counters {
+      description "Ethernet interface counters";
+
+      uses ethernet-interface-state-counters;
+
+    }
+
+  }
+
+  // data definition statements
+
+  grouping ethernet-top {
+    description "top-level Ethernet config and state containers";
+
+    container ethernet {
+      description
+        "Top-level container for ethernet configuration
+        and state";
+
+      container config {
+        description "Configuration data for ethernet interfaces";
+
+        uses ethernet-interface-config;
+
+      }
+
+      container state {
+
+        config false;
+        description "State variables for Ethernet interfaces";
+
+        uses ethernet-interface-config;
+        uses ethernet-interface-state;
+
+      }
+
+    }
+  }
+
+  // augment statements
+
+  augment "/oc-if:interfaces/oc-if:interface" {
+    description "Adds addtional Ethernet-specific configuration to
+    interfaces model";
+
+    uses ethernet-top {
+      when "oc-if:state/oc-if:type = 'ift:ethernetCsmacd'" {
+      description "Additional interface configuration parameters when
+      the interface type is Ethernet";
+      }
+    }
+  }
+
+  // rpc statements
+
+  // notification statements
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-interfaces@2016-05-26.yang b/models/openconfig-infinera/src/main/yang/openconfig-interfaces@2016-05-26.yang
new file mode 100644
index 0000000..4abde5d
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-interfaces@2016-05-26.yang
@@ -0,0 +1,891 @@
+module openconfig-interfaces {
+
+  // namespace
+  namespace "http://openconfig.net/yang/interfaces";
+
+  prefix "oc-if";
+
+  // import some basic types
+  import ietf-interfaces {
+    prefix ietf-if;
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+
+    // import tailf-common {prefix "tailf";}
+    // tailf:export netconf;
+    // tailf:export rest;
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "Model for managing network interfaces and subinterfaces.  This
+    module also defines convenience types / groupings for other
+    models to create references to interfaces:
+      base-interface-ref (type) -  reference to a base interface
+      interface-ref (grouping) -  container for reference to a
+        interface + subinterface
+      interface-ref-state (grouping) - container for read-only
+        (opstate) reference to interface + subinterface
+    This model reuses data items defined in the IETF YANG model for
+    interfaces described by RFC 7223 with an alternate structure
+    (particularly for operational state data) and and with
+    additional configuration items.";
+
+  oc-ext:openconfig-version "1.0.2";
+
+  revision "2016-05-26" {
+    description
+      "OpenConfig public release";
+    reference "1.0.2";
+  }
+
+
+  // typedef statements
+
+  typedef base-interface-ref {
+    type leafref {
+      path "/oc-if:interfaces/oc-if:interface/oc-if:name";
+    }
+    description
+      "Reusable type for by-name reference to a base interface.
+      This type may be used in cases where ability to reference
+      a subinterface is not required.";
+  }
+
+  typedef interface-id {
+    type string;
+    description
+      "User-defined identifier for an interface, generally used to
+      name a interface reference.  The id can be arbitrary but a
+      useful convention is to use a combination of base interface
+      name and subinterface index.";
+  }
+
+  // grouping statements
+
+  grouping interface-ref-common {
+    description
+      "Reference leafrefs to interface / subinterface";
+
+    leaf interface {
+      type leafref {
+        path "/oc-if:interfaces/oc-if:interface/oc-if:name";
+      }
+      description
+        "Reference to a base interface.  If a reference to a
+        subinterface is required, this leaf must be specified
+        to indicate the base interface.";
+    }
+
+    leaf subinterface {
+      type leafref {
+        path "/oc-if:interfaces/" +
+          "oc-if:interface[oc-if:name=current()/../interface]/" +
+          "oc-if:subinterfaces/oc-if:subinterface/oc-if:index";
+      }
+      description
+        "Reference to a subinterface -- this requires the base
+        interface to be specified using the interface leaf in
+        this container.  If only a reference to a base interface
+        is requuired, this leaf should not be set.";
+    }
+  }
+
+  grouping interface-ref-state-container {
+    description
+      "Reusable opstate w/container for a reference to an
+      interface or subinterface";
+
+    container state {
+      config false;
+      description
+        "Operational state for interface-ref";
+
+      uses interface-ref-common;
+    }
+  }
+
+  grouping interface-ref {
+    description
+      "Reusable definition for a reference to an interface or
+      subinterface";
+
+    container interface-ref {
+      description
+        "Reference to an interface or subinterface";
+
+      container config {
+        description
+          "Configured reference to interface / subinterface";
+
+        uses interface-ref-common;
+      }
+
+      uses interface-ref-state-container;
+    }
+  }
+
+  grouping interface-ref-state {
+    description
+      "Reusable opstate w/container for a reference to an
+      interface or subinterface";
+
+    container interface-ref {
+      description
+        "Reference to an interface or subinterface";
+
+      uses interface-ref-state-container;
+    }
+  }
+
+
+  grouping interface-common-config {
+    description
+      "Configuration data data nodes common to physical interfaces
+      and subinterfaces";
+
+    leaf name {
+      type string;
+      description
+        "[adapted from IETF interfaces model (RFC 7223)]
+        The name of the interface.
+        A device MAY restrict the allowed values for this leaf,
+        possibly depending on the type of the interface.
+        For system-controlled interfaces, this leaf is the
+        device-specific name of the interface.  The 'config false'
+        list interfaces/interface[name]/state contains the currently
+        existing interfaces on the device.
+        If a client tries to create configuration for a
+        system-controlled interface that is not present in the
+        corresponding state list, the server MAY reject
+        the request if the implementation does not support
+        pre-provisioning of interfaces or if the name refers to
+        an interface that can never exist in the system.  A
+        NETCONF server MUST reply with an rpc-error with the
+        error-tag 'invalid-value' in this case.
+        The IETF model in RFC 7223 provides YANG features for the
+        following (i.e., pre-provisioning and arbitrary-names),
+        however they are omitted here:
+          If the device supports pre-provisioning of interface
+          configuration, the 'pre-provisioning' feature is
+          advertised.
+          If the device allows arbitrarily named user-controlled
+          interfaces, the 'arbitrary-names' feature is advertised.
+        When a configured user-controlled interface is created by
+        the system, it is instantiated with the same name in the
+        /interfaces/interface[name]/state list.";
+      reference
+        "RFC 7223: A YANG Data Model for Interface Management";
+    }
+
+    leaf description {
+      type string;
+      description
+        "[adapted from IETF interfaces model (RFC 7223)]
+        A textual description of the interface.
+        A server implementation MAY map this leaf to the ifAlias
+        MIB object.  Such an implementation needs to use some
+        mechanism to handle the differences in size and characters
+        allowed between this leaf and ifAlias.  The definition of
+        such a mechanism is outside the scope of this document.
+        Since ifAlias is defined to be stored in non-volatile
+        storage, the MIB implementation MUST map ifAlias to the
+        value of 'description' in the persistently stored
+        datastore.
+        Specifically, if the device supports ':startup', when
+        ifAlias is read the device MUST return the value of
+        'description' in the 'startup' datastore, and when it is
+        written, it MUST be written to the 'running' and 'startup'
+        datastores.  Note that it is up to the implementation to
+        decide whether to modify this single leaf in 'startup' or
+        perform an implicit copy-config from 'running' to
+        'startup'.
+        If the device does not support ':startup', ifAlias MUST
+        be mapped to the 'description' leaf in the 'running'
+        datastore.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifAlias";
+    }
+
+    leaf enabled {
+      type boolean;
+      default "true";
+      description
+        "[adapted from IETF interfaces model (RFC 7223)]
+        This leaf contains the configured, desired state of the
+        interface.
+        Systems that implement the IF-MIB use the value of this
+        leaf in the 'running' datastore to set
+        IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry
+        has been initialized, as described in RFC 2863.
+        Changes in this leaf in the 'running' datastore are
+        reflected in ifAdminStatus, but if ifAdminStatus is
+        changed over SNMP, this leaf is not affected.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+    }
+
+  }
+
+  grouping interface-phys-config {
+    description
+      "Configuration data for physical interfaces";
+
+    leaf type {
+      type identityref {
+        base ietf-if:interface-type;
+      }
+      mandatory true;
+      description
+        "[adapted from IETF interfaces model (RFC 7223)]
+        The type of the interface.
+        When an interface entry is created, a server MAY
+        initialize the type leaf with a valid value, e.g., if it
+        is possible to derive the type from the name of the
+        interface.
+        If a client tries to set the type of an interface to a
+        value that can never be used by the system, e.g., if the
+        type is not supported or if the type does not match the
+        name of the interface, the server MUST reject the request.
+        A NETCONF server MUST reply with an rpc-error with the
+        error-tag 'invalid-value' in this case.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifType";
+    }
+
+    leaf mtu {
+      type uint16;
+      description
+        "Set the max transmission unit size in octets
+        for the physical interface.  If this is not set, the mtu is
+        set to the operational default -- e.g., 1514 bytes on an
+        Ethernet interface.";
+    }
+
+    uses interface-common-config;
+  }
+
+  grouping interface-phys-holdtime-config {
+    description
+      "Configuration data for interface hold-time settings --
+      applies to physical interfaces.";
+
+    leaf up {
+      type uint32;
+      units milliseconds;
+      default 0;
+      description
+        "Dampens advertisement when the interface
+        transitions from down to up.  A zero value means dampening
+        is turned off, i.e., immediate notification.";
+    }
+
+    leaf down {
+      type uint32;
+      units milliseconds;
+      default 0;
+      description
+        "Dampens advertisement when the interface transitions from
+        up to down.  A zero value means dampening is turned off,
+        i.e., immediate notification.";
+    }
+  }
+
+  grouping interface-phys-holdtime-state {
+    description
+      "Operational state data for interface hold-time.";
+  }
+
+  grouping interface-phys-holdtime-top {
+    description
+      "Top-level grouping for setting link transition
+      dampening on physical and other types of interfaces.";
+
+    container hold-time {
+      description
+        "Top-level container for hold-time settings to enable
+        dampening advertisements of interface transitions.";
+
+      container config {
+        description
+          "Configuration data for interface hold-time settings.";
+
+        uses interface-phys-holdtime-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for interface hold-time.";
+
+        uses interface-phys-holdtime-config;
+        uses interface-phys-holdtime-state;
+      }
+    }
+  }
+
+  grouping interface-common-state {
+    description
+      "Operational state data (in addition to intended configuration)
+      at the global level for this interface";
+
+    leaf ifindex {
+      type uint32;
+      description
+        "System assigned number for each interface.  Corresponds to
+        ifIndex object in SNMP Interface MIB";
+      reference
+        "RFC 2863 - The Interfaces Group MIB";
+    }
+
+    leaf admin-status {
+      type enumeration {
+        enum UP {
+          description
+            "Ready to pass packets.";
+        }
+        enum DOWN {
+          description
+            "Not ready to pass packets and not in some test mode.";
+        }
+        enum TESTING {
+          //TODO: This is generally not supported as a configured
+          //admin state, though it's in the standard interfaces MIB.
+          //Consider removing it.
+          description
+            "In some test mode.";
+        }
+      }
+      //TODO:consider converting to an identity to have the
+      //flexibility to remove some values defined by RFC 7223 that
+      //are not used or not implemented consistently.
+      mandatory true;
+      description
+        "[adapted from IETF interfaces model (RFC 7223)]
+        The desired state of the interface.  In RFC 7223 this leaf
+        has the same read semantics as ifAdminStatus.  Here, it
+        reflects the administrative state as set by enabling or
+        disabling the interface.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifAdminStatus";
+    }
+
+    leaf oper-status {
+      type enumeration {
+        enum UP {
+          value 1;
+          description
+            "Ready to pass packets.";
+        }
+        enum DOWN {
+          value 2;
+          description
+            "The interface does not pass any packets.";
+        }
+        enum TESTING {
+          value 3;
+          description
+            "In some test mode.  No operational packets can
+             be passed.";
+        }
+        enum UNKNOWN {
+          value 4;
+          description
+            "Status cannot be determined for some reason.";
+        }
+        enum DORMANT {
+          value 5;
+          description
+            "Waiting for some external event.";
+        }
+        enum NOT_PRESENT {
+          value 6;
+          description
+            "Some component (typically hardware) is missing.";
+        }
+        enum LOWER_LAYER_DOWN {
+          value 7;
+          description
+            "Down due to state of lower-layer interface(s).";
+        }
+      }
+      //TODO:consider converting to an identity to have the
+      //flexibility to remove some values defined by RFC 7223 that
+      //are not used or not implemented consistently.
+      mandatory true;
+      description
+        "[adapted from IETF interfaces model (RFC 7223)]
+        The current operational state of the interface.
+         This leaf has the same semantics as ifOperStatus.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifOperStatus";
+    }
+
+    leaf last-change {
+      type yang:timeticks;
+      description
+        "Date and time of the last state change of the interface
+        (e.g., up-to-down transition).   This corresponds to the
+        ifLastChange object in the standard interface MIB.";
+      reference
+        "RFC 2863: The Interfaces Group MIB - ifLastChange";
+    }
+
+  }
+
+
+  grouping interface-counters-state {
+    description
+      "Operational state representing interface counters
+      and statistics.  Some of these are adapted from RFC 7223";
+
+      //TODO: we may need to break this list of counters into those
+      //that would appear for physical vs. subinterface or logical
+      //interfaces.  For now, just replicating the full stats
+      //grouping to both interface and subinterface.
+
+    container counters {
+      description
+        "A collection of interface-related statistics objects.";
+
+      reference
+        "RFC 7223 - A YANG Data Model for Interface
+        Management";
+
+      leaf in-octets {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          The total number of octets received on the interface,
+          including framing characters.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifHCInOctets";
+      }
+
+      leaf in-unicast-pkts {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          The number of packets, delivered by this sub-layer to a
+          higher (sub-)layer, that were not addressed to a
+          multicast or broadcast address at this sub-layer.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts";
+      }
+
+      leaf in-broadcast-pkts {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          The number of packets, delivered by this sub-layer to a
+          higher (sub-)layer, that were addressed to a broadcast
+          address at this sub-layer.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifHCInBroadcastPkts";
+      }
+
+      leaf in-multicast-pkts {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          The number of packets, delivered by this sub-layer to a
+          higher (sub-)layer, that were addressed to a multicast
+          address at this sub-layer.  For a MAC-layer protocol,
+          this includes both Group and Functional addresses.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifHCInMulticastPkts";
+      }
+
+      leaf in-discards {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          Changed the counter type to counter64.
+          The number of inbound packets that were chosen to be
+          discarded even though no errors had been detected to
+          prevent their being deliverable to a higher-layer
+          protocol.  One possible reason for discarding such a
+          packet could be to free up buffer space.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+
+
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifInDiscards";
+      }
+
+      leaf in-errors {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          Changed the counter type to counter64.
+          For packet-oriented interfaces, the number of inbound
+          packets that contained errors preventing them from being
+          deliverable to a higher-layer protocol.  For character-
+          oriented or fixed-length interfaces, the number of
+          inbound transmission units that contained errors
+          preventing them from being deliverable to a higher-layer
+          protocol.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifInErrors";
+      }
+
+      leaf in-unknown-protos {
+        type yang:counter32;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          Changed the counter type to counter64.
+          For packet-oriented interfaces, the number of packets
+          received via the interface that were discarded because
+          of an unknown or unsupported protocol.  For
+          character-oriented or fixed-length interfaces that
+          support protocol multiplexing, the number of
+          transmission units received via the interface that were
+          discarded because of an unknown or unsupported protocol.
+          For any interface that does not support protocol
+          multiplexing, this counter is not present.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos";
+      }
+
+      leaf out-octets {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          Changed the counter type to counter64.
+          The total number of octets transmitted out of the
+          interface, including framing characters.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifHCOutOctets";
+      }
+
+      leaf out-unicast-pkts {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          The total number of packets that higher-level protocols
+          requested be transmitted, and that were not addressed
+          to a multicast or broadcast address at this sub-layer,
+          including those that were discarded or not sent.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts";
+      }
+
+      leaf out-broadcast-pkts {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          The total number of packets that higher-level protocols
+          requested be transmitted, and that were addressed to a
+          broadcast address at this sub-layer, including those
+          that were discarded or not sent.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifHCOutBroadcastPkts";
+      }
+
+
+      leaf out-multicast-pkts {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          Changed the counter type to counter64.
+          The total number of packets that higher-level protocols
+          requested be transmitted, and that were addressed to a
+          multicast address at this sub-layer, including those
+          that were discarded or not sent.  For a MAC-layer
+          protocol, this includes both Group and Functional
+          addresses.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB -
+                     ifHCOutMulticastPkts";
+      }
+
+      leaf out-discards {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          Changed the counter type to counter64.
+          The number of outbound packets that were chosen to be
+          discarded even though no errors had been detected to
+          prevent their being transmitted.  One possible reason
+          for discarding such a packet could be to free up buffer
+          space.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifOutDiscards";
+      }
+
+      leaf out-errors {
+        type yang:counter64;
+        description
+          "[adapted from IETF interfaces model (RFC 7223)]
+          Changed the counter type to counter64.
+          For packet-oriented interfaces, the number of outbound
+          packets that could not be transmitted because of errors.
+          For character-oriented or fixed-length interfaces, the
+          number of outbound transmission units that could not be
+          transmitted because of errors.
+          Discontinuities in the value of this counter can occur
+          at re-initialization of the management system, and at
+          other times as indicated by the value of
+          'discontinuity-time'.";
+        reference
+          "RFC 2863: The Interfaces Group MIB - ifOutErrors";
+      }
+
+      leaf last-clear {
+        type yang:date-and-time;
+        description
+          "Indicates the last time the interface counters were
+          cleared.";
+      }
+    }
+  }
+
+  // data definition statements
+
+  grouping sub-unnumbered-config {
+    description
+      "Configuration data for unnumbered subinterfaces";
+
+    leaf enabled {
+      type boolean;
+      default false;
+      description
+        "Indicates that the subinterface is unnumbered.  By default
+        the subinterface is numbered, i.e., expected to have an
+        IP address configuration.";
+    }
+  }
+
+  grouping sub-unnumbered-state {
+    description
+      "Operational state data unnumbered subinterfaces";
+  }
+
+  grouping sub-unnumbered-top {
+    description
+      "Top-level grouping unnumbered subinterfaces";
+
+    container unnumbered {
+      description
+        "Top-level container for setting unnumbered interfaces.
+        Includes reference the interface that provides the
+        address information";
+
+      container config {
+        description
+          "Configuration data for unnumbered interface";
+
+        uses sub-unnumbered-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for unnumbered interfaces";
+
+        uses sub-unnumbered-config;
+        uses sub-unnumbered-state;
+      }
+
+      uses oc-if:interface-ref;
+    }
+  }
+
+  grouping subinterfaces-config {
+    description
+      "Configuration data for subinterfaces";
+
+    leaf index {
+      type uint32;
+      default 0;
+      description
+        "The index of the subinterface, or logical interface number.
+        On systems with no support for subinterfaces, or not using
+        subinterfaces, this value should default to 0, i.e., the
+        default subinterface.";
+    }
+
+    uses interface-common-config;
+
+  }
+
+  grouping subinterfaces-state {
+    description
+      "Operational state data for subinterfaces";
+
+    uses interface-common-state;
+    uses interface-counters-state;
+  }
+
+  grouping subinterfaces-top {
+    description
+      "Subinterface data for logical interfaces associated with a
+      given interface";
+
+    container subinterfaces {
+      description
+        "Enclosing container for the list of subinterfaces associated
+        with a physical interface";
+
+      list subinterface {
+        key "index";
+
+        description
+          "The list of subinterfaces (logical interfaces) associated
+          with a physical interface";
+
+        leaf index {
+          type leafref {
+            path "../config/index";
+          }
+          description
+            "The index number of the subinterface -- used to address
+            the logical interface";
+        }
+
+        container config {
+          description
+            "Configurable items at the subinterface level";
+
+          uses subinterfaces-config;
+        }
+
+        container state {
+
+          config false;
+          description
+            "Operational state data for logical interfaces";
+
+          uses subinterfaces-config;
+          uses subinterfaces-state;
+        }
+      }
+    }
+  }
+
+  grouping interfaces-top {
+    description
+      "Top-level grouping for interface configuration and
+      operational state data";
+
+    container interfaces {
+      description
+        "Top level container for interfaces, including configuration
+        and state data.";
+
+
+      list interface {
+        key "name";
+
+        description
+          "The list of named interfaces on the device.";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "References the configured name of the interface";
+            //TODO: need to consider whether this should actually
+            //reference the name in the state subtree, which
+            //presumably would be the system-assigned name, or the
+            //configured name.  Points to the config/name now
+            //because of YANG 1.0 limitation that the list
+            //key must have the same "config" as the list, and
+            //also can't point to a non-config node.
+        }
+
+        container config {
+          description
+            "Configurable items at the global, physical interface
+            level";
+
+          uses interface-phys-config;
+        }
+
+        container state {
+
+          config false;
+          description
+            "Operational state data at the global interface level";
+
+          uses interface-phys-config;
+          uses interface-common-state;
+          uses interface-counters-state;
+        }
+
+        uses interface-phys-holdtime-top;
+        uses subinterfaces-top;
+      }
+    }
+  }
+
+  uses interfaces-top;
+
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-optical-amplifier@2016-03-31.yang b/models/openconfig-infinera/src/main/yang/openconfig-optical-amplifier@2016-03-31.yang
new file mode 100644
index 0000000..fcaec36
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-optical-amplifier@2016-03-31.yang
@@ -0,0 +1,285 @@
+module openconfig-optical-amplifier {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/optical-amplfier";
+
+  prefix "oc-opt-amp";
+
+  import openconfig-transport-line-common {
+    prefix oc-line-com;
+    revision-date "2016-03-31";
+  }
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+
+    // import tailf-common {prefix "tailf";}
+    // tailf:export netconf;
+    // tailf:export rest;
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This model describes configuration and operational state data
+    for optical amplifiers, deployed as part of a transport
+    line system.";
+
+  oc-ext:openconfig-version "0.1.0";
+
+  revision "2016-03-31" {
+    description
+      "Initial public release";
+    reference "0.1.0";
+  }
+
+  revision "2015-12-11" {
+    description
+      "Initial revision";
+    reference "TBD";
+  }
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  identity OPTICAL_AMPLIFIER_TYPE {
+    description
+      "Type definition for different types of optical amplifiers";
+  }
+
+  identity EDFA {
+    base OPTICAL_AMPLIFIER_TYPE;
+    description
+      "Erbium doped fiber amplifer (EDFA)";
+  }
+
+  identity FORWARD_RAMAN {
+    base OPTICAL_AMPLIFIER_TYPE;
+    description
+      "Forward pumping Raman amplifier";
+  }
+
+  identity BACKWARD_RAMAN {
+    base OPTICAL_AMPLIFIER_TYPE;
+    description
+      "Backward pumping Raman amplifier";
+  }
+
+  identity HYBRID {
+    base OPTICAL_AMPLIFIER_TYPE;
+    description
+      "Hybrid backward pumping Raman + EDFA amplifier";
+  }
+
+  identity GAIN_RANGE {
+    description
+      "Base type for expressing the gain range for a switched gain
+      amplifier.  The gain range is expressed as a generic setting,
+      e.g., LOW/MID/HIGH. The actual db range will be determined
+      by the implementation.";
+  }
+
+  identity LOW_GAIN_RANGE {
+    base GAIN_RANGE;
+    description
+      "LOW gain range setting";
+  }
+
+  identity MID_GAIN_RANGE {
+    base GAIN_RANGE;
+    description
+      "MID gain range setting";
+  }
+
+  identity HIGH_GAIN_RANGE {
+    base GAIN_RANGE;
+    description
+      "HIGH gain range setting";
+  }
+
+  identity FIXED_GAIN_RANGE {
+    base GAIN_RANGE;
+    description
+      "Fixed or non-switched gain amplfier";
+  }
+
+  identity OPTICAL_AMPLIFIER_MODE {
+    description
+      "Type definition for different types of optical amplifier
+      operating modes";
+  }
+
+  identity CONSTANT_POWER {
+      base OPTICAL_AMPLIFIER_MODE;
+      description
+        "Constant power mode";
+  }
+
+  identity CONSTANT_GAIN {
+      base OPTICAL_AMPLIFIER_MODE;
+      description
+        "Constant gain mode";
+  }
+
+
+  // grouping statements
+
+  grouping optical-amplifier-config {
+    description
+      "Configuration data for optical amplifiers";
+
+    leaf name {
+      type string;
+      description
+        "User-defined name assigned to identify a specific amplifier
+        in the device";
+    }
+
+    leaf type {
+      type identityref {
+        base OPTICAL_AMPLIFIER_TYPE;
+      }
+      description
+        "Type of the amplifier";
+    }
+
+    leaf target-gain {
+      type decimal64 {
+        fraction-digits 2;
+        range 0..max;
+      }
+      units dB;
+      description
+        "Positive gain applied by the amplifier.";
+    }
+
+    leaf target-gain-tilt {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "Gain tilt control";
+    }
+
+    leaf gain-range {
+      type identityref {
+        base GAIN_RANGE;
+      }
+      description
+        "Selected gain range.  The gain range is a platform-defined
+        value indicating the switched gain amplifier setting";
+    }
+
+    leaf amp-mode {
+      type identityref {
+        base OPTICAL_AMPLIFIER_MODE;
+      }
+      description
+        "The operating mode of the amplifier";
+    }
+
+    leaf output-power {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "Output optical power of the amplifier.";
+    }
+
+  }
+
+  grouping optical-amplifier-state {
+    description
+      "Operational state data for optical amplifiers";
+
+    leaf actual-gain {
+      type decimal64 {
+        fraction-digits 2;
+        range 0..max;
+      }
+      units dB;
+      description
+        "Actual gain applied by the amplifier.";
+    }
+
+    leaf actual-gain-tilt {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The actual gain tilt.";
+    }
+
+    leaf input-power {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "Input optical power of the amplifier.";
+    }
+  }
+
+  grouping optical-amplifier-top {
+    description
+      "Top-level grouping for optical amplifier data";
+
+    container optical-amplifiers {
+      description
+        "Enclosing container for list of amplifiers";
+
+      list amplifier {
+        key "name";
+        description
+          "List of optical amplifiers present in the device";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Reference to the name of the amplifier";
+        }
+
+        container config {
+          description
+            "Configuration data for the amplifier";
+
+          uses optical-amplifier-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for the amplifier";
+
+          uses optical-amplifier-config;
+          uses optical-amplifier-state;
+        }
+      }
+
+      uses oc-line-com:optical-osc-top;
+    }
+  }
+
+  // data definition statements
+
+  uses optical-amplifier-top;
+
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-platform-transceiver@2016-12-22.yang b/models/openconfig-infinera/src/main/yang/openconfig-platform-transceiver@2016-12-22.yang
new file mode 100644
index 0000000..739a96e
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-platform-transceiver@2016-12-22.yang
@@ -0,0 +1,487 @@
+module openconfig-platform-transceiver {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/platform/transceiver";
+
+  prefix "oc-transceiver";
+
+  // import some basic types
+  import openconfig-platform {
+    prefix oc-platform;
+    revision-date "2016-06-06";
+  }
+  import openconfig-interfaces {
+    prefix oc-if;
+    revision-date "2016-05-26";
+  }
+  import openconfig-transport-types {
+    prefix oc-opt-types;
+    revision-date "2016-12-22";
+  }
+  import openconfig-types {
+    prefix oc-types;
+    revision-date "2017-01-13";
+  }
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+
+    // import tailf-common {prefix "tailf";}
+    // tailf:export netconf;
+    // tailf:export rest;
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines configuration and operational state data
+    for transceivers (i.e., pluggable optics).  The module should be
+    used in conjunction with the platform model where other
+    physical entity data are represented.
+    In the platform model, a component of type=TRANSCEIVER is
+    expected to be a subcomponent of a PORT component.  This
+    module defines a concrete schema for the associated data for
+    components with type=TRANSCEIVER.";
+
+  oc-ext:openconfig-version "0.2.0";
+
+  revision "2016-12-22" {
+    description
+      "Adds preconfiguration data and clarified units";
+    reference "0.2.0";
+  }
+
+  // identity statements
+
+  // typedef statements
+
+  // grouping statements
+
+  grouping optical-power-state {
+    description
+      "Reusable leaves related to optical power state -- these
+      are read-only state values. If avg/min/max statistics are
+      not supported, the target is expected to just supply the
+      instant value";
+
+    container output-power {
+      description
+        "The output optical power of this port in units of 0.01dBm.
+        If the port is an aggregate of multiple physical channels,
+        this attribute is the total power or sum of all channels.
+        Values include the instantaneous, average, minimum, and
+        maximum statistics. If avg/min/max statistics are not
+        supported, the target is expected to just supply the
+        instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dBm;
+    }
+
+    container input-power {
+      description
+        "The input optical power of this port in units of 0.01dBm.
+        If the port is an aggregate of multiple physical channels,
+        this attribute is the total power or sum of all channels.
+        Values include the instantaneous, average, minimum, and
+        maximum statistics. If avg/min/max statistics are not
+        supported, the target is expected to just supply the
+        instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dBm;
+    }
+
+    container laser-bias-current {
+      description
+        "The current applied by the system to the transmit laser to
+        achieve the output power. The current is expressed in mA
+        with up to two decimal precision. Values include the
+        instantaneous, average, minimum, and maximum statistics.
+        If avg/min/max statistics are not supported, the target is
+        expected to just supply the instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-mA;
+    }
+  }
+
+  grouping output-optical-frequency {
+    description
+      "Reusable leaves related to optical output power -- this is
+      typically configurable on line side and read-only on the
+      client-side";
+
+    leaf output-frequency {
+      type oc-opt-types:frequency-type;
+      description
+        "The frequency in MHz of the individual physical channel
+        (e.g. ITU C50 - 195.0THz and would be reported as
+        195,000,000 MHz in this model). This attribute is not
+        configurable on most client ports.";
+    }
+  }
+
+
+  grouping physical-channel-config {
+    description
+      "Configuration data for physical client channels";
+
+    leaf index {
+      type uint16 {
+        range 0..max;
+      }
+      description
+        "Index of the physical channnel or lane within a physical
+        client port";
+    }
+
+    leaf description {
+      type string;
+      description
+        "Text description for the client physical channel";
+    }
+
+    leaf tx-laser {
+      type boolean;
+      description
+        "Enable (true) or disable (false) the transmit label for the
+        channel";
+    }
+
+    leaf target-output-power {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "Target output optical power level of the optical channel,
+        expressed in increments of 0.01 dBm (decibel-milliwats)";
+    }
+  }
+
+  grouping physical-channel-state {
+    description
+      "Operational state data for client channels.";
+
+    uses output-optical-frequency;
+    uses optical-power-state;
+  }
+
+  grouping physical-channel-top {
+    description
+      "Top-level grouping for physical client channels";
+
+    container physical-channels {
+      description
+        "Enclosing container for client channels";
+
+      list channel {
+        key "index";
+        description
+          "List of client channels, keyed by index within a physical
+          client port.  A physical port with a single channel would
+          have a single zero-indexed element";
+
+        leaf index {
+          type leafref {
+            path "../config/index";
+          }
+          description
+            "Reference to the index number of the channel";
+        }
+
+        container config {
+          description
+            "Configuration data for physical channels";
+
+          uses physical-channel-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for channels";
+
+          uses physical-channel-config;
+          uses physical-channel-state;
+        }
+      }
+    }
+  }
+
+
+  grouping port-transceiver-config {
+    description
+      "Configuration data for client port transceivers";
+
+    leaf enabled {
+      type boolean;
+      description
+        "Turns power on / off to the transceiver -- provides a means
+        to power on/off the transceiver (in the case of SFP, SFP+,
+        QSFP,...) or enable high-power mode (in the case of CFP,
+        CFP2, CFP4) and is optionally supported (device can choose to
+        always enable).  True = power on / high power, False =
+        powered off";
+    }
+
+    leaf form-factor-preconf {
+      type identityref {
+        base oc-opt-types:TRANSCEIVER_FORM_FACTOR_TYPE;
+      }
+      description
+        "Indicates the type of optical transceiver used on this
+        port.  If the client port is built into the device and not
+        pluggable, then non-pluggable is the corresponding state. If
+        a device port supports multiple form factors (e.g. QSFP28
+        and QSFP+, then the value of the transceiver installed shall
+        be reported. If no transceiver is present, then the value of
+        the highest rate form factor shall be reported
+        (QSFP28, for example).
+        The form factor is included in configuration data to allow
+        pre-configuring a device with the expected type of
+        transceiver ahead of deployment.  The corresponding state
+        leaf should reflect the actual transceiver type plugged into
+        the system.";
+    }
+
+    leaf ethernet-pmd-preconf {
+      type identityref {
+        base oc-opt-types:ETHERNET_PMD_TYPE;
+      }
+      description
+        "The Ethernet PMD is a property of the optical transceiver
+        used on the port, indicating the type of physical connection.
+        It is included in configuration data to allow pre-configuring
+        a port/transceiver with the expected PMD.  The actual PMD is
+        indicated by the ethernet-pmd state leaf.";
+    }
+  }
+
+  grouping port-transceiver-state {
+    description
+      "Operational state data for client port transceivers";
+
+    leaf present {
+      type enumeration {
+        enum PRESENT {
+          description
+            "Transceiver is present on the port";
+        }
+        enum NOT_PRESENT {
+          description
+            "Transceiver is not present on the port";
+        }
+      }
+      description
+        "Indicates whether a transceiver is present in
+        the specified client port.";
+    }
+
+    leaf form-factor {
+      type identityref {
+        base oc-opt-types:TRANSCEIVER_FORM_FACTOR_TYPE;
+      }
+      description
+        "Indicates the type of optical transceiver used on this
+        port.  If the client port is built into the device and not
+        pluggable, then non-pluggable is the corresponding state. If
+        a device port supports multiple form factors (e.g. QSFP28
+        and QSFP+, then the value of the transceiver installed shall
+        be reported. If no transceiver is present, then the value of
+        the highest rate form factor shall be reported
+        (QSFP28, for example).";
+    }
+
+    leaf connector-type {
+      type identityref {
+        base oc-opt-types:FIBER_CONNECTOR_TYPE;
+      }
+      description
+        "Connector type used on this port";
+    }
+
+    leaf internal-temp {
+    // TODO: this should probably be removed if we add temperature
+    // as a top-level component property, i.e., transceiver temp
+    // should be reported there.
+      type int16 {
+        range -40..125;
+      }
+      description
+        "Internally measured temperature in degrees Celsius. MSA
+        valid range is between -40 and +125C. Accuracy shall be
+        better than +/- 3 degC over the whole temperature range.";
+    }
+
+    leaf vendor {
+      type string {
+        length 1..16;
+      }
+      description
+        "Full name of transceiver vendor. 16-octet field that
+        contains ASCII characters, left-aligned and padded on the
+        right with ASCII spaces (20h)";
+    }
+
+    leaf vendor-part {
+      type string {
+        length 1..16;
+      }
+      description
+        "Transceiver vendor's part number. 16-octet field that
+        contains ASCII characters, left-aligned and padded on the
+        right with ASCII spaces (20h). If part number is undefined,
+        all 16 octets = 0h";
+    }
+
+    leaf vendor-rev {
+      type string {
+        length 1..2;
+      }
+      description
+        "Transceiver vendor's revision number. 2-octet field that
+        contains ASCII characters, left-aligned and padded on the
+        right with ASCII spaces (20h)";
+    }
+
+    //TODO: these compliance code leaves should be active based on
+    //the type of port
+    leaf ethernet-pmd {
+      type identityref {
+        base oc-opt-types:ETHERNET_PMD_TYPE;
+      }
+      description
+        "Ethernet PMD (physical medium dependent sublayer) that the
+        transceiver supports. The SFF/QSFP MSAs have registers for
+        this and CFP MSA has similar.";
+    }
+
+    leaf sonet-sdh-compliance-code {
+      type identityref {
+        base oc-opt-types:SONET_APPLICATION_CODE;
+      }
+      description
+        "SONET/SDH application code supported by the port";
+    }
+
+    leaf otn-compliance-code {
+      type identityref {
+        base oc-opt-types:OTN_APPLICATION_CODE;
+      }
+      description
+        "OTN application code supported by the port";
+    }
+
+    leaf serial-no {
+      type string {
+        length 1..16;
+      }
+      description
+        "Transceiver serial number. 16-octet field that contains
+        ASCII characters, left-aligned and padded on the right with
+        ASCII spaces (20h). If part serial number is undefined, all
+        16 octets = 0h";
+    }
+
+    leaf date-code {
+      type yang:date-and-time;
+      description
+        "Representation of the transceiver date code, typically
+        stored as YYMMDD.  The time portion of the value is
+        undefined and not intended to be read.";
+    }
+
+    leaf fault-condition {
+      type boolean;
+      description
+        "Indicates if a fault condition exists in the transceiver";
+    }
+
+  }
+
+  grouping port-transceiver-top {
+    description
+      "Top-level grouping for client port transceiver data";
+
+    container transceiver {
+      description
+        "Top-level container for client port transceiver data";
+
+      container config {
+        description
+          "Configuration data for client port transceivers";
+
+        uses port-transceiver-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for client port transceivers";
+
+        uses port-transceiver-config;
+        uses port-transceiver-state;
+      }
+      // physical channels are associated with a transceiver
+      // component
+      uses physical-channel-top;
+    }
+  }
+
+  // data definition statements
+
+  // augment statements
+
+  augment "/oc-platform:components/oc-platform:component" {
+    description
+      "Adding transceiver data to physical inventory";
+
+    uses port-transceiver-top {
+      when "current()/oc-platform:state/" +
+        "oc-platform:type = 'TRANSCEIVER'" {
+        description
+          "Augment is active when component is of type TRANSCEIVER";
+      }
+    }
+  }
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:state" {
+    //TODO: add 'when' or other condition to make sure this
+    //leafref points to a component of type TRANSCEIVER.
+    description
+      "Adds a reference from the base interface to its corresponding
+      physical channels.";
+
+    leaf-list physical-channel {
+      type leafref {
+        path "/oc-platform:components/" +
+          "oc-platform:component[oc-platform:name=current()/../oc-platform:hardware-port]/" +
+          "oc-transceiver:transceiver/" +
+          "oc-transceiver:physical-channels/oc-transceiver:channel/" +
+          "oc-transceiver:index";
+      }
+      description
+        "For a channelized interface, list of references to the
+        physical channels (lanes) corresponding to the interface.";
+    }
+  }
+
+  // rpc statements
+
+  // notification statements
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-platform-types@2016-06-06.yang b/models/openconfig-infinera/src/main/yang/openconfig-platform-types@2016-06-06.yang
new file mode 100644
index 0000000..34e8e56
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-platform-types@2016-06-06.yang
@@ -0,0 +1,123 @@
+module openconfig-platform-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/platform-types";
+
+  prefix "oc-platform-types";
+
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines data types (e.g., YANG identities)
+    to support the OpenConfig component inventory model.";
+
+  oc-ext:openconfig-version "0.4.0";
+
+  revision "2016-06-06" {
+    description
+      "Public release";
+    reference "0.4.0";
+  }
+
+  // identity statements
+
+  identity OPENCONFIG_HARDWARE_COMPONENT {
+    description
+      "Base identity for hardware related components in a managed
+      device.  Derived identities are partially based on contents
+      of the IANA Entity MIB.";
+    reference
+      "IANA Entity MIB and RFC 6933";
+  }
+
+
+  identity OPENCONFIG_SOFTWARE_COMPONENT {
+    description
+      "Base identity for software-related components in a managed
+      device";
+  }
+
+  // hardware types
+
+  identity CHASSIS {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Chassis component, typically with multiple slots / shelves";
+  }
+
+  identity BACKPLANE {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Backplane component for aggregating traffic, typically
+      contained in a chassis component";
+  }
+
+  identity POWER_SUPPLY {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Component that is supplying power to the device";
+  }
+
+  identity FAN {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Cooling fan, or could be some other heat-reduction component";
+  }
+
+  identity SENSOR {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Physical sensor, e.g., a temperature sensor in a chassis";
+  }
+
+  identity MODULE {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Replaceable hardware module, e.g., a daughtercard";
+  }
+
+  identity LINECARD {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Linecard component, typically inserted into a chassis slot";
+  }
+
+  identity PORT {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Physical port, e.g., for attaching pluggables and networking
+      cables";
+  }
+
+  identity TRANSCEIVER {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Pluggable module present in a port";
+  }
+
+  identity CPU {
+    base OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Processing unit, e.g., a management processor";
+  }
+
+  identity OPERATING_SYSTEM {
+    base OPENCONFIG_SOFTWARE_COMPONENT;
+    description
+      "Operating system running on a component";
+  }
+
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-platform@2016-06-06.yang b/models/openconfig-infinera/src/main/yang/openconfig-platform@2016-06-06.yang
new file mode 100644
index 0000000..97201ed
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-platform@2016-06-06.yang
@@ -0,0 +1,358 @@
+module openconfig-platform {
+
+  yang-version "1";
+
+  // namespace
+
+  namespace "http://openconfig.net/yang/platform";
+
+  prefix "oc-platform";
+
+  import openconfig-platform-types { prefix oc-platform-types; }
+  import openconfig-interfaces { prefix oc-if; }
+  import openconfig-extensions { prefix oc-ext; }
+
+    // import tailf-common {prefix "tailf";}
+    // tailf:export netconf;
+    // tailf:export rest;
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines a data model for representing a system
+    component inventory, which can include hardware or software
+    elements arranged in an arbitrary structure. The primary
+    relationship supported by the model is containment, e.g.,
+    components containing subcomponents.
+    It is expected that this model reflects every field replacable
+    unit on the device at a minimum (i.e., additional information
+    may be supplied about non-replacable components).
+    Every element in the inventory is termed a 'component' with each
+    component expected to have a unique name and type, and optionally
+    a unique system-assigned identifier and FRU number.  The
+    uniqueness is guaranteed by the system within the device.
+    Components may have properties defined by the system that are
+    modeled as a list of key-value pairs. These may or may not be
+    user-configurable.  The model provides a flag for the system
+    to optionally indicate which properties are user configurable.
+    Each component also has a list of 'subcomponents' which are
+    references to other components. Appearance in a list of
+    subcomponents indicates a containment relationship as described
+    above.  For example, a linecard component may have a list of
+    references to port components that reside on the linecard.
+    This schema is generic to allow devices to express their own
+    platform-specific structure.  It may be augmented by additional
+    component type-specific schemas that provide a common structure
+    for well-known component types.  In these cases, the system is
+    expected to populate the common component schema, and may
+    optionally also represent the component and its properties in the
+    generic structure.
+    The properties for each component may include dynamic values,
+    e.g., in the 'state' part of the schema.  For example, a CPU
+    component may report its utilization, temperature, or other
+    physical properties.  The intent is to capture all platform-
+    specific physical data in one location, including inventory
+    (presence or absence of a component) and state (physical
+    attributes or status).";
+
+  oc-ext:openconfig-version "0.4.0";
+
+  revision "2016-06-06" {
+    description
+      "Public release";
+    reference "0.4.0";
+  }
+
+  // grouping statements
+
+
+  grouping platform-component-properties-config {
+    description
+      "System-defined configuration data for component properties";
+
+    leaf name {
+      type string;
+      description
+        "System-supplied name of the property -- this is typically
+        non-configurable";
+    }
+
+    leaf value {
+      type union {
+        type string;
+        type boolean;
+        type int64;
+        type uint64;
+        type decimal64 {
+          fraction-digits 2;
+        }
+      }
+      description
+        "Property values can take on a variety of types.  Signed and
+        unsigned integer types may be provided in smaller sizes,
+        e.g., int8, uint16, etc.";
+    }
+  }
+
+  grouping platform-component-properties-state {
+    description
+      "Operational state data for component properties";
+
+    leaf configurable {
+      type boolean;
+      description
+        "Indication whether the property is user-configurable";
+    }
+  }
+
+  grouping platform-component-properties-top {
+    description
+      "Top-level grouping ";
+
+    container properties {
+      description
+        "Enclosing container ";
+
+      list property {
+        key "name";
+        description
+          "List of system properties for the component";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Reference to the property name.";
+        }
+
+        container config {
+          description
+            "Configuration data for each property";
+
+          uses platform-component-properties-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for each property";
+
+          uses platform-component-properties-config;
+          uses platform-component-properties-state;
+        }
+      }
+    }
+  }
+
+  grouping platform-subcomponent-ref-config {
+    description
+      "Configuration data for subcomponent references";
+
+    leaf name {
+      type leafref {
+        path "../../../../../component/config/name";
+      }
+      description
+        "Reference to the name of the subcomponent";
+    }
+  }
+
+  grouping platform-subcomponent-ref-state {
+    description
+      "Operational state data for subcomponent references";
+
+  }
+
+  grouping platform-subcomponent-ref-top {
+    description
+      "Top-level grouping for list of subcomponent references";
+
+    container subcomponents {
+      description
+        "Enclosing container for subcomponent references";
+
+      list subcomponent {
+        key "name";
+        description
+          "List of subcomponent references";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "Reference to the name list key";
+        }
+
+        container config {
+          description
+            "Configuration data ";
+
+          uses platform-subcomponent-ref-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data ";
+
+          uses platform-subcomponent-ref-config;
+          uses platform-subcomponent-ref-state;
+        }
+      }
+    }
+  }
+
+  grouping platform-component-config {
+    description
+      "Configuration data for components";
+
+    leaf name {
+      type string;
+      description
+        "Device name for the component -- this will not be a
+        configurable parameter on many implementations";
+    }
+  }
+
+  grouping platform-component-state {
+    description
+      "Operational state data for device components.";
+
+    leaf type {
+      type union {
+        type identityref {
+          base oc-platform-types:OPENCONFIG_HARDWARE_COMPONENT;
+        }
+        type identityref {
+          base oc-platform-types:OPENCONFIG_SOFTWARE_COMPONENT;
+        }
+      }
+      description
+        "Type of component as identified by the system";
+    }
+
+    leaf id {
+      type string;
+      description
+        "Unique identifier assigned by the system for the
+        component";
+    }
+
+    leaf description {
+      type string;
+      description
+        "System-supplied description of the component";
+    }
+
+    leaf mfg-name {
+      type string;
+      description
+        "System-supplied identifier for the manufacturer of the
+        component.  This data is particularly useful when a
+        component manufacturer is different than the overall
+        device vendor.";
+    }
+
+    leaf version {
+      type string;
+      description
+        "System-defined version string for a hardware, firmware,
+        or software component.";
+    }
+
+    leaf serial-no {
+      type string;
+      description
+        "System-assigned serial number of the component.";
+    }
+
+    leaf part-no {
+      type string;
+      description
+        "System-assigned part number for the component.  This should
+        be present in particular if the component is also an FRU
+        (field replacable unit)";
+    }
+  }
+
+  grouping platform-component-top {
+    description
+      "Top-level grouping for components in the device inventory";
+
+    container components {
+      description
+        "Enclosing container for the components in the system.";
+
+      list component {
+        key "name";
+        description
+          "List of components, keyed by component name.";
+
+        leaf name {
+          type leafref {
+            path "../config/name";
+          }
+          description
+            "References the component name";
+        }
+
+        container config {
+          description
+            "Configuration data for each component";
+
+          uses platform-component-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for each component";
+
+          uses platform-component-config;
+          uses platform-component-state;
+        }
+
+        uses platform-component-properties-top;
+        uses platform-subcomponent-ref-top;
+      }
+    }
+  }
+
+  // data definition statements
+
+  uses platform-component-top;
+
+
+  // augments
+
+  augment "/oc-if:interfaces/oc-if:interface/oc-if:state" {
+    //TODO: add 'when' or other condition to make sure this
+    //leafref points to a component of type PORT.
+    description
+      "Adds a reference from the base interface to the corresponding
+      port in the device inventory.";
+
+    leaf hardware-port {
+      type leafref {
+        path "/oc-platform:components/oc-platform:component/" +
+          "oc-platform:name";
+      }
+      description
+        "References the hardware port in the device inventory";
+    }
+  }
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-terminal-device@2016-12-22.yang b/models/openconfig-infinera/src/main/yang/openconfig-terminal-device@2016-12-22.yang
new file mode 100644
index 0000000..3bea3e8
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-terminal-device@2016-12-22.yang
@@ -0,0 +1,1135 @@
+module openconfig-terminal-device {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/terminal-device";
+
+  prefix "oc-opt-term";
+
+  import openconfig-types {
+    prefix oc-types;
+    revision-date "2017-01-13";
+  }
+  import openconfig-transport-types {
+    prefix oc-opt-types;
+    revision-date "2016-12-22";
+  }
+  import openconfig-if-ethernet {
+    prefix oc-eth;
+    revision-date "2016-12-22";
+  }
+  import openconfig-platform {
+    prefix oc-platform;
+    revision-date "2016-06-06";
+  }
+  import openconfig-platform-transceiver {
+    prefix oc-transceiver;
+    revision-date "2016-12-22";
+  }
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+  // import tailf-common { prefix "tailf";}
+  // tailf:export netconf;
+  // tailf:export rest;
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module describes a terminal optics device model for
+    managing the terminal systems (client and line side) in a
+    DWDM transport network.
+    Elements of the model:
+    physical port: corresponds to a physical, pluggable client
+    port on the terminal device. Examples includes 10G, 40G, 100G
+    (e.g., 10x10G, 4x25G or 1x100G) and 400G/1T in the future.
+    Physical client ports will have associated operational state or
+    PMs.
+    physical channel: a physical lane or channel in the
+    physical client port.  Each physical client port has 1 or more
+    channels. An example is 100GBASE-LR4 client physical port having
+    4x25G channels. Channels have their own optical PMs and can be
+    monitored independently within a client physical port (e.g.,
+    channel power).  Physical client channels are defined in the
+    model as part of a physical client port, and are modeled
+    primarily for reading their PMs.
+    logical channel: a logical grouping of logical grooming elements
+    that may be assigned to subsequent grooming stages for
+    multiplexing / de-multiplexing, or to an optical channel for
+    line side transmission.  The logical channels can represent, for
+    example, an ODU/OTU logical packing of the client
+    data onto the line side.  Tributaries are similarly logical
+    groupings of demand that can be represented in this structure and
+    assigned to an optical channel.  Note that different types of
+    logical channels may be present, each with their corresponding
+    PMs.
+    optical channel:  corresponds to an optical carrier and is
+    assigned a wavelength/frequency.  Optical channels have PMs
+    such as power, BER, and operational mode.
+    Directionality:
+    To maintain simplicity in the model, the configuration is
+    described from client-to-line direction.  The assumption is that
+    equivalent reverse configuration is implicit, resulting in
+    the same line-to-client configuration.
+    Physical layout:
+    The model does not assume a particular physical layout of client
+    and line ports on the terminal device (e.g., such as number of
+    ports per linecard, separate linecards for client and line ports,
+    etc.).";
+
+  oc-ext:openconfig-version "0.4.0";
+
+  revision "2016-12-22" {
+    description
+      "Fixes and additions to terminal optics model";
+    reference "0.4.0";
+  }
+ 
+
+  grouping terminal-input-optical-power {
+    description
+      "Reusable leaves related to input optical power";
+
+    leaf input-power {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The input optical power of this port in units of 0.01dBm.
+        If the port is an aggregate of multiple physical channels,
+        this attribute is the total power or sum of all channels.";
+    }
+  }
+
+  grouping terminal-ethernet-protocol-config {
+    description
+      "Configuration data for logical channels with Ethernet
+      framing";
+
+    //TODO:currently a empty container
+  }
+
+  grouping terminal-ethernet-protocol-state {
+    description
+      "Ethernet-specific counters when logical channel
+      is using Ethernet protocol framing, e.g., 10GE, 100GE";
+
+      uses oc-eth:ethernet-interface-state-counters;
+  }
+
+  grouping terminal-ethernet-protocol-top {
+    description
+      "Top-level grouping for data related to Ethernet protocol
+      framing on logical channels";
+
+    container ethernet {
+      description
+        "Top level container for data related to Ethernet framing
+        for the logical channel";
+
+      container config {
+        description
+          "Configuration data for Ethernet protocol framing on
+          logical channels";
+
+        uses terminal-ethernet-protocol-config;
+      }
+
+      container state {
+        config false;
+        description
+          "Operational state data for Ethernet protocol framing
+          on logical channels";
+
+        uses terminal-ethernet-protocol-state;
+      }
+    }
+  }
+
+  grouping terminal-otn-protocol-config {
+    description
+      "OTU configuration when logical channel
+      framing is using an OTU protocol, e.g., OTU1, OTU3, etc.";
+
+    leaf tti-msg-transmit {
+      type string;
+      description
+        "Trail trace identifier (TTI) message transmitted";
+    }
+
+    leaf tti-msg-expected {
+      type string;
+      description
+        "Trail trace identifier (TTI) message expected";
+    }
+
+    leaf tti-msg-auto {
+      type boolean;
+      description
+        "Trail trace identifier (TTI) transmit message automatically
+        created.  If true, then setting a custom transmit message
+        would be invalid.";
+    }
+  }
+
+  grouping terminal-otn-protocol-counter-stats {
+    description
+      "Counter based statistics containers for logical channels
+      using OTN framing";
+
+    leaf errored-seconds {
+      type yang:counter64;
+      description
+        "The number of seconds that at least one errored blocks
+        occurs, at least one code violation occurs, loss of sync is
+        detected or loss of signal is detected";
+    }
+
+    leaf severely-errored-seconds {
+      type yang:counter64;
+      description
+        "The number of seconds that loss of frame is detected OR
+        the number of errored blocks, code violations, loss of sync
+        or loss of signal is detected exceeds a predefined
+        threshold";
+    }
+
+    leaf unavailable-seconds {
+      type yang:counter64;
+      description
+        "The number of seconds during which the link is unavailable";
+    }
+
+    leaf code-violations {
+      type yang:counter64;
+      description
+        "For ethernet or fiberchannel links, the number of 8b/10b
+        coding violations. For SONET/SDH, the number of BIP (bit
+        interleaved parity) errors";
+    }
+
+    leaf fec-uncorrectable-words {
+      type yang:counter64;
+      description
+        "The number words that were uncorrectable by the FEC";
+    }
+
+    leaf fec-corrected-bytes {
+      type yang:counter64;
+      description
+        "The number of bytes that were corrected by the FEC";
+    }
+
+    leaf fec-corrected-bits {
+      type yang:counter64;
+      description
+        "The number of bits that were corrected by the FEC";
+    }
+
+    leaf background-block-errors {
+      type yang:counter64;
+      description
+        "The number of background block errors";
+    }
+  }
+
+  grouping terminal-otn-protocol-multi-stats {
+    description
+      "Multi-value statistics containers for logical channels using
+      OTN framing (e.g., max, min, avg, instant)";
+
+    container pre-fec-ber {
+      description
+        "Bit error rate before forward error correction -- computed
+        value with 18 decimal precision. Note that decimal64
+        supports values as small as i x 10^-18 where i is an
+        integer. Values smaller than this should be reported as 0
+        to inidicate error free or near error free performance.
+        Values include the instantaneous, average, minimum, and
+        maximum statistics. If avg/min/max statistics are not
+        supported, the target is expected to just supply the
+        instant value";
+
+      uses oc-opt-types:avg-min-max-instant-stats-precision18-ber;
+    }
+
+    container post-fec-ber {
+      description
+        "Bit error rate after forward error correction -- computed
+        value with 18 decimal precision. Note that decimal64
+        supports values as small as i x 10^-18 where i is an
+        integer. Values smaller than this should be reported as 0
+        to inidicate error free or near error free performance.
+        Values include the instantaneous, average, minimum, and
+        maximum statistics. If avg/min/max statistics are not
+        supported, the target is expected to just supply the
+        instant value";
+
+      uses oc-opt-types:avg-min-max-instant-stats-precision18-ber;
+    }
+
+    container q-value {
+      description
+        "Quality value (factor) in dB of a channel with two
+        decimal precision. Values include the instantaneous,
+        average, minimum, and maximum statistics. If avg/min/max
+        statistics are not supported, the target is expected
+        to just supply the instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dB;
+    }
+
+    container esnr {
+      description
+        "Electrical signal to noise ratio. Baud rate
+        normalized signal to noise ratio based on
+        error vector magnitude in dB with two decimal
+        precision. Values include the instantaneous, average,
+        minimum, and maximum statistics. If avg/min/max
+        statistics are not supported, the target is expected
+        to just supply the instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dB;
+    }
+  }
+
+  grouping terminal-otn-protocol-state {
+    description
+      "OTU operational state when logical channel
+      framing is using an OTU protocol, e.g., OTU1, OTU3, etc.";
+
+
+      leaf tti-msg-recv {
+        type string;
+        description
+          "Trail trace identifier (TTI) message received";
+      }
+
+      leaf rdi-msg {
+        type string;
+        description
+          "Remote defect indication (RDI) message received";
+      }
+      uses terminal-otn-protocol-counter-stats;
+      uses terminal-otn-protocol-multi-stats;
+  }
+
+  grouping terminal-otn-protocol-top {
+    description
+      "Top-level grouping for data related to OTN protocol framing";
+
+    container otn {
+      description
+        "Top level container for OTU configuration when logical
+        channel framing is using an OTU protocol, e.g., OTU1, OTU3,
+        etc.";
+
+      container config {
+        description
+          "Configuration data for OTN protocol framing";
+
+        uses terminal-otn-protocol-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for OTN protocol PMs, statistics,
+          etc.";
+
+        uses terminal-otn-protocol-config;
+        uses terminal-otn-protocol-state;
+      }
+    }
+  }
+
+  grouping terminal-client-port-assignment-config {
+    description
+      "Configuration data for assigning physical client ports to
+      logical channels";
+
+    leaf index {
+      type uint32;
+      description
+        "Index of the client port assignment";
+    }
+
+    leaf description {
+      type string;
+      description
+        "Descriptive name for the client port-to-logical channel
+        mapping";
+    }
+
+    leaf logical-channel {
+      type leafref {
+        path "/oc-opt-term:terminal-device/oc-opt-term:logical-channels" +
+          "/oc-opt-term:channel/oc-opt-term:index";
+      }
+      description
+        "Reference to the logical channel for this
+        assignment";
+    }
+
+    leaf allocation {
+      type decimal64 {
+        fraction-digits 3;
+      }
+      units Gbps;
+      description
+        "Allocation of the client physical port to the assigned
+        logical channel expressed in Gbps.  In most cases,
+        the full client physical port rate is assigned to a single
+        logical channel.";
+    }
+
+  }
+
+  grouping terminal-client-port-assignment-state {
+    description
+      "Operational state data for assigning physical client ports
+      to logical channels";
+  }
+
+  grouping terminal-client-port-assignment-top {
+    description
+      "Top-level grouping for the assigment of client physical ports
+      to logical channels";
+    //TODO: this grouping could be removed, instead reusing a common
+    //grouping for logical client assignment pointers
+
+    container logical-channel-assignments {
+      description
+        "Enclosing container for client port to logical client
+        mappings";
+
+      list assignment {
+        key "index";
+        description
+          "List of assignments to logical clients";
+
+        leaf index {
+          type leafref {
+            path "../config/index";
+          }
+          description
+            "Reference to the index of this logical client
+            assignment";
+        }
+
+        container config {
+          description
+            "Configuration data for the logical client assignment";
+
+          uses terminal-client-port-assignment-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for the logical client
+            assignment";
+
+          uses terminal-client-port-assignment-config;
+          uses terminal-client-port-assignment-state;
+        }
+      }
+    }
+  }
+
+
+  grouping terminal-logical-chan-assignment-config {
+    description
+      "Configuration data for assigning client logical channels
+      to line-side tributaries";
+
+    leaf index {
+      type uint32;
+      description
+        "Index of the current logical client channel to tributary
+        mapping";
+    }
+
+    leaf description {
+      type string;
+      description
+        "Name assigned to the logical client channel";
+    }
+
+    leaf assignment-type {
+      type enumeration {
+        enum LOGICAL_CHANNEL {
+          description
+            "Subsequent channel is a logical channel";
+        }
+        enum OPTICAL_CHANNEL {
+          description
+            "Subsequent channel is a optical channel / carrier";
+        }
+      }
+      description
+        "Each logical channel element may be assigned to subsequent
+        stages of logical elements to implement further grooming, or
+        can be assigned to a line-side optical channel for
+        transmission.  Each assignment also has an associated
+        bandwidth allocation.";
+    }
+
+    leaf logical-channel {
+      type leafref {
+        path "/oc-opt-term:terminal-device/" +
+          "oc-opt-term:logical-channels/oc-opt-term:channel/" +
+          "oc-opt-term:index";
+      }
+      must "../assignment-type = 'LOGICAL_CHANNEL'" {
+        description
+          "The assignment-type must be set to LOGICAL_CHANNEL for
+          this leaf to be valid";
+      }
+      description
+         "Reference to another stage of logical channel elements.";
+    }
+
+    leaf optical-channel {
+      type leafref {
+        path "/oc-platform:components/oc-platform:component/" +
+          "oc-platform:name";
+      }
+      must "../assignment-type = 'OPTICAL_CHANNEL'" {
+        description
+          "The assignment-type must be set to OPTICAL_CHANNEL for
+          this leaf to be valid";
+      }
+      description
+        "Reference to the line-side optical channel that should
+        carry the current logical channel element.  Use this
+        reference to exit the logical element stage.";
+    }
+
+    leaf allocation {
+      type decimal64 {
+        fraction-digits 3;
+      }
+      units Gbps;
+      description
+        "Allocation of the logical client channel to the tributary
+        or sub-channel, expressed in Gbps";
+    }
+
+  }
+
+  grouping terminal-logical-chan-assignment-state {
+    description
+      "Operational state data for the assignment of logical client
+      channel to line-side tributary";
+  }
+
+  grouping terminal-logical-chan-assignment-top {
+    description
+      "Top-level grouping for the list of logical client channel-to-
+      tributary assignments";
+
+    container logical-channel-assignments {
+      //TODO: we need a commonly understood name for this logical
+      //channel structure
+      description
+        "Enclosing container for tributary assignments";
+
+      list assignment {
+        key "index";
+        description
+          "Logical channel elements may be assigned directly to
+          optical channels for line-side transmission, or can be
+          further groomed into additional stages of logical channel
+          elements.  The grooming can multiplex (i.e., split the
+          current element into multiple elements in the subsequent
+          stage) or de-multiplex (i.e., combine the current element
+          with other elements into the same element in the subsequent
+          stage) logical elements in each stage.
+          Note that to support the ability to groom the logical
+          elements, the list of logical channel elements should be
+          populated with an entry for the logical elements at
+          each stage, starting with the initial assignment from the
+          respective client physical port.
+          Each logical element assignment consists of a pointer to
+          an element in the next stage, or to an optical channel,
+          along with a bandwidth allocation for the corresponding
+          assignment (e.g., to split or combine signal).";
+
+        leaf index {
+          type leafref {
+            path "../config/index";
+          }
+          description
+            "Reference to the index for the current tributary
+            assignment";
+        }
+
+        container config {
+          description
+            "Configuration data for tributary assignments";
+
+          uses terminal-logical-chan-assignment-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for tributary assignments";
+
+          uses terminal-logical-chan-assignment-config;
+          uses terminal-logical-chan-assignment-state;
+        }
+      }
+    }
+  }
+
+  grouping terminal-logical-channel-ingress-config {
+    description
+      "Configuration data for ingress signal to logical channel";
+
+    leaf transceiver {
+      type leafref {
+        path "/oc-platform:components/oc-platform:component/" +
+        "oc-platform:name";
+      }
+      description
+        "Reference to the transceiver carrying the input signal
+        for the logical channel.  If specific physical channels
+        are mapped to the logical channel (as opposed to all
+        physical channels carried by the transceiver), they can be
+        specified in the list of physical channel references.";
+    }
+
+    leaf-list physical-channel {
+      type leafref {
+        path "/oc-platform:components/oc-platform:component/" +
+          "oc-transceiver:transceiver/" +
+          "oc-transceiver:physical-channels/" +
+          "oc-transceiver:channel/oc-transceiver:index";
+      }
+      description
+        "This list should be populated with references
+        to the client physical channels that feed this logical
+        channel from the transceiver specified in the 'transceiver'
+        leaf, which must be specified.  If this leaf-list is empty,
+        all physical channels in the transceiver are assumed to be
+        mapped to the logical channel.";
+    }
+  }
+
+  grouping terminal-logical-channel-ingress-state {
+    description
+      "Operational state data for ingress signal to logical channel";
+  }
+
+  grouping terminal-logical-channel-ingress-top {
+    description
+      "Top-level grouping for ingress signal to logical channel";
+
+    container ingress {
+      description
+        "Top-level container for specifying references to the
+        source of signal for the logical channel, either a
+        transceiver or individual physical channels";
+
+      container config {
+        description
+          "Configuration data for the signal source for the
+          logical channel";
+
+        uses terminal-logical-channel-ingress-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for the signal source for the
+          logical channel";
+
+        uses terminal-logical-channel-ingress-config;
+        uses terminal-logical-channel-ingress-state;
+      }
+    }
+  }
+
+  grouping terminal-logical-channel-config {
+    description
+      "Configuration data for logical channels";
+
+    leaf index {
+      type uint32;
+      description
+        "Index of the current logical channel";
+    }
+
+    leaf description {
+      type string;
+      description
+        "Description of the logical channel";
+    }
+
+    leaf admin-state {
+      type oc-opt-types:admin-state-type;
+      description
+          "Sets the admin state of the logical channel";
+    }
+
+    leaf rate-class {
+      type identityref {
+        base oc-opt-types:TRIBUTARY_RATE_CLASS_TYPE;
+      }
+      description
+        "Rounded bit rate of the tributary signal. Exact bit rate
+        will be refined by protocol selection.";
+    }
+
+    leaf trib-protocol {
+      type identityref {
+        base oc-opt-types:TRIBUTARY_PROTOCOL_TYPE;
+      }
+      description
+        "Protocol framing of the tributary signal. If this
+        LogicalChannel is directly connected to a Client-Port or
+        Optical-Channel, this is the protocol of the associated port.
+        If the LogicalChannel is connected to other LogicalChannels,
+        the TributaryProtocol of the LogicalChannels will define a
+        specific mapping/demapping or multiplexing/demultiplexing
+        function.
+        Not all protocols are valid, depending on the value
+        of trib-rate-class.  The expectation is that the NMS
+        will validate that a correct combination of rate class
+        and protocol are specfied.  Basic combinations are:
+        rate class: 1G
+        protocols: 1GE
+        rate class: 2.5G
+        protocols: OC48, STM16
+        rate class: 10G
+        protocols:  10GE LAN, 10GE WAN, OC192, STM64, OTU2, OTU2e,
+                    OTU1e, ODU2, ODU2e, ODU1e
+        rate class: 40G
+        protocols:  40GE, OC768, STM256, OTU3, ODU3
+        rate class: 100G
+        protocols:  100GE, 100G MLG, OTU4, OTUCn, ODU4";
+    }
+
+    leaf logical-channel-type {
+      type identityref {
+        base oc-opt-types:LOGICAL_ELEMENT_PROTOCOL_TYPE;
+      }
+      description
+        "The type / stage of the logical element determines the
+        configuration and operational state parameters (PMs)
+        available for the logical element";
+    }
+
+    leaf loopback-mode {
+      type oc-opt-types:loopback-mode-type;
+      description
+        "Sets the loopback type on the logical channel. Setting the
+        mode to something besides NONE activates the loopback in
+        the specified mode.";
+    }
+  }
+
+
+  grouping terminal-logical-channel-state {
+    description
+      "Operational state data for logical client channels";
+
+    leaf link-state {
+      type enumeration {
+        enum UP {
+          description
+            "Logical channel is operationally up";
+        }
+        enum DOWN {
+          description
+            "Logical channel is operationally down";
+        }
+      }
+      description
+        "Link-state of the Ethernet protocol on the logical channel,
+        SONET / SDH framed signal, etc.";
+    }
+
+  }
+
+  grouping terminal-logical-channel-top {
+    description
+      "Top-level grouping for logical channels";
+
+    container logical-channels {
+      description
+        "Enclosing container the list of logical channels";
+
+      list channel {
+        key "index";
+        description
+          "List of logical channels";
+        //TODO: naming for this list of logical elements should be
+        //revisited.
+
+        leaf index {
+          type string;
+          // type leafref {
+          //   path "../config/index";
+          // }
+          description
+            "Reference to the index of the logical channel";
+        }
+
+        container config {
+          description
+            "Configuration data for logical channels";
+
+          uses terminal-logical-channel-config;
+
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for logical channels";
+
+          uses terminal-logical-channel-config;
+          uses terminal-logical-channel-state;
+        }
+
+        uses terminal-otn-protocol-top {
+          when "config/logical-channel-type = 'PROT_OTN'" {
+            description
+              "Include the OTN protocol data only when the
+              channel is using OTN framing.";
+          }
+        }
+        uses terminal-ethernet-protocol-top {
+          when "config/logical-channel-type = 'oc-opt-types:PROT_ETHERNET'" {
+            description
+              "Include the Ethernet protocol statistics only when the
+              protocol used by the link is Ethernet.";
+          }
+        }
+        uses terminal-logical-channel-ingress-top;
+        uses terminal-logical-chan-assignment-top;
+      }
+    }
+  }
+
+
+  grouping terminal-optical-channel-config {
+    description
+      "Configuration data for describing optical channels";
+
+    leaf frequency {
+      type oc-opt-types:frequency-type;
+      description
+        "Frequency of the optical channel, expressed in MHz";
+    }
+
+    leaf target-output-power {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "Target output optical power level of the optical channel,
+        expressed in increments of 0.01 dBm (decibel-milliwats)";
+    }
+
+    leaf operational-mode {
+      type uint16;
+      description
+        "Vendor-specific mode identifier -- sets the operational
+        mode for the channel.  The specified operational mode must
+        exist in the list of supported operational modes supplied
+        by the device";
+      //
+      // Ideally, this leaf should be a leafref to the supported
+      // operational modes, but YANG 1.0 does not allow a r/w
+      // leaf to be a leafref to a r/o leaf.
+    }
+
+
+    leaf line-port {
+      type leafref {
+        path "/oc-platform:components/oc-platform:component/" +
+          "oc-platform:name";
+      }
+      description
+        "Reference to the line-side physical port that carries
+        this optical channel.  The target port should be
+        a component in the physical inventory data model.";
+    }
+  }
+
+  grouping terminal-optical-channel-state {
+    description
+      "Operational state data for optical channels";
+
+    leaf group-id {
+      type uint32;
+      description
+        "If the device places constraints on which optical
+        channels must be managed together (e.g., transmitted on the
+        same line port), it can indicate that by setting the group-id
+        to the same value across related optical channels.";
+    }
+
+    uses oc-transceiver:optical-power-state;
+
+    container chromatic-dispersion {
+      description
+        "Chromatic Dispersion of an optical channel in
+        picoseconds / nanometer (ps/nm) as reported by receiver
+        with two decimal precision. Values include the instantaneous,
+        average, minimum, and maximum statistics. If avg/min/max
+        statistics are not supported, the target is expected to just
+        supply the instant value";
+
+      uses oc-opt-types:avg-min-max-instant-stats-precision2-ps-nm;
+    }
+
+    container polarization-mode-dispersion {
+      description
+        "Polarization Mode Dispersion of an optical channel
+        in picosends (ps) as reported by receiver with two decimal
+        precision. Values include the instantaneous, average,
+        minimum, and maximum statistics. If avg/min/max statistics
+        are not supported, the target is expected to just supply the
+        instant value";
+
+      uses oc-opt-types:avg-min-max-instant-stats-precision2-ps;
+    }
+
+    container second-order-polarization-mode-dispersion {
+      description
+        "Second Order Polarization Mode Dispersion of an optical
+        channel in picoseconds squared (ps^2) as reported by
+        receiver with two decimal precision. Values include the
+        instantaneous, average, minimum, and maximum statistics.
+        If avg/min/max statistics are not supported, the target
+        is expected to just supply the instant value";
+
+      uses oc-opt-types:avg-min-max-instant-stats-precision2-ps2;
+    }
+
+    container polarization-dependent-loss {
+      description
+        "Polarization Dependent Loss of an optical channel
+        in dB as reported by receiver with two decimal precision.
+        Values include the instantaneous, average, minimum, and
+        maximum statistics. If avg/min/max statistics are not
+        supported, the target is expected to just supply the
+        instant value";
+
+      uses oc-types:avg-min-max-instant-stats-precision2-dB;
+    }
+  }
+
+  grouping terminal-optical-channel-top {
+    description
+      "Top-level grouping for optical channel data";
+
+    container optical-channel {
+      description
+        "Enclosing container for the list of optical channels";
+
+      container config {
+        description
+          "Configuration data for optical channels";
+
+        uses terminal-optical-channel-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for optical channels";
+
+        uses terminal-optical-channel-config;
+        uses terminal-optical-channel-state;
+      }
+    }
+  }
+
+  grouping terminal-operational-mode-config {
+    description
+      "Configuration data for vendor-supported operational modes";
+  }
+
+  grouping terminal-operational-mode-state {
+    description
+      "Operational state data for vendor-supported operational
+      modes";
+
+      leaf mode-id {
+        type uint16;
+        description
+          "Two-octet encoding of the vendor-defined operational
+          mode";
+      }
+
+      leaf description {
+        type string;
+        description
+          "Vendor-supplied textual description of the characteristics
+          of this operational mode to enable operators to select the
+          appropriate mode for the application.";
+      }
+
+      //TODO: examples of the kind of info that would be useful to
+      //report in the operational mode:
+      //Symbol rate (32G, 40G, 43G, 64G, etc.)
+      //Modulation (QPSK, 8-QAM, 16-QAM, etc.)
+      //Differential encoding (on, off/pilot symbol, etc)
+      //State of polarization tracking mode (default, med.
+      //high-speed, etc.)
+      //Pulse shaping (RRC, RC, roll-off factor)
+      //FEC mode (SD, HD, % OH)
+
+      leaf vendor-id {
+        type string;
+        description
+          "Identifier to represent the vendor / supplier of the
+          platform and the associated operational mode information";
+      }
+  }
+
+  grouping terminal-operational-mode-top {
+    description
+      "Top-level grouping for vendor-supported operational modes";
+
+    container operational-modes {
+      description
+        "Enclosing container for list of operational modes";
+
+      list mode {
+        key "mode-id";
+        config false;
+        description
+          "List of operational modes supported by the platform.
+          The operational mode provides a platform-defined summary
+          of information such as symbol rate, modulation, pulse
+          shaping, etc.";
+
+        leaf mode-id {
+          type leafref {
+            path "../state/mode-id";
+          }
+          description
+            "Reference to mode-id";
+        }
+
+        container config {
+          description
+            "Configuration data for operational mode";
+
+          uses terminal-operational-mode-config;
+        }
+
+        container state {
+
+          config false;
+
+          description
+            "Operational state data for the platform-defined
+            operational mode";
+
+          uses terminal-operational-mode-config;
+          uses terminal-operational-mode-state;
+        }
+      }
+    }
+  }
+
+
+  grouping terminal-device-config {
+    description
+      "Configuration data for transport terminal devices at a
+      device-wide level";
+  }
+
+  grouping terminal-device-state {
+    description
+      "Operational state data for transport terminal devices at a
+      device-wide level";
+  }
+
+  grouping terminal-device-top {
+    description
+      "Top-level grouping for data for terminal devices";
+
+    container terminal-device {
+      description
+        "Top-level container for the terminal device";
+
+      container config {
+        description
+          "Configuration data for global terminal-device";
+
+        uses terminal-device-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for global terminal device";
+
+        uses terminal-device-config;
+        uses terminal-device-state;
+      }
+
+      uses terminal-logical-channel-top;
+      uses terminal-operational-mode-top;
+
+    }
+  }
+
+  // data definition statements
+
+  uses terminal-device-top;
+
+  // augment statements
+
+/*  augment "/oc-platform:components/oc-platform:component" {
+    when "/oc-platform:components/oc-platform:component/" +
+      "oc-platform:state/oc-platform:type = 'OPTICAL_CHANNEL'" {
+      description
+        "Augment is active when component is of type
+        OPTICAL_CHANNEL";
+    }
+    description
+      "Adding optical channel data to physical inventory";
+
+    uses terminal-optical-channel-top {
+    }
+  }
+*/
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-transport-line-common@2016-03-31.yang b/models/openconfig-infinera/src/main/yang/openconfig-transport-line-common@2016-03-31.yang
new file mode 100644
index 0000000..5f03d55
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-transport-line-common@2016-03-31.yang
@@ -0,0 +1,233 @@
+module openconfig-transport-line-common {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/transport-line-common";
+
+  prefix "oc-line-com";
+
+  // import some basic types
+  import openconfig-platform {
+    prefix oc-platform;
+    revision-date "2016-06-06";
+  }
+  import openconfig-platform-types {
+    prefix oc-platform-types;
+    revision-date "2016-06-06";
+  }
+  import openconfig-interfaces {
+    prefix oc-if;
+    revision-date "2016-05-26";
+  }
+  import iana-if-type {
+    prefix ift;
+    revision-date "2016-11-23";
+  }
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+
+    // import tailf-common {prefix "tailf";}
+    // tailf:export netconf;
+    // tailf:export rest;
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module defines common data elements for OpenConfig data
+    models for optical transport line system elements, such as
+    amplifiers and ROADMs (wavelength routers).";
+
+  oc-ext:openconfig-version "0.1.0";
+
+  revision "2016-03-31" {
+    description
+      "Initial public release";
+    reference "0.1.0";
+  }
+
+
+  // extension statements
+
+  // feature statements
+
+  // identity statements
+
+  identity OPTICAL_LINE_PORT_TYPE {
+    description
+      "Type definition for optical node port types";
+  }
+
+  identity INGRESS {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Ingress port, corresponding to a signal entering
+      a line device such as an amplifier or wavelength
+      router.";
+  }
+
+  identity EGRESS {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Egress port, corresponding to a signal exiting
+      a line device wavelength router.";
+  }
+
+  identity ADD {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Add port, corresponding to a signal injected
+      at a wavelength router.";
+  }
+
+  identity DROP {
+    base OPTICAL_LINE_PORT_TYPE;
+    description
+      "Drop port, corresponding to a signal dropped
+      at a wavelength router.";
+  }
+
+  // typedef statements
+
+  // grouping statements
+
+   grouping optical-osc-config {
+    description
+      "Configuration data for OSC interfaces";
+
+    leaf-list interface {
+      type oc-if:base-interface-ref;
+      description
+        "List of references to OSC interfaces";
+    }
+  }
+
+  grouping optical-osc-state {
+    description
+      "Operational state data for OSC interfaces";
+  }
+
+
+
+  grouping optical-osc-top {
+    description
+      "Top-level grouping for configuration and operational state
+      data for optical supervisory channels (OSC) for amplifiers,
+      WSS/ROADM, nodes, etc.";
+
+    container supervisory-channels {
+      description
+        "Top-level container for OSC data";
+
+      container config {
+        description
+          "Configuration data for OSCs";
+
+        uses optical-osc-config;
+      }
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for OSCs";
+
+        uses optical-osc-config;
+        uses optical-osc-state;
+      }
+    }
+  }
+
+
+  grouping transport-line-common-port-config {
+    description
+      "Configuration data for optical line ports";
+  }
+
+  grouping transport-line-common-port-state {
+    description
+      "Operational state data describing optical line ports";
+
+    leaf optical-port-type {
+      type identityref {
+        base OPTICAL_LINE_PORT_TYPE;
+      }
+      description
+        "Indicates the type of transport line port.  This is an
+        informational field that should be made available by the
+        device (e.g., in the openconfig-platform model).";
+    }
+  }
+
+  grouping transport-line-common-port-top {
+    description
+      "Top-level grouping ";
+
+    container optical-port {
+      description
+        "Top-level container ";
+
+      container state {
+
+        config false;
+
+        description
+          "Operational state data for optical line ports";
+
+        uses transport-line-common-port-config;
+        uses transport-line-common-port-state;
+      }
+    }
+  }
+
+
+
+  // data definition statements
+
+  // uses optical-osc-top;
+
+  // augment statements
+/*
+  augment "/oc-platform:components/oc-platform:component" {
+    description
+      "Adding optical line port data to platform model";
+
+    uses transport-line-common-port-top {
+      when "/oc-platform:components/oc-platform:component/" +
+        "oc-platform:state/oc-platform:type = 'oc-platform-types:PORT'" {
+        description
+          "Augment is active when component is of type
+          PORT";
+      }
+    }
+  }
+*/
+  //TODO:this is placeholder until SONET model is added
+  //to interfaces model
+/*  augment "/oc-if:interfaces/oc-if:interface" {
+    when "oc-if:type = 'ift:sonet'" {
+      description "Additional interface configuration parameters when
+      the interface type is SONET/SDH";
+    }
+    description "Adds additional SONET/SDH-specific data to
+    osc model";
+
+    container sonet {
+      description
+        "Data related to SONET/SDH interfaces";
+    }
+  }
+*/
+  // rpc statements
+
+  // notification statements
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-transport-types@2016-12-22.yang b/models/openconfig-infinera/src/main/yang/openconfig-transport-types@2016-12-22.yang
new file mode 100644
index 0000000..1b15e68
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-transport-types@2016-12-22.yang
@@ -0,0 +1,765 @@
+module openconfig-transport-types {
+
+  yang-version "1";
+
+  // namespace
+  namespace "http://openconfig.net/yang/transport-types";
+
+  prefix "oc-opt-types";
+
+  import openconfig-platform-types {
+    prefix oc-platform-types;
+    revision-date "2016-06-06";
+  }
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+
+  // meta
+  organization "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    www.openconfig.net";
+
+  description
+    "This module contains general type definitions and identities
+    for optical transport models.";
+
+  oc-ext:openconfig-version "0.4.0";
+
+  revision "2016-12-22" {
+    description
+      "Fixes and additions for terminal optics model";
+    reference "0.4.0";
+  }
+
+  // typedef statements
+
+  typedef frequency-type {
+    type uint64;
+    units "MHz";
+    description
+      "Type for optical spectrum frequency values";
+  }
+
+  typedef admin-state-type {
+    type enumeration {
+      enum ENABLED {
+        description
+        "Sets the channel admin state to enabled";
+      }
+      enum DISABLED {
+        description
+        "Sets the channel admin state to disabled";
+      }
+      enum MAINT {
+        description
+        "Sets the channel to maintenance / diagnostic mode";
+      }
+    }
+    description "Administrative state modes for
+    logical channels in the transponder model.";
+  }
+
+  typedef loopback-mode-type {
+    type enumeration {
+      enum NONE {
+        description
+          "No loopback is applied";
+      }
+      enum FACILITY {
+        description
+          "A loopback which directs traffic normally transmitted
+          on the port back to the device as if received on the same
+          port from an external source.";
+      }
+      enum TERMINAL {
+        description
+          "A loopback which directs traffic received from an external
+          source on the port back out the transmit side of the same
+          port.";
+      }
+    }
+    default NONE;
+    description
+      "Loopback modes for transponder logical channels";
+  }
+
+  // grouping statements
+
+  grouping avg-min-max-instant-stats-precision2-ps-nm {
+    description
+      "Common grouping for recording picosecond per nanometer
+      values with 2 decimal precision. Values include the
+      instantaneous, average, minimum, and maximum statistics";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps-nm;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps-nm;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps-nm;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps-nm;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+  }
+
+  grouping avg-min-max-instant-stats-precision2-ps {
+    description
+      "Common grouping for recording picosecond values with
+      2 decimal precision. Values include the instantaneous,
+      average, minimum, and maximum statistics";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+  }
+
+  grouping avg-min-max-instant-stats-precision2-ps2 {
+    description
+      "Common grouping for recording picosecond^2 values with
+      2 decimal precision. Values include the instantaneous,
+      average, minimum, and maximum statistics";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps^2;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps^2;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps^2;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units ps^2;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+  }
+
+  grouping avg-min-max-instant-stats-precision18-ber {
+    description
+      "Common grouping for recording bit error rate (BER) values
+      with 18 decimal precision. Note that decimal64 supports
+      values as small as i x 10^-18 where i is an integer. Values
+      smaller than this should be reported as 0 to inidicate error
+      free or near error free performance. Values include the
+      instantaneous, average, minimum, and maximum statistics";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 18;
+      }
+      units bit-errors-per-second;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 18;
+      }
+      units bit-errors-per-second;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 18;
+      }
+      units bit-errors-per-second;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 18;
+      }
+      units bit-errors-per-second;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+  }
+
+  // identity statements
+
+  identity TRIBUTARY_PROTOCOL_TYPE {
+    description
+      "Base identity for protocol framing used by tributary
+      signals.";
+  }
+
+  identity PROT_1GE {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "1G Ethernet protocol";
+  }
+
+  identity PROT_OC48 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OC48 protocol";
+  }
+
+  identity PROT_STM16 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "STM 16 protocol";
+  }
+
+  identity PROT_10GE_LAN {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "10G Ethernet LAN protocol";
+  }
+
+  identity PROT_10GE_WAN {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "10G Ethernet WAN protocol";
+  }
+
+  identity PROT_OC192 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OC 192 (9.6GB) port protocol";
+  }
+
+  identity PROT_STM64 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "STM 64 protocol";
+  }
+
+  identity PROT_OTU2 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU 2 protocol";
+  }
+
+  identity PROT_OTU2E {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU 2e protocol";
+  }
+
+  identity PROT_OTU1E {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU 1e protocol";
+  }
+
+  identity PROT_ODU2 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU 2 protocol";
+  }
+
+  identity PROT_ODU2E {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU 2e protocol";
+  }
+
+  identity PROT_40GE {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "40G Ethernet port protocol";
+  }
+
+  identity PROT_OC768 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OC 768 protocol";
+  }
+
+  identity PROT_STM256 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "STM 256 protocol";
+  }
+
+  identity PROT_OTU3 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU 3 protocol";
+  }
+
+  identity PROT_ODU3 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU 3 protocol";
+  }
+
+  identity PROT_100GE {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "100G Ethernet protocol";
+  }
+
+  identity PROT_100G_MLG {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "100G MLG protocol";
+  }
+
+  identity PROT_OTU4 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU4 signal protocol (112G) for transporting
+    100GE signal";
+  }
+
+  identity PROT_OTUCN {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "OTU Cn protocol";
+  }
+
+  identity PROT_ODU4 {
+    base TRIBUTARY_PROTOCOL_TYPE;
+    description "ODU 4 protocol";
+  }
+
+  identity TRANSCEIVER_FORM_FACTOR_TYPE {
+    description
+      "Base identity for identifying the type of pluggable optic
+      transceiver (i.e,. form factor) used in a port.";
+  }
+
+  identity CFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "C form-factor pluggable, that can support up to a
+      100 Gb/s signal with 10x10G or 4x25G physical channels";
+  }
+
+  identity CFP2 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "1/2 C form-factor pluggable, that can support up to a
+      200 Gb/s signal with 10x10G, 4x25G, or 8x25G physical
+      channels";
+  }
+
+  identity CFP2_ACO {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "CFP2 analog coherent optics transceiver, supporting
+      100 Gb, 200Gb, and 250 Gb/s signal.";
+  }
+
+  identity CFP4 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "1/4 C form-factor pluggable, that can support up to a
+      100 Gb/s signal with 10x10G or 4x25G physical channels";
+  }
+
+  identity QSFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "OriginalQuad Small Form-factor Pluggable transceiver that can
+      support 4x1G physical channels.  Not commonly used.";
+  }
+
+  identity QSFP_PLUS {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Quad Small Form-factor Pluggable transceiver that can support
+      up to 4x10G physical channels.";
+  }
+
+  identity QSFP28 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "QSFP pluggable optic with support for up to 4x28G physical
+      channels";
+  }
+
+  identity CPAK {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Cisco CPAK transceiver supporting 100 Gb/s.";
+  }
+
+  identity SFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Small form-factor pluggable transceiver supporting up to
+      10 Gb/s signal";
+  }
+
+  identity SFP_PLUS {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Enhanced small form-factor pluggable transceiver supporting
+      up to 16 Gb/s signals, including 10 GbE and OTU2";
+  }
+
+  identity XFP {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "10 Gigabit small form factor pluggable transceiver supporting
+      10 GbE and OTU2";
+  }
+
+  identity X2 {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "10 Gigabit small form factor pluggable transceiver supporting
+      10 GbE using a XAUI inerface and 4 data channels.";
+  }
+
+  identity NON_PLUGGABLE {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Represents a port that does not require a pluggable optic,
+      e.g., with on-board optics like COBO";
+  }
+
+  identity OTHER {
+    base TRANSCEIVER_FORM_FACTOR_TYPE;
+    description
+      "Represents a transceiver form factor not otherwise listed";
+  }
+
+  identity FIBER_CONNECTOR_TYPE {
+    description
+      "Type of optical fiber connector";
+  }
+
+  identity SC_CONNECTOR {
+    base FIBER_CONNECTOR_TYPE;
+    description
+      "SC type fiber connector";
+  }
+
+  identity LC_CONNECTOR {
+    base FIBER_CONNECTOR_TYPE;
+    description
+      "LC type fiber connector";
+  }
+
+  identity MPO_CONNECTOR {
+    base FIBER_CONNECTOR_TYPE;
+    description
+      "MPO (multi-fiber push-on/pull-off) type fiber connector
+      1x12 fibers";
+  }
+
+  identity ETHERNET_PMD_TYPE {
+    description
+      "Ethernet compliance codes (PMD) supported by transceivers";
+  }
+
+  identity ETH_10GBASE_LRM {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_LRM";
+  }
+
+  identity ETH_10GBASE_LR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_LR";
+  }
+
+  identity ETH_10GBASE_ZR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_ZR";
+  }
+
+  identity ETH_10GBASE_ER {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_ER";
+  }
+
+  identity ETH_10GBASE_SR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 10GBASE_SR";
+  }
+
+  identity ETH_40GBASE_CR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_CR4";
+  }
+
+  identity ETH_40GBASE_SR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_SR4";
+  }
+
+  identity ETH_40GBASE_LR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_LR4";
+  }
+
+  identity ETH_40GBASE_ER4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_ER4";
+  }
+
+  identity ETH_40GBASE_PSM4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 40GBASE_PSM4";
+  }
+
+  identity ETH_4X10GBASE_LR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 4x10GBASE_LR";
+  }
+
+  identity ETH_4X10GBASE_SR {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 4x10GBASE_SR";
+  }
+
+  identity ETH_100G_AOC {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100G_AOC";
+  }
+
+  identity ETH_100G_ACC {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100G_ACC";
+  }
+
+  identity ETH_100GBASE_SR10 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_SR10";
+  }
+
+  identity ETH_100GBASE_SR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_SR4";
+  }
+
+  identity ETH_100GBASE_LR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_LR4";
+  }
+
+  identity ETH_100GBASE_ER4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_ER4";
+  }
+
+  identity ETH_100GBASE_CWDM4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_CWDM4";
+  }
+
+  identity ETH_100GBASE_CLR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_CLR4";
+  }
+
+  identity ETH_100GBASE_PSM4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_PSM4";
+  }
+
+  identity ETH_100GBASE_CR4 {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: 100GBASE_CR4";
+  }
+
+  identity ETH_UNDEFINED {
+    base ETHERNET_PMD_TYPE;
+    description "Ethernet compliance code: undefined";
+  }
+
+  identity SONET_APPLICATION_CODE {
+    description
+      "Supported SONET/SDH application codes";
+  }
+
+  identity VSR2000_3R2 {
+    base SONET_APPLICATION_CODE;
+    description
+      "SONET/SDH application code: VSR2000_3R2";
+  }
+
+  identity VSR2000_3R3 {
+    base SONET_APPLICATION_CODE;
+    description
+      "SONET/SDH application code: VSR2000_3R3";
+  }
+
+  identity VSR2000_3R5 {
+    base SONET_APPLICATION_CODE;
+    description
+      "SONET/SDH application code: VSR2000_3R5";
+  }
+
+  identity SONET_UNDEFINED {
+    base SONET_APPLICATION_CODE;
+    description
+      "SONET/SDH application code: undefined";
+  }
+
+  identity OTN_APPLICATION_CODE {
+    description
+      "Supported OTN application codes";
+  }
+
+  identity P1L1_2D1 {
+    base OTN_APPLICATION_CODE;
+    description
+      "OTN application code: P1L1_2D1";
+  }
+
+  identity P1S1_2D2 {
+    base OTN_APPLICATION_CODE;
+    description
+      "OTN application code: P1S1_2D2";
+  }
+
+  identity P1L1_2D2 {
+    base OTN_APPLICATION_CODE;
+    description
+      "OTN application code: P1L1_2D2";
+  }
+
+  identity OTN_UNDEFINED {
+    base OTN_APPLICATION_CODE;
+    description
+      "OTN application code: undefined";
+  }
+
+  identity TRIBUTARY_RATE_CLASS_TYPE {
+    description
+      "Rate of tributary signal _- identities will typically reflect
+      rounded bit rate.";
+  }
+
+  identity TRIB_RATE_1G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "1G tributary signal rate";
+  }
+
+  identity TRIB_RATE_2.5G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "2.5G tributary signal rate";
+  }
+
+  identity TRIB_RATE_10G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "10G tributary signal rate";
+  }
+
+  identity TRIB_RATE_40G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "40G tributary signal rate";
+  }
+
+  identity TRIB_RATE_100G {
+    base TRIBUTARY_RATE_CLASS_TYPE;
+    description
+      "100G tributary signal rate";
+  }
+
+  identity LOGICAL_ELEMENT_PROTOCOL_TYPE {
+    description
+      "Type of protocol framing used on the logical channel or
+      tributary";
+  }
+
+  identity PROT_ETHERNET {
+    base LOGICAL_ELEMENT_PROTOCOL_TYPE;
+    description
+      "Ethernet protocol framing";
+  }
+
+  identity PROT_OTN {
+    base LOGICAL_ELEMENT_PROTOCOL_TYPE;
+    description
+      "OTN protocol framing";
+  }
+
+  identity OPTICAL_CHANNEL {
+    base oc-platform-types:OPENCONFIG_HARDWARE_COMPONENT;
+    description
+      "Optical channels act as carriers for transport traffic
+      directed over a line system.  They are represented as
+      physical components in the physical inventory model.";
+  }
+
+}
diff --git a/models/openconfig-infinera/src/main/yang/openconfig-types@2017-01-13.yang b/models/openconfig-infinera/src/main/yang/openconfig-types@2017-01-13.yang
new file mode 100644
index 0000000..4bc2535
--- /dev/null
+++ b/models/openconfig-infinera/src/main/yang/openconfig-types@2017-01-13.yang
@@ -0,0 +1,328 @@
+module openconfig-types {
+  yang-version "1";
+
+  namespace "http://openconfig.net/yang/openconfig-types";
+
+  prefix "oc-types";
+
+  // import statements
+  import openconfig-extensions {
+    prefix oc-ext;
+    revision-date "2015-10-09";
+  }
+
+  // meta
+  organization
+    "OpenConfig working group";
+
+  contact
+    "OpenConfig working group
+    netopenconfig@googlegroups.com";
+
+  description
+    "This module contains a set of general type definitions that
+    are used across OpenConfig models. It can be imported by modules
+    that make use of these types.";
+
+  oc-ext:openconfig-version "0.3.2";
+
+  revision "2017-01-13" {
+    description
+      "Add ADDRESS_FAMILY identity";
+    reference "0.3.2";
+  }
+
+  revision "2016-11-14" {
+    description
+      "Correct length of ieeefloat32";
+    reference "0.3.1";
+  }
+
+  revision "2016-11-11" {
+    description
+      "Additional types - ieeefloat32 and routing-password";
+    reference "0.3.0";
+  }
+
+  revision "2016-05-31" {
+    description
+      "OpenConfig public release";
+    reference "0.2.0";
+  }
+
+  typedef percentage {
+    type uint8 {
+      range "0..100";
+    }
+    description
+      "Integer indicating a percentage value";
+  }
+
+  typedef std-regexp {
+    type string;
+    description
+      "This type definition is a placeholder for a standard
+      definition of a regular expression that can be utilised in
+      OpenConfig models. Further discussion is required to
+      consider the type of regular expressions that are to be
+      supported. An initial proposal is POSIX compatible.";
+  }
+
+  typedef timeticks64 {
+    type uint64;
+    description
+     "This type is based on the timeticks type defined in
+     RFC 6991, but with 64-bit width.  It represents the time,
+     modulo 2^64, in hundredths of a second between two epochs.";
+    reference
+      "RFC 6991 - Common YANG Data Types";
+  }
+
+  typedef ieeefloat32 {
+    type binary {
+      length "32";
+    }
+    description
+      "An IEEE 32-bit floating point number. The format of this number
+      is of the form:
+        1-bit  sign
+        8-bit  exponent
+        24-bit fraction
+      The floating point value is calculated using:
+        (-1)**S * 2**(Exponent-127) * (1+Fraction)";
+  }
+
+  typedef routing-password {
+    type string;
+    description
+      "This type is indicative of a password that is used within
+      a routing protocol which can be returned in plain text to the
+      NMS by the local system. Such passwords are typically stored
+      as encrypted strings. Since the encryption used is generally
+      well known, it is possible to extract the original value from
+      the string - and hence this format is not considered secure.
+      Leaves specified with this type should not be modified by
+      the system, and should be returned to the end-user in plain
+      text. This type exists to differentiate passwords, which
+      may be sensitive, from other string leaves. It could, for
+      example, be used by the NMS to censor this data when
+      viewed by particular users.";
+  }
+
+  grouping avg-min-max-stats-precision1 {
+    description
+      "Common nodes for recording average, minimum, and
+      maximum values for a statistic.  These values all have
+      fraction-digits set to 1.";
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      description
+        "The maximum value of the statitic over the sampling
+        period";
+    }
+  }
+
+  grouping avg-min-max-instant-stats-precision1 {
+    description
+      "Common grouping for recording an instantaneous statistic value
+      in addition to avg-min-max stats";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 1;
+      }
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    uses avg-min-max-stats-precision1;
+  }
+
+  grouping avg-min-max-instant-stats-precision2-dB {
+    description
+      "Common grouping for recording dB values with 2 decimal
+      precision. Values include the instantaneous, average,
+      minimum, and maximum statistics";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dB;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+  }
+
+  grouping avg-min-max-instant-stats-precision2-dBm {
+    description
+      "Common grouping for recording dBm values with 2 decimal
+      precision. Values include the instantaneous, average,
+      minimum, and maximum statistics";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units dBm;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+  }
+
+  grouping avg-min-max-instant-stats-precision2-mA {
+    description
+      "Common grouping for recording mA values with 2 decimal
+      precision. Values include the instantaneous, average,
+      minimum, and maximum statistics";
+
+    leaf instant {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units mA;
+      description
+        "The instantaneous value of the statistic.";
+    }
+
+    leaf avg {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units mA;
+      description
+        "The arithmetic mean value of the statistic over the
+        sampling period.";
+    }
+
+    leaf min {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units mA;
+      description
+        "The minimum value of the statistic over the sampling
+        period";
+    }
+
+    leaf max {
+      type decimal64 {
+        fraction-digits 2;
+      }
+      units mA;
+      description
+        "The maximum value of the statistic over the sampling
+        period";
+    }
+  }
+
+  identity ADDRESS_FAMILY {
+    description
+      "A base identity for all address families";
+  }
+
+  identity IPV4 {
+    base ADDRESS_FAMILY;
+    description
+      "The IPv4 address family";
+  }
+
+  identity IPV6 {
+    base ADDRESS_FAMILY;
+    description
+      "The IPv6 address family";
+  }
+
+  identity MPLS {
+    base ADDRESS_FAMILY;
+    description
+      "The MPLS address family";
+  }
+
+  identity L2_ETHERNET {
+    base ADDRESS_FAMILY;
+    description
+      "The 802.3 Ethernet address family";
+  }
+}
diff --git a/models/pom.xml b/models/pom.xml
index 5b56d95..363914c 100644
--- a/models/pom.xml
+++ b/models/pom.xml
@@ -34,6 +34,7 @@
         <module>common</module>
         <module>microsemi</module>
         <module>openconfig</module>
+        <module>openconfig-infinera</module>
         <module>openroadm</module>
         <module>l3vpn</module>
         <module>tapi</module>