module vpp-nsh { yang-version 1; namespace "urn:opendaylight:params:xml:ns:yang:vpp:nsh"; prefix "vpp-nsh"; revision "2016-06-24" { description "Initial revision of vpp-nsh model"; } import iana-if-type { prefix "ianaift"; } import ietf-interfaces { prefix "if"; } import ietf-yang-types { prefix "yang"; } import ietf-inet-types { prefix "inet"; } import yang-ext { prefix "ext"; } import v3po { prefix "v3po"; } /* * Defines the supported next protocols that can be used for * NSH next-protocol field. */ identity next-protocol { description "Base identity from which all nsh next protocols are derived from"; } identity ipv4 { base next-protocol; description "Support ipv4 to act as next protocol"; } identity ipv6 { base next-protocol; description "Support ipv6 to act as next protocol"; } identity ethernet { base next-protocol; description "Support ethernet to act as next protocol"; } typedef nsh-next-protocol { type identityref { base "next-protocol"; } description "Identifies a specific next protocol for nsh"; } /* * Defines the supported encap type. */ identity encap-type { description "encap type"; } identity vxlan-gpe-encap-type { base "encap-type"; description "vxlan-gpe encap type"; } identity vxlan-encap-type { base "encap-type"; description "vxlan encap type"; } typedef nsh-encap-type { type identityref { base "encap-type"; } } /* * Defines the supported MD-types. */ identity md-type { description "md type"; } identity md-type1 { base "md-type"; description "nsh md-type1"; } identity md-type2 { base "md-type"; description "nsh md-type2"; } typedef nsh-md-type { type identityref { base "md-type"; } } grouping nsh-md-type1-attributes { leaf c1 { type uint32; } leaf c2 { type uint32; } leaf c3 { type uint32; } leaf c4 { type uint32; } } grouping nsh-md-type2-attributes { } grouping nsh-entry-base-attributes { leaf name { type string; description "NSH Entry Name"; } leaf nsp { type uint32 { range "0..16777215"; } } leaf nsi { type uint8 { range "1..255"; } } leaf md-type { type nsh-md-type; } leaf version { type uint8; } leaf length { type uint8; } leaf next-protocol { type nsh-next-protocol; } } grouping nsh-map-base-attributes { leaf name { type string; description "NSH Map Name"; } leaf nsp { type uint32 { range "0..16777215"; } } leaf nsi { type uint8 { range "1..255"; } } leaf mapped-nsp { type uint32 { range "0..16777215"; } } leaf mapped-nsi { type uint8 { range "1..255"; } } leaf encap-type { type nsh-encap-type; } } container nsh { description "NSH config data"; container nsh-entries { list nsh-entry { key "name"; uses nsh-entry-base-attributes; description "nsh-entry configuration"; } } container nsh-maps { list nsh-map { key "name"; uses nsh-map-base-attributes; description "nsh-map configuration"; } } } augment /nsh/nsh-entries/nsh-entry { ext:augment-identifier nsh-entry-md-type-augment; when "/md-type = 'vpp-nsh:md-type1' "; uses nsh-md-type1-attributes; } augment /nsh/nsh-entries/nsh-entry { ext:augment-identifier nsh-entry-md-type-augment; when "/md-type = 'vpp-nsh:md-type2' "; uses nsh-md-type2-attributes; } augment /nsh/nsh-maps/nsh-map { ext:augment-identifier nsh-vxlan-gpe-encap-augment; when "/encap-type = 'vpp-nsh:vxlan-gpe-encap-type' "; uses v3po:vxlan-gpe-base-attributes; } augment /nsh/nsh-maps/nsh-map { ext:augment-identifier vxlan-encap-augment; when "/encap-type = 'vpp-nsh:vxlan-encap-type' "; uses v3po:vxlan-base-attributes; } container nsh-state { config false; description "NSH operational data"; container nsh-entries { list nsh-entry { key "name"; uses nsh-entry-base-attributes; description "nsh-entry operational data"; } } container nsh-maps { list nsh-map { key "name"; uses nsh-map-base-attributes; description "nsh-map operational data"; } } } }