From b4581d183065af6b82026003959b96fbe6850dd1 Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Fri, 16 Jun 2017 14:36:52 +0200 Subject: Rename yang files to match model revision Also order of revisions was sorted starting from most current. Change-Id: I21fd35cfdb1cc5601b3fb40c9f3755bd3b995b14 Signed-off-by: Marek Gradzki --- v3po/api/src/main/yang/dot1q-types.yang | 237 ------- v3po/api/src/main/yang/dot1q-types@2015-06-26.yang | 237 +++++++ v3po/api/src/main/yang/pbb-types.yang | 81 --- v3po/api/src/main/yang/pbb-types@2016-12-14.yang | 81 +++ v3po/api/src/main/yang/subinterface-span.yang | 44 -- .../main/yang/subinterface-span@2017-05-10.yang | 44 ++ v3po/api/src/main/yang/unnumbered-interfaces.yang | 44 -- .../yang/unnumbered-interfaces@2017-05-10.yang | 44 ++ v3po/api/src/main/yang/v3po-context.yang | 29 - .../api/src/main/yang/v3po-context@2016-09-09.yang | 29 + v3po/api/src/main/yang/v3po.yang | 786 --------------------- v3po/api/src/main/yang/v3po@2017-06-07.yang | 785 ++++++++++++++++++++ v3po/api/src/main/yang/vpp-pbb.yang | 32 - v3po/api/src/main/yang/vpp-pbb@2016-12-14.yang | 32 + v3po/api/src/main/yang/vpp-vlan.yang | 461 ------------ v3po/api/src/main/yang/vpp-vlan@2017-06-07.yang | 461 ++++++++++++ 16 files changed, 1713 insertions(+), 1714 deletions(-) delete mode 100644 v3po/api/src/main/yang/dot1q-types.yang create mode 100644 v3po/api/src/main/yang/dot1q-types@2015-06-26.yang delete mode 100644 v3po/api/src/main/yang/pbb-types.yang create mode 100644 v3po/api/src/main/yang/pbb-types@2016-12-14.yang delete mode 100644 v3po/api/src/main/yang/subinterface-span.yang create mode 100644 v3po/api/src/main/yang/subinterface-span@2017-05-10.yang delete mode 100644 v3po/api/src/main/yang/unnumbered-interfaces.yang create mode 100644 v3po/api/src/main/yang/unnumbered-interfaces@2017-05-10.yang delete mode 100644 v3po/api/src/main/yang/v3po-context.yang create mode 100644 v3po/api/src/main/yang/v3po-context@2016-09-09.yang delete mode 100644 v3po/api/src/main/yang/v3po.yang create mode 100644 v3po/api/src/main/yang/v3po@2017-06-07.yang delete mode 100644 v3po/api/src/main/yang/vpp-pbb.yang create mode 100644 v3po/api/src/main/yang/vpp-pbb@2016-12-14.yang delete mode 100644 v3po/api/src/main/yang/vpp-vlan.yang create mode 100644 v3po/api/src/main/yang/vpp-vlan@2017-06-07.yang (limited to 'v3po/api/src/main/yang') diff --git a/v3po/api/src/main/yang/dot1q-types.yang b/v3po/api/src/main/yang/dot1q-types.yang deleted file mode 100644 index 594b9d6ce..000000000 --- a/v3po/api/src/main/yang/dot1q-types.yang +++ /dev/null @@ -1,237 +0,0 @@ -module dot1q-types { - namespace "urn:ieee:params:xml:ns:yang:dot1q-types"; - prefix dot1q; - - organization - "Cisco Systems, Inc. - Customer Service - - Postal: 170 W Tasman Drive - San Jose, CA 95134 - - Tel: +1 1800 553-NETS - - E-mail: cs-yang@cisco.com"; - - contact - "Robert Wilton - rwilton@cisco.com"; - - description - "This module contains a collection of generally useful YANG types - that are specific to 802.1Q VLANs that can be usefully shared - between multiple models. - - Terms and Acronyms - - 802.1Q: IEEE 802.1Q VLANs - - VLAN (vlan): Virtual Local Area Network - "; - - revision 2015-06-26 { - description "Latest revision, changed namespace"; - - reference "Intended to be standardized IEEE 802.1"; - } - - typedef PCP { - type uint8 { - range "0..7"; - } - description - "Priority Code Point. PCP is a 3-bit field that refers to the - class of service applied to an 802.1Q VLAN tagged frame. The - field specifies a priority value between 0 and 7, these values - can be used by quality of service (QoS) to prioritize - different classes of traffic."; - reference "IEEE 802.1Q (2014)"; - } - - /* - * Defines what it means to be an 802.1Q VLAN Id, where values 0 - * and 4095 are reserved. - */ - typedef dot1q-vlan-id { - type uint16 { - range "1..4094"; - } - description "An 802.1Q VLAN Identifier"; - reference "IEEE 802.1Q (2014)"; - } - - /* - * Defines the supported IEEE 802.1Q types that can be used for - * VLAN tag matching. - */ - identity dot1q-tag-vlan-type { - description "Base identity from which all 802.1Q VLAN tag types - are derived from"; - } - - identity c-vlan { - base dot1q-tag-vlan-type; - description - "An 802.1Q Customer-VLAN tag, normally using the 0x8100 - Ethertype"; - } - - identity s-vlan { - base dot1q-tag-vlan-type; - description - "An 802.1Q Service-VLAN tag, using the 0x88a8 Ethertype - originally introduced in 802.1ad, and incorporated into - 802.1Q (2011)"; - } - - typedef dot1q-tag-type { - type identityref { - base "dot1q-tag-vlan-type"; - } - description "Identifies a specific 802.1Q tag type"; - reference "IEEE 802.1Q (2014)"; - } - - /* - * Defines the type used to represent ranges of VLAN Ids. - * - * Ideally we would model that as a list of VLAN Ids in YANG, but - * the model is easier to use if this is just represented as a - * string. - * - * This type is used to match an ordered list of VLAN Ids, or - * contiguous ranges of VLAN Ids. Valid VLAN Ids must be in the - * range 1 to 4094, and included in the list in non overlapping - * ascending order. - * - * E.g. "1, 10-100, 50, 500-1000" - */ - typedef dot1q-vlan-id-ranges { - type string { - pattern "([0-9]{1,4}(-[0-9]{1,4})?(,[0-9]{1,4}" + - "(-[0-9]{1,4})?)*)"; - } - description "A list of VLAN Ids, or non overlapping VLAN ranges, - in ascending order, between 1 and 4094"; - } - - /* - * A grouping which represents an 802.1Q VLAN tag, matching both - * the tag Ethertype and a single VLAN Id. The PCP and DEI fields - * in the 802.1Q tag are ignored for tag matching purposes. - */ - grouping dot1q-tag { - description "Grouping to allow configuration to identify a single - 802.1Q VLAN tag"; - container dot1q-tag { - description "Identifies an 802.1Q VLAN tag with an explicit - tag-type and a single VLAN Id"; - leaf tag-type { - type dot1q-tag-type; - mandatory true; - description "VLAN tag type"; - } - leaf vlan-id { - type dot1q-vlan-id; - mandatory true; - description "VLAN Id"; - } - } - } - - /* - * A grouping which represents an 802.1Q VLAN tag, matching both - * the tag Ethertype and a single VLAN Id or "any" to match on any - * VLAN Id. The PCP and DEI fields in the 802.1Q tag are ignored - * for tag matching purposes. - */ - grouping dot1q-tag-or-any { - description "Grouping to allow configuration to identify a single - 802.1Q VLAN tag or the 'any' value to match any VLAN - Id not matched by a more specific VLAN Id match"; - container dot1q-tag { - description "Identifies an 802.1Q VLAN tag with an explicit - tag-type and a single VLAN Id, or 'any' VLAN Id"; - leaf tag-type { - type dot1q-tag-type; - mandatory true; - description "VLAN tag type"; - } - leaf vlan-id { - type union { - type dot1q-vlan-id; - type enumeration { - enum "any" { - value 4096; - description - "Matches 'any' VLAN tag in the range 1 to 4094 that - is not matched by a more specific VLAN Id match"; - } - } - } - mandatory true; - description "VLAN Id or any"; - } - } - } - - /* - * A grouping which represents an 802.1Q tag that matches a range - * of VLAN Ids. The PCP and DEI fields in the 802.1Q tag are - * ignored for tag matching purposes. - */ - grouping dot1q-tag-ranges { - description "Grouping to allow configuration to identify an - 802.1Q VLAN tag that matches any VLAN Id within a - set of non overlapping VLAN Id ranges"; - container dot1q-tag { - description "Identifies an 802.1Q VLAN tag with an explicit - tag-type and and a range of VLAN Ids"; - leaf tag-type { - type dot1q-tag-type; - mandatory true; - description "VLAN tag type"; - } - leaf vlan-ids { - type dot1q-vlan-id-ranges; - mandatory true; - description "VLAN Ids"; - } - } - } - - /* - * A grouping which represents an 802.1Q VLAN tag, matching both - * the tag Ethertype and a single VLAN Id, ordered list of ranges, - * or "any" to match on any VLAN Id. The PCP and DEI fields in the - * 802.1Q tag are ignored for tag matching purposes. - */ - grouping dot1q-tag-ranges-or-any { - description "Grouping to allow configuration to identify an - 802.1Q VLAN tag that matches any specific VLAN Id - within a set of non overlapping VLAN Id ranges, or - the 'any' value to match any VLAN Id"; - container dot1q-tag { - description "Identifies an 802.1Q VLAN tag with an explicit - tag-type, an ordered list of VLAN Id ranges, or - 'any' VLAN Id"; - leaf tag-type { - type dot1q-tag-type; - mandatory true; - description "VLAN tag type"; - } - leaf vlan-id { - type union { - type dot1q-vlan-id-ranges; - type enumeration { - enum "any" { - description "Matches 'any' VLAN tag in the range 1 to - 4094"; - } - } - } - mandatory true; - description "VLAN Ids or any"; - } - } - } -} \ No newline at end of file diff --git a/v3po/api/src/main/yang/dot1q-types@2015-06-26.yang b/v3po/api/src/main/yang/dot1q-types@2015-06-26.yang new file mode 100644 index 000000000..594b9d6ce --- /dev/null +++ b/v3po/api/src/main/yang/dot1q-types@2015-06-26.yang @@ -0,0 +1,237 @@ +module dot1q-types { + namespace "urn:ieee:params:xml:ns:yang:dot1q-types"; + prefix dot1q; + + organization + "Cisco Systems, Inc. + Customer Service + + Postal: 170 W Tasman Drive + San Jose, CA 95134 + + Tel: +1 1800 553-NETS + + E-mail: cs-yang@cisco.com"; + + contact + "Robert Wilton - rwilton@cisco.com"; + + description + "This module contains a collection of generally useful YANG types + that are specific to 802.1Q VLANs that can be usefully shared + between multiple models. + + Terms and Acronyms + + 802.1Q: IEEE 802.1Q VLANs + + VLAN (vlan): Virtual Local Area Network + "; + + revision 2015-06-26 { + description "Latest revision, changed namespace"; + + reference "Intended to be standardized IEEE 802.1"; + } + + typedef PCP { + type uint8 { + range "0..7"; + } + description + "Priority Code Point. PCP is a 3-bit field that refers to the + class of service applied to an 802.1Q VLAN tagged frame. The + field specifies a priority value between 0 and 7, these values + can be used by quality of service (QoS) to prioritize + different classes of traffic."; + reference "IEEE 802.1Q (2014)"; + } + + /* + * Defines what it means to be an 802.1Q VLAN Id, where values 0 + * and 4095 are reserved. + */ + typedef dot1q-vlan-id { + type uint16 { + range "1..4094"; + } + description "An 802.1Q VLAN Identifier"; + reference "IEEE 802.1Q (2014)"; + } + + /* + * Defines the supported IEEE 802.1Q types that can be used for + * VLAN tag matching. + */ + identity dot1q-tag-vlan-type { + description "Base identity from which all 802.1Q VLAN tag types + are derived from"; + } + + identity c-vlan { + base dot1q-tag-vlan-type; + description + "An 802.1Q Customer-VLAN tag, normally using the 0x8100 + Ethertype"; + } + + identity s-vlan { + base dot1q-tag-vlan-type; + description + "An 802.1Q Service-VLAN tag, using the 0x88a8 Ethertype + originally introduced in 802.1ad, and incorporated into + 802.1Q (2011)"; + } + + typedef dot1q-tag-type { + type identityref { + base "dot1q-tag-vlan-type"; + } + description "Identifies a specific 802.1Q tag type"; + reference "IEEE 802.1Q (2014)"; + } + + /* + * Defines the type used to represent ranges of VLAN Ids. + * + * Ideally we would model that as a list of VLAN Ids in YANG, but + * the model is easier to use if this is just represented as a + * string. + * + * This type is used to match an ordered list of VLAN Ids, or + * contiguous ranges of VLAN Ids. Valid VLAN Ids must be in the + * range 1 to 4094, and included in the list in non overlapping + * ascending order. + * + * E.g. "1, 10-100, 50, 500-1000" + */ + typedef dot1q-vlan-id-ranges { + type string { + pattern "([0-9]{1,4}(-[0-9]{1,4})?(,[0-9]{1,4}" + + "(-[0-9]{1,4})?)*)"; + } + description "A list of VLAN Ids, or non overlapping VLAN ranges, + in ascending order, between 1 and 4094"; + } + + /* + * A grouping which represents an 802.1Q VLAN tag, matching both + * the tag Ethertype and a single VLAN Id. The PCP and DEI fields + * in the 802.1Q tag are ignored for tag matching purposes. + */ + grouping dot1q-tag { + description "Grouping to allow configuration to identify a single + 802.1Q VLAN tag"; + container dot1q-tag { + description "Identifies an 802.1Q VLAN tag with an explicit + tag-type and a single VLAN Id"; + leaf tag-type { + type dot1q-tag-type; + mandatory true; + description "VLAN tag type"; + } + leaf vlan-id { + type dot1q-vlan-id; + mandatory true; + description "VLAN Id"; + } + } + } + + /* + * A grouping which represents an 802.1Q VLAN tag, matching both + * the tag Ethertype and a single VLAN Id or "any" to match on any + * VLAN Id. The PCP and DEI fields in the 802.1Q tag are ignored + * for tag matching purposes. + */ + grouping dot1q-tag-or-any { + description "Grouping to allow configuration to identify a single + 802.1Q VLAN tag or the 'any' value to match any VLAN + Id not matched by a more specific VLAN Id match"; + container dot1q-tag { + description "Identifies an 802.1Q VLAN tag with an explicit + tag-type and a single VLAN Id, or 'any' VLAN Id"; + leaf tag-type { + type dot1q-tag-type; + mandatory true; + description "VLAN tag type"; + } + leaf vlan-id { + type union { + type dot1q-vlan-id; + type enumeration { + enum "any" { + value 4096; + description + "Matches 'any' VLAN tag in the range 1 to 4094 that + is not matched by a more specific VLAN Id match"; + } + } + } + mandatory true; + description "VLAN Id or any"; + } + } + } + + /* + * A grouping which represents an 802.1Q tag that matches a range + * of VLAN Ids. The PCP and DEI fields in the 802.1Q tag are + * ignored for tag matching purposes. + */ + grouping dot1q-tag-ranges { + description "Grouping to allow configuration to identify an + 802.1Q VLAN tag that matches any VLAN Id within a + set of non overlapping VLAN Id ranges"; + container dot1q-tag { + description "Identifies an 802.1Q VLAN tag with an explicit + tag-type and and a range of VLAN Ids"; + leaf tag-type { + type dot1q-tag-type; + mandatory true; + description "VLAN tag type"; + } + leaf vlan-ids { + type dot1q-vlan-id-ranges; + mandatory true; + description "VLAN Ids"; + } + } + } + + /* + * A grouping which represents an 802.1Q VLAN tag, matching both + * the tag Ethertype and a single VLAN Id, ordered list of ranges, + * or "any" to match on any VLAN Id. The PCP and DEI fields in the + * 802.1Q tag are ignored for tag matching purposes. + */ + grouping dot1q-tag-ranges-or-any { + description "Grouping to allow configuration to identify an + 802.1Q VLAN tag that matches any specific VLAN Id + within a set of non overlapping VLAN Id ranges, or + the 'any' value to match any VLAN Id"; + container dot1q-tag { + description "Identifies an 802.1Q VLAN tag with an explicit + tag-type, an ordered list of VLAN Id ranges, or + 'any' VLAN Id"; + leaf tag-type { + type dot1q-tag-type; + mandatory true; + description "VLAN tag type"; + } + leaf vlan-id { + type union { + type dot1q-vlan-id-ranges; + type enumeration { + enum "any" { + description "Matches 'any' VLAN tag in the range 1 to + 4094"; + } + } + } + mandatory true; + description "VLAN Ids or any"; + } + } + } +} \ No newline at end of file diff --git a/v3po/api/src/main/yang/pbb-types.yang b/v3po/api/src/main/yang/pbb-types.yang deleted file mode 100644 index 8c3aad41a..000000000 --- a/v3po/api/src/main/yang/pbb-types.yang +++ /dev/null @@ -1,81 +0,0 @@ -module pbb-types { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:pbb-types"; - prefix "pbb-types"; - - description "Common types used for defining Pbb based subinterfaces"; - - revision "2016-12-14" { - description - "Initial revision."; - } - - import ietf-yang-types { - prefix yang; - } - - import ietf-interfaces { - prefix if; - } - - import yang-ext { - prefix "ext"; - } - - typedef operation { - type enumeration { - // NOTE - Does not specify disabled enum value(0), because its used internally to delete/disable rewrite - enum "push-2" { - value 2; - } - - enum "pop-2" { - value 4; - description "Encapsulate/Decapsulate pbb packet according to incoming/outcoming direction"; - } - enum "translate-2-1" { - value 7; - } - } - } - - grouping pbb-rewrite-attributes { - description "Provider Backbone Bridge attributes"; - - leaf destination-address { - type yang:mac-address; - description "backbone destination address"; - } - - leaf source-address { - type yang:mac-address; - description "backbone source address"; - } - - leaf outer-tag { - type uint16; - } - - leaf b-vlan-tag-vlan-id { - type uint16 { - //12 bit range - range "1..4095"; - } - description "backbone vlan id"; - } - - leaf i-tag-isid { - type uint32 { - //24 bit range - range "1..16777215"; - } - description "identifier of the backbone service instance "; - } - - leaf interface-operation { - type operation; - default pop-2; - description "Define operation that will pbb interface perform while processing packets"; - } - } -} diff --git a/v3po/api/src/main/yang/pbb-types@2016-12-14.yang b/v3po/api/src/main/yang/pbb-types@2016-12-14.yang new file mode 100644 index 000000000..8c3aad41a --- /dev/null +++ b/v3po/api/src/main/yang/pbb-types@2016-12-14.yang @@ -0,0 +1,81 @@ +module pbb-types { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:pbb-types"; + prefix "pbb-types"; + + description "Common types used for defining Pbb based subinterfaces"; + + revision "2016-12-14" { + description + "Initial revision."; + } + + import ietf-yang-types { + prefix yang; + } + + import ietf-interfaces { + prefix if; + } + + import yang-ext { + prefix "ext"; + } + + typedef operation { + type enumeration { + // NOTE - Does not specify disabled enum value(0), because its used internally to delete/disable rewrite + enum "push-2" { + value 2; + } + + enum "pop-2" { + value 4; + description "Encapsulate/Decapsulate pbb packet according to incoming/outcoming direction"; + } + enum "translate-2-1" { + value 7; + } + } + } + + grouping pbb-rewrite-attributes { + description "Provider Backbone Bridge attributes"; + + leaf destination-address { + type yang:mac-address; + description "backbone destination address"; + } + + leaf source-address { + type yang:mac-address; + description "backbone source address"; + } + + leaf outer-tag { + type uint16; + } + + leaf b-vlan-tag-vlan-id { + type uint16 { + //12 bit range + range "1..4095"; + } + description "backbone vlan id"; + } + + leaf i-tag-isid { + type uint32 { + //24 bit range + range "1..16777215"; + } + description "identifier of the backbone service instance "; + } + + leaf interface-operation { + type operation; + default pop-2; + description "Define operation that will pbb interface perform while processing packets"; + } + } +} diff --git a/v3po/api/src/main/yang/subinterface-span.yang b/v3po/api/src/main/yang/subinterface-span.yang deleted file mode 100644 index 9308c5d4a..000000000 --- a/v3po/api/src/main/yang/subinterface-span.yang +++ /dev/null @@ -1,44 +0,0 @@ -module subinterface-span { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:subinterface-span"; - prefix "subif-span"; - - revision "2017-05-10" { - description - "Initialial revision that adds support for mirroring interfaces on subinterfaces. - Vpp implementation allows/implements only two cases: - - Src: interface |Dst: interface - covered in v3po.yang - - Src: interface |Dst: subinterface - covered by this model"; - } - - revision "2017-06-07" { - description "Eliminated config leafrefs in operational tree"; - } - - import v3po { - prefix "v3po"; - } - - import vpp-vlan { - prefix "vpp-vlan"; - } - - import yang-ext { - prefix "ext"; - } - - augment /if:interfaces/if:interface/vpp-vlan:sub-interfaces/vpp-vlan:sub-interface { - ext:augment-identifier "vpp-subinterface-span-augmentation"; - - container span { - uses v3po:span-attributes; - } - } - - augment /if:interfaces-state/if:interface/vpp-vlan:sub-interfaces/vpp-vlan:sub-interface { - ext:augment-identifier "vpp-subinterface-span-state-augmentation"; - container span-state { - uses v3po:span-state-attributes; - } - } -} \ No newline at end of file diff --git a/v3po/api/src/main/yang/subinterface-span@2017-05-10.yang b/v3po/api/src/main/yang/subinterface-span@2017-05-10.yang new file mode 100644 index 000000000..9308c5d4a --- /dev/null +++ b/v3po/api/src/main/yang/subinterface-span@2017-05-10.yang @@ -0,0 +1,44 @@ +module subinterface-span { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:subinterface-span"; + prefix "subif-span"; + + revision "2017-05-10" { + description + "Initialial revision that adds support for mirroring interfaces on subinterfaces. + Vpp implementation allows/implements only two cases: + - Src: interface |Dst: interface - covered in v3po.yang + - Src: interface |Dst: subinterface - covered by this model"; + } + + revision "2017-06-07" { + description "Eliminated config leafrefs in operational tree"; + } + + import v3po { + prefix "v3po"; + } + + import vpp-vlan { + prefix "vpp-vlan"; + } + + import yang-ext { + prefix "ext"; + } + + augment /if:interfaces/if:interface/vpp-vlan:sub-interfaces/vpp-vlan:sub-interface { + ext:augment-identifier "vpp-subinterface-span-augmentation"; + + container span { + uses v3po:span-attributes; + } + } + + augment /if:interfaces-state/if:interface/vpp-vlan:sub-interfaces/vpp-vlan:sub-interface { + ext:augment-identifier "vpp-subinterface-span-state-augmentation"; + container span-state { + uses v3po:span-state-attributes; + } + } +} \ No newline at end of file diff --git a/v3po/api/src/main/yang/unnumbered-interfaces.yang b/v3po/api/src/main/yang/unnumbered-interfaces.yang deleted file mode 100644 index 18ef2b681..000000000 --- a/v3po/api/src/main/yang/unnumbered-interfaces.yang +++ /dev/null @@ -1,44 +0,0 @@ -module unnumbered-interfaces { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:unnumbered:interfaces"; - prefix "uni"; - - revision "2017-05-10" { - description - "Initialial revision"; - } - - import ietf-interfaces { - prefix "if"; - } - - import vpp-vlan { - prefix "vpp-vlan"; - } - - import yang-ext { - prefix "ext"; - } - - grouping unnumbered-config-attributes { - container unnumbered { - presence "Sets interface as unnumbered"; - leaf use { - type string; - mandatory true; - description - "Name of interface or subinterface which IP is to be borrowed."; - } - } - } - - augment /if:interfaces/if:interface { - ext:augment-identifier "interface-unnumbered-augmentation"; - uses unnumbered-config-attributes; - } - - augment /if:interfaces/if:interface/vpp-vlan:sub-interfaces/vpp-vlan:sub-interface { - ext:augment-identifier "subinterface-unnumbered-augmentation"; - uses unnumbered-config-attributes; - } -} \ No newline at end of file diff --git a/v3po/api/src/main/yang/unnumbered-interfaces@2017-05-10.yang b/v3po/api/src/main/yang/unnumbered-interfaces@2017-05-10.yang new file mode 100644 index 000000000..18ef2b681 --- /dev/null +++ b/v3po/api/src/main/yang/unnumbered-interfaces@2017-05-10.yang @@ -0,0 +1,44 @@ +module unnumbered-interfaces { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:unnumbered:interfaces"; + prefix "uni"; + + revision "2017-05-10" { + description + "Initialial revision"; + } + + import ietf-interfaces { + prefix "if"; + } + + import vpp-vlan { + prefix "vpp-vlan"; + } + + import yang-ext { + prefix "ext"; + } + + grouping unnumbered-config-attributes { + container unnumbered { + presence "Sets interface as unnumbered"; + leaf use { + type string; + mandatory true; + description + "Name of interface or subinterface which IP is to be borrowed."; + } + } + } + + augment /if:interfaces/if:interface { + ext:augment-identifier "interface-unnumbered-augmentation"; + uses unnumbered-config-attributes; + } + + augment /if:interfaces/if:interface/vpp-vlan:sub-interfaces/vpp-vlan:sub-interface { + ext:augment-identifier "subinterface-unnumbered-augmentation"; + uses unnumbered-config-attributes; + } +} \ No newline at end of file diff --git a/v3po/api/src/main/yang/v3po-context.yang b/v3po/api/src/main/yang/v3po-context.yang deleted file mode 100644 index ae35be5dd..000000000 --- a/v3po/api/src/main/yang/v3po-context.yang +++ /dev/null @@ -1,29 +0,0 @@ -module v3po-context { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:v3po:context"; - prefix "v3po-ctx"; - - revision "2016-09-09" { - description - "Initial revision of v3po specific context"; - } - - container disabled-interfaces { - config false; - // context data - - description "Index list of disabled interfaces. VPP does not always delete an interface after deletion. It just - disables it and keeps it there. Honeycomb can hide such interfaces from operational data, and this - is the place to heep track of which interfaces were deleted, but are expected to show up in VPP"; - - list disabled-interface-index { - - key "index"; - - leaf index { - type int32; - } - } - } - -} \ No newline at end of file diff --git a/v3po/api/src/main/yang/v3po-context@2016-09-09.yang b/v3po/api/src/main/yang/v3po-context@2016-09-09.yang new file mode 100644 index 000000000..ae35be5dd --- /dev/null +++ b/v3po/api/src/main/yang/v3po-context@2016-09-09.yang @@ -0,0 +1,29 @@ +module v3po-context { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:v3po:context"; + prefix "v3po-ctx"; + + revision "2016-09-09" { + description + "Initial revision of v3po specific context"; + } + + container disabled-interfaces { + config false; + // context data + + description "Index list of disabled interfaces. VPP does not always delete an interface after deletion. It just + disables it and keeps it there. Honeycomb can hide such interfaces from operational data, and this + is the place to heep track of which interfaces were deleted, but are expected to show up in VPP"; + + list disabled-interface-index { + + key "index"; + + leaf index { + type int32; + } + } + } + +} \ No newline at end of file diff --git a/v3po/api/src/main/yang/v3po.yang b/v3po/api/src/main/yang/v3po.yang deleted file mode 100644 index 7ef5d8876..000000000 --- a/v3po/api/src/main/yang/v3po.yang +++ /dev/null @@ -1,786 +0,0 @@ -module v3po { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:v3po"; - prefix "v3po"; - - revision "2017-03-15" { - description - "Revision changes: - - acl and ietf-acl moved to vpp-interface-acl - - vpp-state and rpc moved to vpp-management - - bridge domains moved to standalone container"; - } - - revision "2016-12-14" { - description - "This revision adds the following new features: - - ingress/egress ACLs support - - moved ACL definitions to vpp-acl module - - updated l2 container constraint (permit IP address on BVI interface) - - added PID of vpp process to vpp-state - - added support for Loopback interfaces - - added support for port mirroring"; - } - - revision "2017-06-07" { - description "Eliminated config leafrefs in operational tree"; - } - - - revision "2015-01-05" { - description "Initial revision of v3po 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 ietf-ip { - prefix "ip"; - } - import yang-ext { - prefix "ext"; - } - - typedef bridge-domain-ref { - type leafref { - path "/bridge-domains/bridge-domain/name"; - } - description - "This type is used by to reference a bridge domain table"; - } - - typedef bridged-virtual-interface-ref { - type leafref { - path "/if:interfaces/if:interface/l2/bridged-virtual-interface"; - } - description - "This type is used by to reference a bridged virtual interface"; - } - - identity vxlan-tunnel { - base if:interface-type; - } - - identity gre-tunnel { - base if:interface-type; - } - - identity vhost-user { - base if:interface-type; - } - - identity tap { - base if:interface-type; - } - - identity loopback { - base if:interface-type; - } - - identity l2-fib-action { - description "Base identity for l2-fib actions"; - } - - identity l2-fib-forward { - base l2-fib-action; - description - "Forwards packet with configured mac address"; - } - - identity l2-fib-filter { - base l2-fib-action; - description - "Drops packet with configured mac address"; - } - - typedef l2-fib-action { - type identityref { - base "l2-fib-action"; - } - description "Identifies a specific L2 FIB action"; - } - - typedef vxlan-vni { - // FIXME: should be in a vxlan-specific model - description "VNI used in a VXLAN tunnel"; - type uint32 { - range "0..16777215"; - } - } - - typedef vhost-user-role { - type enumeration { - enum "server"; - enum "client"; - } - } - - identity vxlan-gpe-tunnel { - base if:interface-type; - } - - typedef vxlan-gpe-vni { - description "VNI used in a VXLAN-GPE tunnel"; - type uint32 { - range "0..16777215"; - } - } - - typedef vxlan-gpe-next-protocol { - type enumeration { - enum "ipv4" { - value 1; - } - enum "ipv6" { - value 2; - } - enum "ethernet" { - value 3; - } - enum "nsh" { - value 4; - } - } - } - - - typedef span-state { - type enumeration { - enum "receive" { - value "1"; - description - "Receive (Rx) SPAN—The goal of receive (or ingress) SPAN - is to monitor as much as possible all the packets received by the source interface. - A copy of each packet received by the source is sent to the destination port for that SPAN session. - You can monitor a series or range of ingress ports in a SPAN session."; - } - - enum "transmit" { - value "2"; - description - "Transmit (Tx) SPAN—The goal of transmit (or egress) SPAN is to monitor as much as possible all the packets - sent by the source interface after all modification and processing is performed by the switch. - A copy of each packet sent by the source is sent to the destination port for that SPAN session. - The copy is provided after the packet is modified. Monitors a range of egress ports in a SPAN session."; - } - - enum "both" { - value "3"; - description - "In a SPAN session, you can monitor a series or range of ports for both received and sent packets."; - } - } - } - - grouping bridge-domain-attributes { - leaf flood { - type boolean; - default true; - description - "Enable/disable L2 flooding."; - } - leaf forward { - type boolean; - default true; - description - "Enable/disable L2 forwarding."; - } - leaf learn { - type boolean; - default true; - description - "Enable/disable L2 learning."; - } - leaf unknown-unicast-flood { - type boolean; - default true; - } - leaf arp-termination { - type boolean; - default false; - } - - container arp-termination-table { - when "../v3po:arp-termination = 'true'"; - - // TODO(HONEYCOMB-133): add support for read (after VPP-230 is done) - list arp-termination-table-entry { - key "ip-address phys-address"; - leaf ip-address { - // FIXME: change to ip-address-no-zone after https://bugs.opendaylight.org/show_bug.cgi?id=6413 is resolved - type inet:ip-address; - } - leaf phys-address { - type yang:phys-address; - } - } - } - } - - // TODO express constraints for L2 FIB entries in YANG if possible - grouping l2-fib-attributes { - container l2-fib-table { - list l2-fib-entry { - key "phys-address"; - - leaf phys-address { - type yang:phys-address; - } - - leaf outgoing-interface { - // either filter must be specified or interface(can't be both) - when "../action != 'l2-fib-filter'"; - type if:interface-ref; - // mandatory true; - when is not actually resolved, so mandatory can't be in place - description - "One of interfaces assigned to the FIB table's bridge-domain."; - } - leaf static-config { - type boolean; - default false; - description - "Static entries cannot be overridden by mac learning."; - } - leaf action { - type l2-fib-action; - mandatory true; - description - "L2 FIB action. For filter action, entry must be configured as static."; - } - leaf bridged-virtual-interface { - when "../action = 'forward'"; - type boolean; - config false; // FIXME setting bvi is currently not supported by VPP's binary api - } - } - } - } - - grouping interface-tag { - leaf tag { - type string { - length 1..63; - } - description - "ASCII string placeholder for interface metadata. Value is stored in vpp, - and returned in read requests. No processing involved."; - } - } - - grouping tap-interface-base-attributes { - leaf tap-name { - type string{ - pattern "[a-zA-Z0-9\-;.+@$#^&*!_()=\[\]]*"; - } - } - uses interface-tag; - } - - grouping tap-interface-config-attributes { - leaf mac { - type yang:phys-address; - mandatory false; - description "Mac address to be set for the tap interface. Random will be used if not configured"; - } - - leaf device-instance { - type uint32; - mandatory false; - description "Custom device instance. Autogenerated will be used if not configured"; - } - } - - grouping loopback-interface-base-attributes { - leaf mac { - type yang:phys-address; - mandatory false; - description "Mac address of the loopback interface"; - } - } - - grouping ethernet-base-attributes { - leaf mtu { - type uint16 { - range "64..9216"; - } - units "octets"; - default 9216; - description - "The size, in octets, of the largest packet that the - hardware interface will send and receive."; - } - } - - grouping routing-base-attributes { - leaf ipv4-vrf-id { - type uint32; - } - leaf ipv6-vrf-id { - type uint32; - } - description - "Defines VRF tables used for ipv4 and ipv6 traffic"; - } - - grouping ethernet-state-attributes { - leaf manufacturer-description { - type string; - config false; - } - leaf duplex { - type enumeration { - enum "half"; - enum "full"; - } - config false; - } - } - - grouping vhost-user-interface-base-attributes { - leaf socket { - type string { - length 1..255; - } - } - leaf role { - type vhost-user-role; - default "server"; - } - uses interface-tag; - description "vhost-user settings"; - } - - grouping vhost-user-interface-config-attributes { - leaf device-instance { - type uint32; - mandatory false; - description "Custom device instance. Autogenerated will be used if not configured"; - } - description "vhost-user settings"; - } - - grouping vhost-user-interface-state-attributes { - leaf features { - type uint64; - config false; - } - leaf virtio-net-hdr-size { - type uint32; - config false; - } - leaf num-memory-regions { - type uint32; - config false; - } - leaf connect-error { - type string; - config false; - } - } - - /* - * Defines the supported decap node for vxlan. - */ - identity decap-node { - description - "Define the supported decap node"; - } - identity l2-input { - base decap-node; - description - "The next decap node is l2-input"; - } - identity nsh-proxy { - base decap-node; - description - "The next decap node is nsh-proxy"; - } - typedef vxlan-decap-node { - type identityref { - base "decap-node"; - } - } - grouping vxlan-base-attributes { - // FIXME: this should be in an vxlan-specific extension - leaf src { - /*mandatory true;*/ - type inet:ip-address; - } - leaf dst { - /*mandatory true;*/ - type inet:ip-address; - } - leaf vni { - /*mandatory true;*/ - type vxlan-vni; - } - leaf encap-vrf-id { - type uint32; - } - leaf decap-next { - type vxlan-decap-node; - default "l2-input"; - } - } - - grouping gre-base-attributes { - leaf src { - /*mandatory true;*/ - type inet:ip-address; - } - leaf dst { - /*mandatory true;*/ - type inet:ip-address; - } - leaf outer-fib-id { - type uint32; - } - } - - grouping vxlan-gpe-base-attributes { - leaf local { - /*mandatory true;*/ - type inet:ip-address; - } - leaf remote { - /*mandatory true;*/ - type inet:ip-address; - } - leaf vni { - /*mandatory true;*/ - type vxlan-gpe-vni; - } - leaf next-protocol { - type vxlan-gpe-next-protocol; - } - leaf encap-vrf-id { - type uint32; - } - leaf decap-vrf-id { - type uint32; - } - } - - grouping l2-config-attributes { - description - "Parameters for configuring Layer2 features on interfaces."; - - choice interconnection { - case xconnect-based { - leaf xconnect-outgoing-interface { - /* Don't allow selection of this interface */ - must "../../if:name != current()"; - type if:interface-ref; - description - "L2 xconnect mode"; - } - } - case bridge-based { - uses bridge-based-attributes; - } - } - } - - grouping l2-state-attributes { - description - "Parameters for configuring Layer2 features on interfaces."; - - choice interconnection { - case xconnect-based { - leaf xconnect-outgoing-interface { - /* Don't allow selection of this interface */ - must "../../if:name != current()"; - type if:interface-state-ref; - description - "L2 xconnect mode"; - } - } - case bridge-based { - uses bridge-based-attributes; - } - } - } - - grouping bridge-based-attributes { - leaf bridge-domain { - type bridge-domain-ref; - mandatory true; - description - "Interfaces in a bridge-domain forward packets to other - interfaces in the same bridge-domain based on - destination mac address."; - } - leaf split-horizon-group { - when "../bridge-domain"; - type uint8 { - range "0..255"; - } - default 0; //no split horizon group - description - "Interface's split-horizon group. Interfaces in the same - bridge-domain and split-horizon group can not forward - packets between each other. "; - } - leaf bridged-virtual-interface { - when "../bridge-domain"; - type boolean; - default false; - description - "Interface forward packets in the bridge-domain - associated with the BVI."; - } - } - - grouping span-attributes { - description "Parameters of the SPAN feature"; - - container mirrored-interfaces { - list mirrored-interface { - key "iface-ref"; - leaf iface-ref { - type if:interface-ref; - } - - leaf state { - type span-state; - mandatory true; - } - } - } - } - - grouping span-state-attributes { - description "Parameters of the SPAN feature"; - - container mirrored-interfaces { - list mirrored-interface { - key "iface-ref"; - leaf iface-ref { - type if:interface-state-ref; - } - - leaf state { - type span-state; - mandatory true; - } - } - } - } - - augment /if:interfaces/if:interface { - ext:augment-identifier "vpp-interface-augmentation"; - - // FIXME using ietf-interfaces model for vpp interfaces makes it hard to implement because: - // 1. The link between interface type and this augmentation is unclear - // 2. Only this augmentation with combination of ifc type is trigger to do something for vpp, what if user only configures base interface stuff ? + We need to get leaves defined by ietf-interfaces when we are processing this augment - // 3. The ietf-interfaces model does not define groupings which makes types reuse difficult - - container tap { - when "../if:type = 'v3po:tap'"; - uses tap-interface-base-attributes; - uses tap-interface-config-attributes; - } - - container loopback { - presence "Presence of this container indicates loopback nature of the interface"; - when "../if:type = 'v3po:loopback'"; - uses loopback-interface-base-attributes; - } - - container ethernet { - when "../if:type = 'ianaift:ethernetCsmacd'"; - uses ethernet-base-attributes; - } - - container routing { - uses routing-base-attributes; - } - - container vhost-user { - when "../if:type = 'v3po:vhost-user'"; - uses vhost-user-interface-base-attributes; - uses vhost-user-interface-config-attributes; - } - - container vxlan { - when "../if:type = 'v3po:vxlan-tunnel'"; - uses vxlan-base-attributes; - } - - container gre { - when "../if:type = 'v3po:gre-tunnel'"; - uses gre-base-attributes; - } - - container l2 { - must "bridged-virtual-interface = 'true' or " + - "(not (../if:ipv4[if:enabled = 'true']/if:address/if:ip) and " + - "not (../if:ipv6[if:enabled = 'true']/if:address/if:ip))"; - - uses l2-config-attributes; - } - - container vxlan-gpe { - when "../if:type = 'v3po:vxlan-gpe-tunnel'"; - - uses vxlan-gpe-base-attributes; - } - - container span { - uses span-attributes; - } - } - - container bridge-domains { - presence "Bridge domains configuration"; - list bridge-domain { - key "name"; - - leaf name { - type string; - } - - uses bridge-domain-attributes; - uses l2-fib-attributes; - - description - "bridge-domain configuration"; - } - } - - augment /if:interfaces-state/if:interface { - ext:augment-identifier "vpp-interface-state-augmentation"; - - leaf description { - type string; - } - - container tap { - when "../if:type = 'v3po:tap'"; - uses tap-interface-base-attributes; - } - - container ethernet { - when "../if:type = 'ianaift:ethernetCsmacd'"; - uses ethernet-base-attributes; - uses ethernet-state-attributes; - } - - container routing { - uses routing-base-attributes; - } - - container vhost-user { - when "../if:type = 'v3po:vhost-user'"; - uses vhost-user-interface-base-attributes; - uses vhost-user-interface-state-attributes; - } - - container vxlan { - when "../if:type = 'v3po:vxlan-tunnel'"; - uses vxlan-base-attributes; - } - container vxlan-gpe { - when "../if:type = 'v3po:vxlan-gpe-tunnel'"; - - uses vxlan-gpe-base-attributes; - } - - container gre { - when "../if:type = 'gre-tunnel'"; - uses gre-base-attributes; - } - - container l2 { - must "bridged-virtual-interface = 'true' or " + - "(not (../if:ipv4[if:enabled = 'true']/if:address/if:ip) and " + - "not (../if:ipv6[if:enabled = 'true']/if:address/if:ip))"; - - uses l2-state-attributes; - } - - container span { - uses span-state-attributes; - } - } - - augment /if:interfaces-state/if:interface/if:statistics { - ext:augment-identifier "vpp-interface-statistics-augmentation"; - leaf in-errors-no-buf { - type yang:counter64; - } - leaf in-errors-miss { - type yang:counter64; - } - leaf out-discards-fifo-full { - type yang:counter64; - } - } - - container bridge-domains-state { - // FIXME: Should this live in bridge-domain.yang in a modular fashion ? - config "false"; - list bridge-domain { - - key "name"; - leaf name { - type string; - } - - uses bridge-domain-attributes; - uses l2-fib-attributes; - - description - "bridge-domain operational data"; - } - } - - // VPP Notifications - - typedef interface-status { - type enumeration { - enum up { - value 1; - } - enum down { - value 0; - } - } - } - - typedef interface-name-or-index { - type union { - type string; - type uint32; - } - } - - notification interface-state-change { - leaf name { - type interface-name-or-index; - } - - leaf admin-status { - type interface-status; - } - - leaf oper-status { - type interface-status; - } - } - - notification interface-deleted { - leaf name { - type interface-name-or-index; - } - } -} diff --git a/v3po/api/src/main/yang/v3po@2017-06-07.yang b/v3po/api/src/main/yang/v3po@2017-06-07.yang new file mode 100644 index 000000000..58ef0685a --- /dev/null +++ b/v3po/api/src/main/yang/v3po@2017-06-07.yang @@ -0,0 +1,785 @@ +module v3po { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:v3po"; + prefix "v3po"; + + revision "2017-06-07" { + description "Eliminated config leafrefs in operational tree"; + } + + revision "2017-03-15" { + description + "Revision changes: + - acl and ietf-acl moved to vpp-interface-acl + - vpp-state and rpc moved to vpp-management + - bridge domains moved to standalone container"; + } + + revision "2016-12-14" { + description + "This revision adds the following new features: + - ingress/egress ACLs support + - moved ACL definitions to vpp-acl module + - updated l2 container constraint (permit IP address on BVI interface) + - added PID of vpp process to vpp-state + - added support for Loopback interfaces + - added support for port mirroring"; + } + + revision "2015-01-05" { + description "Initial revision of v3po 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 ietf-ip { + prefix "ip"; + } + import yang-ext { + prefix "ext"; + } + + typedef bridge-domain-ref { + type leafref { + path "/bridge-domains/bridge-domain/name"; + } + description + "This type is used by to reference a bridge domain table"; + } + + typedef bridged-virtual-interface-ref { + type leafref { + path "/if:interfaces/if:interface/l2/bridged-virtual-interface"; + } + description + "This type is used by to reference a bridged virtual interface"; + } + + identity vxlan-tunnel { + base if:interface-type; + } + + identity gre-tunnel { + base if:interface-type; + } + + identity vhost-user { + base if:interface-type; + } + + identity tap { + base if:interface-type; + } + + identity loopback { + base if:interface-type; + } + + identity l2-fib-action { + description "Base identity for l2-fib actions"; + } + + identity l2-fib-forward { + base l2-fib-action; + description + "Forwards packet with configured mac address"; + } + + identity l2-fib-filter { + base l2-fib-action; + description + "Drops packet with configured mac address"; + } + + typedef l2-fib-action { + type identityref { + base "l2-fib-action"; + } + description "Identifies a specific L2 FIB action"; + } + + typedef vxlan-vni { + // FIXME: should be in a vxlan-specific model + description "VNI used in a VXLAN tunnel"; + type uint32 { + range "0..16777215"; + } + } + + typedef vhost-user-role { + type enumeration { + enum "server"; + enum "client"; + } + } + + identity vxlan-gpe-tunnel { + base if:interface-type; + } + + typedef vxlan-gpe-vni { + description "VNI used in a VXLAN-GPE tunnel"; + type uint32 { + range "0..16777215"; + } + } + + typedef vxlan-gpe-next-protocol { + type enumeration { + enum "ipv4" { + value 1; + } + enum "ipv6" { + value 2; + } + enum "ethernet" { + value 3; + } + enum "nsh" { + value 4; + } + } + } + + + typedef span-state { + type enumeration { + enum "receive" { + value "1"; + description + "Receive (Rx) SPAN—The goal of receive (or ingress) SPAN + is to monitor as much as possible all the packets received by the source interface. + A copy of each packet received by the source is sent to the destination port for that SPAN session. + You can monitor a series or range of ingress ports in a SPAN session."; + } + + enum "transmit" { + value "2"; + description + "Transmit (Tx) SPAN—The goal of transmit (or egress) SPAN is to monitor as much as possible all the packets + sent by the source interface after all modification and processing is performed by the switch. + A copy of each packet sent by the source is sent to the destination port for that SPAN session. + The copy is provided after the packet is modified. Monitors a range of egress ports in a SPAN session."; + } + + enum "both" { + value "3"; + description + "In a SPAN session, you can monitor a series or range of ports for both received and sent packets."; + } + } + } + + grouping bridge-domain-attributes { + leaf flood { + type boolean; + default true; + description + "Enable/disable L2 flooding."; + } + leaf forward { + type boolean; + default true; + description + "Enable/disable L2 forwarding."; + } + leaf learn { + type boolean; + default true; + description + "Enable/disable L2 learning."; + } + leaf unknown-unicast-flood { + type boolean; + default true; + } + leaf arp-termination { + type boolean; + default false; + } + + container arp-termination-table { + when "../v3po:arp-termination = 'true'"; + + // TODO(HONEYCOMB-133): add support for read (after VPP-230 is done) + list arp-termination-table-entry { + key "ip-address phys-address"; + leaf ip-address { + // FIXME: change to ip-address-no-zone after https://bugs.opendaylight.org/show_bug.cgi?id=6413 is resolved + type inet:ip-address; + } + leaf phys-address { + type yang:phys-address; + } + } + } + } + + // TODO express constraints for L2 FIB entries in YANG if possible + grouping l2-fib-attributes { + container l2-fib-table { + list l2-fib-entry { + key "phys-address"; + + leaf phys-address { + type yang:phys-address; + } + + leaf outgoing-interface { + // either filter must be specified or interface(can't be both) + when "../action != 'l2-fib-filter'"; + type if:interface-ref; + // mandatory true; - when is not actually resolved, so mandatory can't be in place + description + "One of interfaces assigned to the FIB table's bridge-domain."; + } + leaf static-config { + type boolean; + default false; + description + "Static entries cannot be overridden by mac learning."; + } + leaf action { + type l2-fib-action; + mandatory true; + description + "L2 FIB action. For filter action, entry must be configured as static."; + } + leaf bridged-virtual-interface { + when "../action = 'forward'"; + type boolean; + config false; // FIXME setting bvi is currently not supported by VPP's binary api + } + } + } + } + + grouping interface-tag { + leaf tag { + type string { + length 1..63; + } + description + "ASCII string placeholder for interface metadata. Value is stored in vpp, + and returned in read requests. No processing involved."; + } + } + + grouping tap-interface-base-attributes { + leaf tap-name { + type string{ + pattern "[a-zA-Z0-9\-;.+@$#^&*!_()=\[\]]*"; + } + } + uses interface-tag; + } + + grouping tap-interface-config-attributes { + leaf mac { + type yang:phys-address; + mandatory false; + description "Mac address to be set for the tap interface. Random will be used if not configured"; + } + + leaf device-instance { + type uint32; + mandatory false; + description "Custom device instance. Autogenerated will be used if not configured"; + } + } + + grouping loopback-interface-base-attributes { + leaf mac { + type yang:phys-address; + mandatory false; + description "Mac address of the loopback interface"; + } + } + + grouping ethernet-base-attributes { + leaf mtu { + type uint16 { + range "64..9216"; + } + units "octets"; + default 9216; + description + "The size, in octets, of the largest packet that the + hardware interface will send and receive."; + } + } + + grouping routing-base-attributes { + leaf ipv4-vrf-id { + type uint32; + } + leaf ipv6-vrf-id { + type uint32; + } + description + "Defines VRF tables used for ipv4 and ipv6 traffic"; + } + + grouping ethernet-state-attributes { + leaf manufacturer-description { + type string; + config false; + } + leaf duplex { + type enumeration { + enum "half"; + enum "full"; + } + config false; + } + } + + grouping vhost-user-interface-base-attributes { + leaf socket { + type string { + length 1..255; + } + } + leaf role { + type vhost-user-role; + default "server"; + } + uses interface-tag; + description "vhost-user settings"; + } + + grouping vhost-user-interface-config-attributes { + leaf device-instance { + type uint32; + mandatory false; + description "Custom device instance. Autogenerated will be used if not configured"; + } + description "vhost-user settings"; + } + + grouping vhost-user-interface-state-attributes { + leaf features { + type uint64; + config false; + } + leaf virtio-net-hdr-size { + type uint32; + config false; + } + leaf num-memory-regions { + type uint32; + config false; + } + leaf connect-error { + type string; + config false; + } + } + + /* + * Defines the supported decap node for vxlan. + */ + identity decap-node { + description + "Define the supported decap node"; + } + identity l2-input { + base decap-node; + description + "The next decap node is l2-input"; + } + identity nsh-proxy { + base decap-node; + description + "The next decap node is nsh-proxy"; + } + typedef vxlan-decap-node { + type identityref { + base "decap-node"; + } + } + grouping vxlan-base-attributes { + // FIXME: this should be in an vxlan-specific extension + leaf src { + /*mandatory true;*/ + type inet:ip-address; + } + leaf dst { + /*mandatory true;*/ + type inet:ip-address; + } + leaf vni { + /*mandatory true;*/ + type vxlan-vni; + } + leaf encap-vrf-id { + type uint32; + } + leaf decap-next { + type vxlan-decap-node; + default "l2-input"; + } + } + + grouping gre-base-attributes { + leaf src { + /*mandatory true;*/ + type inet:ip-address; + } + leaf dst { + /*mandatory true;*/ + type inet:ip-address; + } + leaf outer-fib-id { + type uint32; + } + } + + grouping vxlan-gpe-base-attributes { + leaf local { + /*mandatory true;*/ + type inet:ip-address; + } + leaf remote { + /*mandatory true;*/ + type inet:ip-address; + } + leaf vni { + /*mandatory true;*/ + type vxlan-gpe-vni; + } + leaf next-protocol { + type vxlan-gpe-next-protocol; + } + leaf encap-vrf-id { + type uint32; + } + leaf decap-vrf-id { + type uint32; + } + } + + grouping l2-config-attributes { + description + "Parameters for configuring Layer2 features on interfaces."; + + choice interconnection { + case xconnect-based { + leaf xconnect-outgoing-interface { + /* Don't allow selection of this interface */ + must "../../if:name != current()"; + type if:interface-ref; + description + "L2 xconnect mode"; + } + } + case bridge-based { + uses bridge-based-attributes; + } + } + } + + grouping l2-state-attributes { + description + "Parameters for configuring Layer2 features on interfaces."; + + choice interconnection { + case xconnect-based { + leaf xconnect-outgoing-interface { + /* Don't allow selection of this interface */ + must "../../if:name != current()"; + type if:interface-state-ref; + description + "L2 xconnect mode"; + } + } + case bridge-based { + uses bridge-based-attributes; + } + } + } + + grouping bridge-based-attributes { + leaf bridge-domain { + type bridge-domain-ref; + mandatory true; + description + "Interfaces in a bridge-domain forward packets to other + interfaces in the same bridge-domain based on + destination mac address."; + } + leaf split-horizon-group { + when "../bridge-domain"; + type uint8 { + range "0..255"; + } + default 0; //no split horizon group + description + "Interface's split-horizon group. Interfaces in the same + bridge-domain and split-horizon group can not forward + packets between each other. "; + } + leaf bridged-virtual-interface { + when "../bridge-domain"; + type boolean; + default false; + description + "Interface forward packets in the bridge-domain + associated with the BVI."; + } + } + + grouping span-attributes { + description "Parameters of the SPAN feature"; + + container mirrored-interfaces { + list mirrored-interface { + key "iface-ref"; + leaf iface-ref { + type if:interface-ref; + } + + leaf state { + type span-state; + mandatory true; + } + } + } + } + + grouping span-state-attributes { + description "Parameters of the SPAN feature"; + + container mirrored-interfaces { + list mirrored-interface { + key "iface-ref"; + leaf iface-ref { + type if:interface-state-ref; + } + + leaf state { + type span-state; + mandatory true; + } + } + } + } + + augment /if:interfaces/if:interface { + ext:augment-identifier "vpp-interface-augmentation"; + + // FIXME using ietf-interfaces model for vpp interfaces makes it hard to implement because: + // 1. The link between interface type and this augmentation is unclear + // 2. Only this augmentation with combination of ifc type is trigger to do something for vpp, what if user only configures base interface stuff ? + We need to get leaves defined by ietf-interfaces when we are processing this augment + // 3. The ietf-interfaces model does not define groupings which makes types reuse difficult + + container tap { + when "../if:type = 'v3po:tap'"; + uses tap-interface-base-attributes; + uses tap-interface-config-attributes; + } + + container loopback { + presence "Presence of this container indicates loopback nature of the interface"; + when "../if:type = 'v3po:loopback'"; + uses loopback-interface-base-attributes; + } + + container ethernet { + when "../if:type = 'ianaift:ethernetCsmacd'"; + uses ethernet-base-attributes; + } + + container routing { + uses routing-base-attributes; + } + + container vhost-user { + when "../if:type = 'v3po:vhost-user'"; + uses vhost-user-interface-base-attributes; + uses vhost-user-interface-config-attributes; + } + + container vxlan { + when "../if:type = 'v3po:vxlan-tunnel'"; + uses vxlan-base-attributes; + } + + container gre { + when "../if:type = 'v3po:gre-tunnel'"; + uses gre-base-attributes; + } + + container l2 { + must "bridged-virtual-interface = 'true' or " + + "(not (../if:ipv4[if:enabled = 'true']/if:address/if:ip) and " + + "not (../if:ipv6[if:enabled = 'true']/if:address/if:ip))"; + + uses l2-config-attributes; + } + + container vxlan-gpe { + when "../if:type = 'v3po:vxlan-gpe-tunnel'"; + + uses vxlan-gpe-base-attributes; + } + + container span { + uses span-attributes; + } + } + + container bridge-domains { + presence "Bridge domains configuration"; + list bridge-domain { + key "name"; + + leaf name { + type string; + } + + uses bridge-domain-attributes; + uses l2-fib-attributes; + + description + "bridge-domain configuration"; + } + } + + augment /if:interfaces-state/if:interface { + ext:augment-identifier "vpp-interface-state-augmentation"; + + leaf description { + type string; + } + + container tap { + when "../if:type = 'v3po:tap'"; + uses tap-interface-base-attributes; + } + + container ethernet { + when "../if:type = 'ianaift:ethernetCsmacd'"; + uses ethernet-base-attributes; + uses ethernet-state-attributes; + } + + container routing { + uses routing-base-attributes; + } + + container vhost-user { + when "../if:type = 'v3po:vhost-user'"; + uses vhost-user-interface-base-attributes; + uses vhost-user-interface-state-attributes; + } + + container vxlan { + when "../if:type = 'v3po:vxlan-tunnel'"; + uses vxlan-base-attributes; + } + container vxlan-gpe { + when "../if:type = 'v3po:vxlan-gpe-tunnel'"; + + uses vxlan-gpe-base-attributes; + } + + container gre { + when "../if:type = 'gre-tunnel'"; + uses gre-base-attributes; + } + + container l2 { + must "bridged-virtual-interface = 'true' or " + + "(not (../if:ipv4[if:enabled = 'true']/if:address/if:ip) and " + + "not (../if:ipv6[if:enabled = 'true']/if:address/if:ip))"; + + uses l2-state-attributes; + } + + container span { + uses span-state-attributes; + } + } + + augment /if:interfaces-state/if:interface/if:statistics { + ext:augment-identifier "vpp-interface-statistics-augmentation"; + leaf in-errors-no-buf { + type yang:counter64; + } + leaf in-errors-miss { + type yang:counter64; + } + leaf out-discards-fifo-full { + type yang:counter64; + } + } + + container bridge-domains-state { + // FIXME: Should this live in bridge-domain.yang in a modular fashion ? + config "false"; + list bridge-domain { + + key "name"; + leaf name { + type string; + } + + uses bridge-domain-attributes; + uses l2-fib-attributes; + + description + "bridge-domain operational data"; + } + } + + // VPP Notifications + + typedef interface-status { + type enumeration { + enum up { + value 1; + } + enum down { + value 0; + } + } + } + + typedef interface-name-or-index { + type union { + type string; + type uint32; + } + } + + notification interface-state-change { + leaf name { + type interface-name-or-index; + } + + leaf admin-status { + type interface-status; + } + + leaf oper-status { + type interface-status; + } + } + + notification interface-deleted { + leaf name { + type interface-name-or-index; + } + } +} diff --git a/v3po/api/src/main/yang/vpp-pbb.yang b/v3po/api/src/main/yang/vpp-pbb.yang deleted file mode 100644 index d3ca160ce..000000000 --- a/v3po/api/src/main/yang/vpp-pbb.yang +++ /dev/null @@ -1,32 +0,0 @@ -module vpp-pbb { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:vpp-pbb"; - prefix "vpp-pbb"; - - revision "2016-12-14" { - description "Initial revision of pbb model"; - } - - import pbb-types { - prefix "pbb-types"; - } - - import yang-ext { - prefix "ext"; - } - - augment /if:interfaces/if:interface { - ext:augment-identifier "pbb-rewrite-interface-augmentation"; - container pbb-rewrite{ - uses pbb-types:pbb-rewrite-attributes; - } - } - - augment /if:interfaces-state/if:interface { - ext:augment-identifier "pbb-rewrite-state-interface-augmentation"; - container pbb-rewrite-state{ - uses pbb-types:pbb-rewrite-attributes; - config false; - } - } -} \ No newline at end of file diff --git a/v3po/api/src/main/yang/vpp-pbb@2016-12-14.yang b/v3po/api/src/main/yang/vpp-pbb@2016-12-14.yang new file mode 100644 index 000000000..d3ca160ce --- /dev/null +++ b/v3po/api/src/main/yang/vpp-pbb@2016-12-14.yang @@ -0,0 +1,32 @@ +module vpp-pbb { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:vpp-pbb"; + prefix "vpp-pbb"; + + revision "2016-12-14" { + description "Initial revision of pbb model"; + } + + import pbb-types { + prefix "pbb-types"; + } + + import yang-ext { + prefix "ext"; + } + + augment /if:interfaces/if:interface { + ext:augment-identifier "pbb-rewrite-interface-augmentation"; + container pbb-rewrite{ + uses pbb-types:pbb-rewrite-attributes; + } + } + + augment /if:interfaces-state/if:interface { + ext:augment-identifier "pbb-rewrite-state-interface-augmentation"; + container pbb-rewrite-state{ + uses pbb-types:pbb-rewrite-attributes; + config false; + } + } +} \ No newline at end of file diff --git a/v3po/api/src/main/yang/vpp-vlan.yang b/v3po/api/src/main/yang/vpp-vlan.yang deleted file mode 100644 index 5999a2850..000000000 --- a/v3po/api/src/main/yang/vpp-vlan.yang +++ /dev/null @@ -1,461 +0,0 @@ -module vpp-vlan { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:vpp:vlan"; - prefix "vpp-vlan"; - - revision "2017-05-09" { - description "Revision changes: - - add support for ipv4/6 vrf id for sub interfaces"; - } - - revision "2017-03-15" { - description - "Revision changes: - - acl and ietf-acl moved to vpp-subinterface-acl"; - } - - revision "2016-12-14" { - description - "This revision adds the following new features: - - ingress/egress ACLs support"; - } - - revision "2015-05-27" { - description - "Initial revision of vlan model for VPP. - Reuses some concepts from draft-wilton-netmod-intf-vlan-yang-02 model."; - } - - revision "2017-06-07" { - description "Eliminated config leafrefs in operational tree"; - } - - import ietf-interfaces { - prefix "if"; - } - import ietf-inet-types { - prefix inet; - } - import ietf-yang-types { - prefix "yang"; - } - import yang-ext { - prefix "ext"; - } - import dot1q-types { - prefix dot1q; - } - import v3po { - prefix v3po; - } - - typedef sub-interface-status { - type enumeration { - enum "up"; - enum "down"; - } - } - - // todo add 802dot1ad support to dot1q-types.yang - /* - * Defines the supported IEEE 802.1Q types that can be used for - * VLAN tag matching. - */ - identity vlan-type { - description "Base identity from which all VLAN types - are derived from"; - } - - identity 802dot1q { - base vlan-type; - description - "An 802.1Q VLAN type"; - } - - identity 802dot1ad { - base vlan-type; - description - "An 802.1ad VLAN type"; - } - - typedef vlan-type { - type identityref { - base "vlan-type"; - } - description "Identifies a specific VLAN type"; - } - - grouping match-attributes { - choice match-type { - mandatory true; - description "Provides a choice of how the frames may be matched"; - - case default { - description "Default match"; - leaf default { - type empty; - description - "Default match. Matches all traffic not matched to any - other peer sub-interface by a more specific - encapsulation."; - } // leaf default - } // case default - - case untagged { - description "Match untagged Ethernet frames only"; - leaf untagged { - type empty; - description - "Untagged match. Matches all untagged traffic."; - } // leaf untagged - } // case untagged - - case vlan-tagged { - container vlan-tagged { - description "Matches VLAN tagged frames. Vlan tags need to be specified to use this match type"; - - leaf match-exact-tags { - type boolean; - default true; - description - "If set, indicates that all 802.1Q VLAN tags in the - Ethernet frame header must be explicitly matched, i.e. - the EtherType following the matched tags must not be a - 802.1Q tag EtherType. If unset then extra 802.1Q VLAN - tags are allowed."; - } - } // container vlan-tagged - } // case vlan-tagged - } - } - - // TODO VPP does not allow to change subinterface nor delete it (except for tag-rewrite operation) - grouping sub-interface-base-attributes { - leaf vlan-type { - type vlan-type; - default 802dot1q; - } - - container tags { - list tag { - key "index"; - max-elements 2; - - description "The VLAN tags to use by locally sourced traffic"; - - leaf index { - type uint8 { - range "0..1"; - } - - /* - * Only allow a push of an inner tag if an outer tag is also - * being pushed. - */ - must "index != 0 or - count(../../push-tags[index = 0]/index) > 0" { - error-message "An inner tag can only be pushed if an outer - tag is also specified"; - description "Only allow a push of an inner tag if an outer - tag is also being pushed"; - } - description "The index into the tag stack"; - } - - uses dot1q:dot1q-tag-or-any; - - } - } - - container match { - description - "The match used to classify frames to this interface"; - uses match-attributes; - } - } - - grouping rewrite-attributes { - container rewrite { - uses tag-rewrite; - } - } - - grouping sub-interface-l2-config-attributes { - container l2 { - uses v3po:l2-config-attributes; - uses rewrite-attributes; - } - } - - grouping sub-interface-l2-state-attributes { - container l2 { - uses v3po:l2-state-attributes; - uses rewrite-attributes; - } - } - - grouping sub-interface-config-attributes { - leaf enabled { - type boolean; - default "false"; - description - "Contains the configured, desired state of the sub-interface. - To enable sub-interface, the super inerface needs to be enabled"; - } - } - - grouping sub-interface-operational-attributes { - leaf admin-status { - type sub-interface-status; - mandatory true; - } - leaf oper-status { - type sub-interface-status; - mandatory true; - } - leaf if-index { - type int32 { - range "1..2147483647"; - } - mandatory true; - } - leaf phys-address { - type yang:phys-address; - description - "The sub-interface's Media Access Control (MAC) address."; - } - leaf speed { - type yang:gauge64; - units "bits/second"; - } - } - - /* - * Only symetrical rewrite is supported - */ - grouping tag-rewrite { - description "Flexible rewrite"; - - leaf vlan-type { // todo rename to push_dot1q, mandatory(?) with default true - type vlan-type; - default 802dot1q; - } - - leaf pop-tags { - type uint8 { - range 1..2; - } - description "The number of tags to pop (or translate if used in - conjunction with push-tags)"; - } - - list push-tags { - key "index"; - max-elements 2; - description "The number of tags to push (or translate if used - in conjunction with pop-tags)"; - /* - * Server should order by increasing index. - */ - leaf index { - type uint8 { - range 0..1; - } - - /* - * Only allow a push of an inner tag if an outer tag is also - * being pushed. - */ - must "index != 0 or - count(../../push-tags[index = 0]/index) > 0" { - error-message "An inner tag can only be pushed if an outer - tag is also specified"; - description "Only allow a push of an inner tag if an outer - tag is also being pushed"; - } - } - - uses dot1q:dot1q-tag; - } - } - - grouping sub-interface-ip4-attributes { - container ipv4 { - // TODO: add currently unsupported: - // enabled, forwarding, mtu, address/origin(config false), neighbor/origin(config false) - - // TODO: reuse groupings once ietf-ip provides them - - description - "Parameters for the IPv4 address family (based on ietf-ip rev. 2014-06-16)"; - - list address { - key "ip"; - description - "The list of configured IPv4 addresses on the interface."; - leaf ip { - type inet:ipv4-address-no-zone; - description - "The IPv4 address on the interface."; - } - - choice subnet { - mandatory true; - description - "The subnet can be specified as a prefix-length, or, - if the server supports non-contiguous netmasks, as - a netmask."; - leaf prefix-length { - type uint8 { - range "0..32"; - } - description - "The length of the subnet prefix."; - } - leaf netmask { - type yang:dotted-quad; - description - "The subnet specified as a netmask (contiguous)"; - } - } // choice subnet - } // list address - - list neighbor { - key "ip"; - description - "A list of mappings from IPv4 addresses to - link-layer addresses. - - Entries in this list are used as static entries in the - ARP Cache."; - reference - "RFC 826: An Ethernet Address Resolution Protocol"; - - leaf ip { - type inet:ipv4-address-no-zone; - description - "The IPv4 address of the neighbor node."; - } - - leaf link-layer-address { - type yang:phys-address; - mandatory true; - description - "The link-layer address of the neighbor node."; - } - } // list neighbor - } - } - - grouping sub-interface-ip6-attributes { - container ipv6 { - // TODO: add currently unsupported: - // enabled, forwarding, mtu, neighbor, dup-addr-detect-transmits, autoconf, - // address(config false): origin, status - // neighbor(config false): origin, is-router, state - - // TODO: reuse groupings once ietf-ip provides them - - description - "Parameters for the IPv6 address family (based on ietf-ip rev. 2014-06-16)"; - - list address { - key "ip"; - description - "The list of configured IPv6 addresses on the interface."; - leaf ip { - type inet:ipv6-address-no-zone; - description - "The IPv6 address on the interface."; - } - - leaf prefix-length { - type uint8 { - range "0..128"; - } - mandatory true; - description - "The length of the subnet prefix."; - } - } // list address - - list neighbor { - key "ip"; - description - "A list of mappings from IPv6 addresses to - link-layer addresses. - - Entries in this list are used as static entries in the - Neighbor Cache."; - reference - "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)"; - - leaf ip { - type inet:ipv6-address-no-zone; - description - "The IPv6 address of the neighbor node."; - } - - leaf link-layer-address { - type yang:phys-address; - mandatory true; - description - "The link-layer address of the neighbor node."; - } - } // list neighbor - } - } - - grouping sub-interface-routing-attributes { - description "Provides basic attributes for ipv4/6 vrf configuration"; - container routing { - uses v3po:routing-base-attributes; - } - } - - augment /if:interfaces/if:interface { - ext:augment-identifier "subinterface-augmentation"; - - container sub-interfaces { - description "L2 vlan subinterfaces"; - - - list sub-interface { - key "identifier"; - leaf identifier { - type uint32; - } - - uses sub-interface-base-attributes; - uses sub-interface-config-attributes; - uses sub-interface-ip4-attributes; - uses sub-interface-ip6-attributes; - uses sub-interface-routing-attributes; - uses sub-interface-l2-config-attributes; - } - } - } - - augment /if:interfaces-state/if:interface { - ext:augment-identifier "subinterface-state-augmentation"; - - container sub-interfaces { - description "L2 vlan subinterfaces"; - - list sub-interface { - key "identifier"; - leaf identifier { - type uint32; - } - - uses sub-interface-base-attributes; - uses sub-interface-operational-attributes; - uses sub-interface-ip4-attributes; - uses sub-interface-ip6-attributes; - uses sub-interface-routing-attributes; - uses sub-interface-l2-state-attributes; - } - } - } - -} diff --git a/v3po/api/src/main/yang/vpp-vlan@2017-06-07.yang b/v3po/api/src/main/yang/vpp-vlan@2017-06-07.yang new file mode 100644 index 000000000..7c77a05b0 --- /dev/null +++ b/v3po/api/src/main/yang/vpp-vlan@2017-06-07.yang @@ -0,0 +1,461 @@ +module vpp-vlan { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:vpp:vlan"; + prefix "vpp-vlan"; + + revision "2017-06-07" { + description "Eliminated config leafrefs in operational tree"; + } + + revision "2017-05-09" { + description "Revision changes: + - add support for ipv4/6 vrf id for sub interfaces"; + } + + revision "2017-03-15" { + description + "Revision changes: + - acl and ietf-acl moved to vpp-subinterface-acl"; + } + + revision "2016-12-14" { + description + "This revision adds the following new features: + - ingress/egress ACLs support"; + } + + revision "2015-05-27" { + description + "Initial revision of vlan model for VPP. + Reuses some concepts from draft-wilton-netmod-intf-vlan-yang-02 model."; + } + + import ietf-interfaces { + prefix "if"; + } + import ietf-inet-types { + prefix inet; + } + import ietf-yang-types { + prefix "yang"; + } + import yang-ext { + prefix "ext"; + } + import dot1q-types { + prefix dot1q; + } + import v3po { + prefix v3po; + } + + typedef sub-interface-status { + type enumeration { + enum "up"; + enum "down"; + } + } + + // todo add 802dot1ad support to dot1q-types.yang + /* + * Defines the supported IEEE 802.1Q types that can be used for + * VLAN tag matching. + */ + identity vlan-type { + description "Base identity from which all VLAN types + are derived from"; + } + + identity 802dot1q { + base vlan-type; + description + "An 802.1Q VLAN type"; + } + + identity 802dot1ad { + base vlan-type; + description + "An 802.1ad VLAN type"; + } + + typedef vlan-type { + type identityref { + base "vlan-type"; + } + description "Identifies a specific VLAN type"; + } + + grouping match-attributes { + choice match-type { + mandatory true; + description "Provides a choice of how the frames may be matched"; + + case default { + description "Default match"; + leaf default { + type empty; + description + "Default match. Matches all traffic not matched to any + other peer sub-interface by a more specific + encapsulation."; + } // leaf default + } // case default + + case untagged { + description "Match untagged Ethernet frames only"; + leaf untagged { + type empty; + description + "Untagged match. Matches all untagged traffic."; + } // leaf untagged + } // case untagged + + case vlan-tagged { + container vlan-tagged { + description "Matches VLAN tagged frames. Vlan tags need to be specified to use this match type"; + + leaf match-exact-tags { + type boolean; + default true; + description + "If set, indicates that all 802.1Q VLAN tags in the + Ethernet frame header must be explicitly matched, i.e. + the EtherType following the matched tags must not be a + 802.1Q tag EtherType. If unset then extra 802.1Q VLAN + tags are allowed."; + } + } // container vlan-tagged + } // case vlan-tagged + } + } + + // TODO VPP does not allow to change subinterface nor delete it (except for tag-rewrite operation) + grouping sub-interface-base-attributes { + leaf vlan-type { + type vlan-type; + default 802dot1q; + } + + container tags { + list tag { + key "index"; + max-elements 2; + + description "The VLAN tags to use by locally sourced traffic"; + + leaf index { + type uint8 { + range "0..1"; + } + + /* + * Only allow a push of an inner tag if an outer tag is also + * being pushed. + */ + must "index != 0 or + count(../../push-tags[index = 0]/index) > 0" { + error-message "An inner tag can only be pushed if an outer + tag is also specified"; + description "Only allow a push of an inner tag if an outer + tag is also being pushed"; + } + description "The index into the tag stack"; + } + + uses dot1q:dot1q-tag-or-any; + + } + } + + container match { + description + "The match used to classify frames to this interface"; + uses match-attributes; + } + } + + grouping rewrite-attributes { + container rewrite { + uses tag-rewrite; + } + } + + grouping sub-interface-l2-config-attributes { + container l2 { + uses v3po:l2-config-attributes; + uses rewrite-attributes; + } + } + + grouping sub-interface-l2-state-attributes { + container l2 { + uses v3po:l2-state-attributes; + uses rewrite-attributes; + } + } + + grouping sub-interface-config-attributes { + leaf enabled { + type boolean; + default "false"; + description + "Contains the configured, desired state of the sub-interface. + To enable sub-interface, the super inerface needs to be enabled"; + } + } + + grouping sub-interface-operational-attributes { + leaf admin-status { + type sub-interface-status; + mandatory true; + } + leaf oper-status { + type sub-interface-status; + mandatory true; + } + leaf if-index { + type int32 { + range "1..2147483647"; + } + mandatory true; + } + leaf phys-address { + type yang:phys-address; + description + "The sub-interface's Media Access Control (MAC) address."; + } + leaf speed { + type yang:gauge64; + units "bits/second"; + } + } + + /* + * Only symetrical rewrite is supported + */ + grouping tag-rewrite { + description "Flexible rewrite"; + + leaf vlan-type { // todo rename to push_dot1q, mandatory(?) with default true + type vlan-type; + default 802dot1q; + } + + leaf pop-tags { + type uint8 { + range 1..2; + } + description "The number of tags to pop (or translate if used in + conjunction with push-tags)"; + } + + list push-tags { + key "index"; + max-elements 2; + description "The number of tags to push (or translate if used + in conjunction with pop-tags)"; + /* + * Server should order by increasing index. + */ + leaf index { + type uint8 { + range 0..1; + } + + /* + * Only allow a push of an inner tag if an outer tag is also + * being pushed. + */ + must "index != 0 or + count(../../push-tags[index = 0]/index) > 0" { + error-message "An inner tag can only be pushed if an outer + tag is also specified"; + description "Only allow a push of an inner tag if an outer + tag is also being pushed"; + } + } + + uses dot1q:dot1q-tag; + } + } + + grouping sub-interface-ip4-attributes { + container ipv4 { + // TODO: add currently unsupported: + // enabled, forwarding, mtu, address/origin(config false), neighbor/origin(config false) + + // TODO: reuse groupings once ietf-ip provides them + + description + "Parameters for the IPv4 address family (based on ietf-ip rev. 2014-06-16)"; + + list address { + key "ip"; + description + "The list of configured IPv4 addresses on the interface."; + leaf ip { + type inet:ipv4-address-no-zone; + description + "The IPv4 address on the interface."; + } + + choice subnet { + mandatory true; + description + "The subnet can be specified as a prefix-length, or, + if the server supports non-contiguous netmasks, as + a netmask."; + leaf prefix-length { + type uint8 { + range "0..32"; + } + description + "The length of the subnet prefix."; + } + leaf netmask { + type yang:dotted-quad; + description + "The subnet specified as a netmask (contiguous)"; + } + } // choice subnet + } // list address + + list neighbor { + key "ip"; + description + "A list of mappings from IPv4 addresses to + link-layer addresses. + + Entries in this list are used as static entries in the + ARP Cache."; + reference + "RFC 826: An Ethernet Address Resolution Protocol"; + + leaf ip { + type inet:ipv4-address-no-zone; + description + "The IPv4 address of the neighbor node."; + } + + leaf link-layer-address { + type yang:phys-address; + mandatory true; + description + "The link-layer address of the neighbor node."; + } + } // list neighbor + } + } + + grouping sub-interface-ip6-attributes { + container ipv6 { + // TODO: add currently unsupported: + // enabled, forwarding, mtu, neighbor, dup-addr-detect-transmits, autoconf, + // address(config false): origin, status + // neighbor(config false): origin, is-router, state + + // TODO: reuse groupings once ietf-ip provides them + + description + "Parameters for the IPv6 address family (based on ietf-ip rev. 2014-06-16)"; + + list address { + key "ip"; + description + "The list of configured IPv6 addresses on the interface."; + leaf ip { + type inet:ipv6-address-no-zone; + description + "The IPv6 address on the interface."; + } + + leaf prefix-length { + type uint8 { + range "0..128"; + } + mandatory true; + description + "The length of the subnet prefix."; + } + } // list address + + list neighbor { + key "ip"; + description + "A list of mappings from IPv6 addresses to + link-layer addresses. + + Entries in this list are used as static entries in the + Neighbor Cache."; + reference + "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)"; + + leaf ip { + type inet:ipv6-address-no-zone; + description + "The IPv6 address of the neighbor node."; + } + + leaf link-layer-address { + type yang:phys-address; + mandatory true; + description + "The link-layer address of the neighbor node."; + } + } // list neighbor + } + } + + grouping sub-interface-routing-attributes { + description "Provides basic attributes for ipv4/6 vrf configuration"; + container routing { + uses v3po:routing-base-attributes; + } + } + + augment /if:interfaces/if:interface { + ext:augment-identifier "subinterface-augmentation"; + + container sub-interfaces { + description "L2 vlan subinterfaces"; + + + list sub-interface { + key "identifier"; + leaf identifier { + type uint32; + } + + uses sub-interface-base-attributes; + uses sub-interface-config-attributes; + uses sub-interface-ip4-attributes; + uses sub-interface-ip6-attributes; + uses sub-interface-routing-attributes; + uses sub-interface-l2-config-attributes; + } + } + } + + augment /if:interfaces-state/if:interface { + ext:augment-identifier "subinterface-state-augmentation"; + + container sub-interfaces { + description "L2 vlan subinterfaces"; + + list sub-interface { + key "identifier"; + leaf identifier { + type uint32; + } + + uses sub-interface-base-attributes; + uses sub-interface-operational-attributes; + uses sub-interface-ip4-attributes; + uses sub-interface-ip6-attributes; + uses sub-interface-routing-attributes; + uses sub-interface-l2-state-attributes; + } + } + } + +} -- cgit 1.2.3-korg