diff --git a/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang b/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang
new file mode 100644
index 0000000..2171a5a
--- /dev/null
+++ b/apps/l3vpn/yangmodel/src/main/yang/ietf-interfaces@2014-05-08.yang
@@ -0,0 +1,704 @@
+module ietf-interfaces {
+
+     namespace "urn:ietf:params:xml:ns:yang:ietf-interfaces";
+     prefix if;
+
+     import ietf-yang-types {
+       prefix yang;
+     }
+
+     organization
+       "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
+
+     contact
+       "WG Web:   <http://tools.ietf.org/wg/netmod/>
+        WG List:  <mailto:netmod@ietf.org>
+
+        WG Chair: Thomas Nadeau
+                  <mailto:tnadeau@lucidvision.com>
+
+        WG Chair: Juergen Schoenwaelder
+                  <mailto:j.schoenwaelder@jacobs-university.de>
+
+        Editor:   Martin Bjorklund
+                  <mailto:mbj@tail-f.com>";
+
+     description
+       "This module contains a collection of YANG definitions for
+        managing network interfaces.
+
+        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).
+
+        This version of this YANG module is part of RFC 7223; see
+        the RFC itself for full legal notices.";
+     revision 2014-05-08 {
+       description
+         "Initial revision.";
+       reference
+         "RFC 7223: A YANG Data Model for Interface Management";
+     }
+
+     /*
+      * Typedefs
+      */
+
+     typedef interface-ref {
+       type leafref {
+         path "/if:devices/if:device/if:interfaces/if:interface/if:name";
+       }
+       description
+         "This type is used by data models that need to reference
+          configured interfaces.";
+     }
+
+     typedef interface-state-ref {
+       type leafref {
+         path "/if:devices/if:device/if:interfaces-state/if:interface/if:name";
+       }
+       description
+         "This type is used by data models that need to reference
+          the operationally present interfaces.";
+     }
+
+     /*
+      * Identities
+      */
+
+     identity interface-type {
+       description
+         "Base identity from which specific interface types are
+          derived.";
+     }
+
+     /*
+      * Features
+      */
+
+     feature arbitrary-names {
+       description
+         "This feature indicates that the device allows user-controlled
+          interfaces to be named arbitrarily.";
+     }
+     feature pre-provisioning {
+       description
+         "This feature indicates that the device supports
+          pre-provisioning of interface configuration, i.e., it is
+          possible to configure an interface whose physical interface
+          hardware is not present on the device.";
+     }
+
+     feature if-mib {
+       description
+         "This feature indicates that the device implements
+          the IF-MIB.";
+       reference
+         "RFC 2863: The Interfaces Group MIB";
+     }
+
+     /*
+      * Configuration data nodes
+      */
+     container devices {
+         list device {
+             key deviceid;
+             leaf deviceid {
+                 type string;
+             }
+             container interfaces {
+                 description
+                     "Interface configuration parameters.";
+
+                 list interface {
+                     key "name";
+
+                     description
+                         "The list of configured interfaces on the device.
+                         The operational state of an interface is available
+                         in the /interfaces-state/interface list.  If the
+                         configuration of a system-controlled interface
+                         cannot be used by the system (e.g., the interface
+                         hardware present does not match the interface type),
+                         then the configuration is not applied to the
+                         system-controlled interface shown in the of a
+                         /interfaces-state/interface list.  If the configuration
+                         user-controlled interface cannot be used by the system,
+                         the configured interface is not instantiated in the
+                         /interfaces-state/interface list.";
+
+                     leaf name {
+                         type string;
+                         description
+                             "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-state/interface 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 /interfaces-state/interface 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.
+
+                             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 /interface-state/interface
+                             list.";
+                     }
+
+                     leaf description {
+                         type string;
+                         description
+                             "A textual description of the interface.
+
+                             A server implementation MAY map this leaf to the
+                             ifAlias MIB object.  Such an implementation
+                             needs touse some mechanism to handle the
+                             differences in sizeand 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 type {
+                         type identityref {
+                             base interface-type;
+                         }
+                         mandatory true;
+                         description
+                             "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 enabled {
+                         type boolean;
+                         default "true";
+                         description
+                             "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";
+                     }
+
+                     leaf link-up-down-trap-enable {
+                         if-feature if-mib;
+                         type enumeration {
+                             enum enabled {
+                                 value 1;
+                             }
+                             enum disabled {
+                                 value 2;
+                             }
+                         }
+                         description
+                             "Controls whether linkUp/linkDown SNMP
+                             notifications should be generated for this
+                             interface.
+
+                             If this node is not configured, the value 'enabled'
+                             is operationally used by the server for
+                             interfaces that do not operate on top of any
+                             other interface (i.e., there are no
+                             'lower-layer-if' entries), and 'disabled'
+                             otherwise.";
+                         reference
+                             "RFC 2863: The Interfaces Group MIB -
+                             ifLinkUpDownTrapEnable";
+                     }
+                 }
+             }
+             /*
+              * Operational state data nodes
+              */
+
+             container interfaces-state {
+               config false;
+               description
+                 "Data nodes for the operational state of interfaces.";
+
+               list interface {
+                 key "name";
+                 description
+                   "The list of interfaces on the device.
+
+                    System-controlled interfaces created by the system are
+                    always present in this list, whether they are configured or
+                    not.";
+
+                 leaf name {
+                   type string;
+                   description
+                     "The name of the interface.
+
+                      A server implementation MAY map this leaf to the ifName
+                      MIB object.  Such an implementation needs to use some
+                      mechanism to handle the differences in size and characters
+                      allowed between this leaf and ifName.  The definition of
+                      such a mechanism is outside the scope of this document.";
+                   reference
+                     "RFC 2863: The Interfaces Group MIB - ifName";
+                 }
+
+                 leaf type {
+                   type identityref {
+                     base interface-type;
+                   }
+                   mandatory true;
+                   description
+                     "The type of the interface.";
+                   reference
+                     "RFC 2863: The Interfaces Group MIB - ifType";
+                 }
+
+                 leaf admin-status {
+                   if-feature if-mib;
+                   type enumeration {
+                     enum up {
+                       value 1;
+                       description
+                         "Ready to pass packets.";
+                     }
+                     enum down {
+                       value 2;
+                       description
+                         "Not ready to pass packets and not in some test mode.";
+                     }
+                     enum testing {
+                       value 3;
+                       description
+                         "In some test mode.";
+                     }
+                   }
+                   mandatory true;
+                   description
+                     "The desired state of the interface.
+
+                      This leaf has the same read semantics as ifAdminStatus.";
+                   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).";
+                     }
+                   }
+                   mandatory true;
+                   description
+                     "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:date-and-time;
+                   description
+                     "The time the interface entered its current operational
+                      state.  If the current state was entered prior to the
+                      last re-initialization of the local network management
+                      subsystem, then this node is not present.";
+                   reference
+                     "RFC 2863: The Interfaces Group MIB - ifLastChange";
+                 }
+
+                 leaf if-index {
+                   if-feature if-mib;
+                   type int32 {
+                     range "1..2147483647";
+                   }
+                   mandatory true;
+                   description
+                     "The ifIndex value for the ifEntry represented by this
+                      interface.";
+                   reference
+                     "RFC 2863: The Interfaces Group MIB - ifIndex";
+                 }
+
+                 leaf phys-address {
+                   type yang:phys-address;
+                   description
+                     "The interface's address at its protocol sub-layer.  For
+                      example, for an 802.x interface, this object normally
+                      contains a Media Access Control (MAC) address.  The
+                      interface's media-specific modules must define the bit
+
+                      and byte ordering and the format of the value of this
+                      object.  For interfaces that do not have such an address
+                      (e.g., a serial line), this node is not present.";
+                   reference
+                     "RFC 2863: The Interfaces Group MIB - ifPhysAddress";
+                 }
+
+                 leaf-list higher-layer-if {
+                   type interface-state-ref;
+                   description
+                     "A list of references to interfaces layered on top of this
+                      interface.";
+                   reference
+                     "RFC 2863: The Interfaces Group MIB - ifStackTable";
+                 }
+
+                 leaf-list lower-layer-if {
+                   type interface-state-ref;
+                   description
+                     "A list of references to interfaces layered underneath this
+                      interface.";
+                   reference
+                     "RFC 2863: The Interfaces Group MIB - ifStackTable";
+                 }
+
+                 leaf speed {
+                   type yang:gauge64;
+                   units "bits/second";
+                   description
+                       "An estimate of the interface's current bandwidth in bits
+                        per second.  For interfaces that do not vary in
+                        bandwidth or for those where no accurate estimation can
+                        be made, this node should contain the nominal bandwidth.
+                        For interfaces that have no concept of bandwidth, this
+                        node is not present.";
+                   reference
+                     "RFC 2863: The Interfaces Group MIB -
+                                ifSpeed, ifHighSpeed";
+                 }
+                 container statistics {
+                   description
+                     "A collection of interface-related statistics objects.";
+
+                   leaf discontinuity-time {
+                     type yang:date-and-time;
+                     mandatory true;
+                     description
+                       "The time on the most recent occasion at which any one or
+                        more of this interface's counters suffered a
+                        discontinuity.  If no such discontinuities have occurred
+                        since the last re-initialization of the local management
+                        subsystem, then this node contains the time the local
+                        management subsystem re-initialized itself.";
+                   }
+
+                   leaf in-octets {
+                     type yang:counter64;
+                     description
+                       "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
+                       "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
+                       "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
+                       "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:counter32;
+                     description
+                       "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:counter32;
+                     description
+                       "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
+                       "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
+                       "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
+                       "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
+                       "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
+                       "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:counter32;
+                     description
+                       "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:counter32;
+                     description
+                       "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";
+                   }
+                 }
+               }
+             }
+         }
+     }
+   }
\ No newline at end of file
