--- /dev/null
+
+module odl-interface {
+ namespace "urn:opendaylight:vpnservice:interfacemgr";
+
+ prefix "odlif";
+
+ import ietf-interfaces {
+ prefix if;
+ }
+ import iana-if-type {
+ prefix ianaift;
+ }
+
+ import ietf-inet-types {
+ prefix inet;
+ }
+ revision "2015-03-31" {
+ description "ODL Interface Manager Module";
+ }
+
+ identity stacked-vlan {
+ base if:interface-type;
+ reference
+ "Q-in-Q interface";
+ }
+
+ identity l3tunnel {
+ base if:interface-type;
+ reference
+ "l3 tunnel interface";
+ }
+
+ identity mpls {
+ base if:interface-type;
+ reference
+ "MPLS interface";
+ }
+
+ /* l3Tunnel (GRE, VxLAN) logical port */
+ identity tunnel-type-base {
+ description "Base identity for all tunnel-types";
+ }
+
+ identity tunnel-type-vxlan {
+ description "Tunnel type for vxlan tunnels";
+ base tunnel-type-base;
+ }
+
+ identity tunnel-type-gre {
+ description "Tunnel type for gre tunnels";
+ base tunnel-type-base;
+ }
+
+ /* base/common properties */
+ augment "/if:interfaces/if:interface" {
+ leaf of-port-id {
+ type string;
+ description "can be a physical switch port or virtual switch port e.g. neutron port";
+ }
+ leaf tenant-id {
+ type string;
+ description "Tenant that owns particular interface";
+ } /* optional */
+ leaf base-interface {
+ type if:interface-ref;
+ description "some interfaces need a reference to parent interface ";
+ }
+ }
+
+ /* interface type specific properties */
+
+ /* VLAN logical port */
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:l2vlan'";
+ leaf vlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ must "../base-interface" {
+ description
+ "If a vlan-id is defined, a base-interface must
+ be specified.";
+ }
+ }
+ }
+
+ /* Q-in-Q logical port */
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'stacked_vlan'";
+ leaf stacked_vlan-id {
+ type uint16 {
+ range "1..4094";
+ }
+ must "../base-interface" {
+ description
+ "If a vlan-id is defined, a base-interface must
+ be specified.";
+ }
+ }
+ }
+
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'ianaift:l3tunnel'";
+
+ leaf tunnel-type {
+ type identityref {
+ base tunnel-type-base;
+ }
+ }
+ leaf local-ip {
+ type inet:ip-address;
+ description "Local Endpoint IP address";
+ }
+
+ leaf remote-ip {
+ type inet:ip-address;
+ description "Remote Endpoint IP address";
+ }
+
+ leaf gateway-ip {
+ type inet:ip-address;
+ description "gateway IP address";
+ }
+
+ }
+
+
+ /* MPLS logical port */
+ augment "/if:interfaces/if:interface" {
+ when "if:type = 'mpls'";
+ leaf-list labelStack {
+ type uint32 {
+ range "15..1048575";
+ }
+ }
+ leaf numLabels{
+ type uint8 {
+ range "1..7";
+ }
+ }
+ }
+
+}
+