From 9abac30c6b7bab8b515bd721dad461d01c28d2e5 Mon Sep 17 00:00:00 2001 From: Marek Gradzki Date: Mon, 19 Mar 2018 20:07:53 +0100 Subject: HC2VPP-289: fix 802dot1 identifiers Indentity names should not start with number, so prefix them with '_'. Change-Id: Ic941410da4c5401a646be94679c82e7c5c96e646 Signed-off-by: Marek Gradzki --- v3po/api/src/main/yang/vpp-vlan@2017-06-07.yang | 461 ----------------------- v3po/api/src/main/yang/vpp-vlan@2018-03-19.yang | 465 ++++++++++++++++++++++++ 2 files changed, 465 insertions(+), 461 deletions(-) delete mode 100644 v3po/api/src/main/yang/vpp-vlan@2017-06-07.yang create mode 100644 v3po/api/src/main/yang/vpp-vlan@2018-03-19.yang (limited to 'v3po/api') 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 deleted file mode 100644 index 7c77a05b0..000000000 --- a/v3po/api/src/main/yang/vpp-vlan@2017-06-07.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-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; - } - } - } - -} diff --git a/v3po/api/src/main/yang/vpp-vlan@2018-03-19.yang b/v3po/api/src/main/yang/vpp-vlan@2018-03-19.yang new file mode 100644 index 000000000..a919580b9 --- /dev/null +++ b/v3po/api/src/main/yang/vpp-vlan@2018-03-19.yang @@ -0,0 +1,465 @@ +module vpp-vlan { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:vpp:vlan"; + prefix "vpp-vlan"; + + revision "2018-03-19" { + description "Prefix invalid 802dot1q and 802dot1ad identifiers with underscore."; + } + + 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