summaryrefslogtreecommitdiffstats
path: root/v3po/api/src
diff options
context:
space:
mode:
authorMaros Marsalek <mmarsale@cisco.com>2016-11-10 12:22:28 +0100
committerMaros Marsalek <mmarsale@cisco.com>2016-11-10 12:47:24 +0100
commit8e0c7007906730fe4547b0265a895ad8a322a7dc (patch)
treedbc3310da5c7b7083cc6b9ecffee633d2cf5cd7f /v3po/api/src
parentaa7e652e6105a6972d6c41ff0738cd9e31ce0188 (diff)
Remove hc2vpp codebase
Moved to a dedicated hc2vpp project in fd.io Change-Id: I03dc3b3029f21b127a00c69a86bcd8e467896241 Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Diffstat (limited to 'v3po/api/src')
-rw-r--r--v3po/api/src/main/yang/dot1q-types.yang237
-rw-r--r--v3po/api/src/main/yang/ietf-access-control-list.yang208
-rw-r--r--v3po/api/src/main/yang/ietf-acl-context.yang67
-rw-r--r--v3po/api/src/main/yang/ietf-ip.yang742
-rw-r--r--v3po/api/src/main/yang/ietf-packet-fields.yang180
-rw-r--r--v3po/api/src/main/yang/pbb-types.yang81
-rw-r--r--v3po/api/src/main/yang/v3po-context.yang29
-rw-r--r--v3po/api/src/main/yang/v3po.yang716
-rw-r--r--v3po/api/src/main/yang/vpp-acl.yang160
-rw-r--r--v3po/api/src/main/yang/vpp-classifier-context.yang68
-rw-r--r--v3po/api/src/main/yang/vpp-classifier.yang215
-rw-r--r--v3po/api/src/main/yang/vpp-pbb.yang32
-rw-r--r--v3po/api/src/main/yang/vpp-vlan.yang443
13 files changed, 0 insertions, 3178 deletions
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/ietf-access-control-list.yang b/v3po/api/src/main/yang/ietf-access-control-list.yang
deleted file mode 100644
index 3083ee2a0..000000000
--- a/v3po/api/src/main/yang/ietf-access-control-list.yang
+++ /dev/null
@@ -1,208 +0,0 @@
-module ietf-access-control-list {
- yang-version 1.1;
- namespace "urn:ietf:params:xml:ns:yang:ietf-access-control-list";
- prefix acl;
- import ietf-yang-types {
- prefix yang;
- }
- import ietf-packet-fields {
- prefix packet-fields;
- }
- organization "IETF NETMOD (NETCONF Data Modeling Language)
- Working Group";
- contact
- "WG Web: http://tools.ietf.org/wg/netmod/
- WG List: netmod@ietf.org
- WG Chair: Juergen Schoenwaelder
- j.schoenwaelder@jacobs-university.de
- WG Chair: Tom Nadeau
- tnadeau@lucidvision.com
- Editor: Dean Bogdanovic
- ivandean@gmail.com
- Editor: Kiran Agrahara Sreenivasa
- kkoushik@cisco.com
- Editor: Lisa Huang
- lyihuang16@gmail.com
- Editor: Dana Blair
- dblair@cisco.com";
- description
- "This YANG module defines a component that describing the
- configuration of Access Control Lists (ACLs).
- Copyright (c) 2015 IETF Trust and the persons identified as
- the document authors. All rights reserved.
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD
- License set forth in Section 4.c of the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
- This version of this YANG module is part of RFC XXXX; see
- the RFC itself for full legal notices.";
- revision 2016-07-08 {
- description
- "Base model for Network Access Control List (ACL).";
- reference
- "RFC XXXX: Network Access Control List (ACL)
- YANG Data Model";
- }
- identity acl-base {
- description
- "Base Access Control List type for all Access Control List type
- identifiers.";
- }
- identity ipv4-acl {
- base acl:acl-base;
- description
- "ACL that primarily matches on fields from the IPv4 header
- (e.g. IPv4 destination address) and layer 4 headers (e.g. TCP
- destination port). An acl of type ipv4-acl does not contain
- matches on fields in the ethernet header or the IPv6 header.";
- }
- identity ipv6-acl {
- base acl:acl-base;
- description
- "ACL that primarily matches on fields from the IPv6 header
- (e.g. IPv6 destination address) and layer 4 headers (e.g. TCP
- destination port). An acl of type ipv6-acl does not contain
- matches on fields in the ethernet header or the IPv4 header.";
- }
- identity eth-acl {
- base acl:acl-base;
- description
- "ACL that primarily matches on fields in the ethernet header,
- like 10/100/1000baseT or WiFi Access Control List. An acl of
- type eth-acl does not contain matches on fields in the IPv4
- header, IPv6 header or layer 4 headers.";
- }
- typedef acl-type {
- type identityref {
- base acl:acl-base;
- }
- description
- "This type is used to refer to an Access Control List
- (ACL) type";
- }
- typedef access-control-list-ref {
- type leafref {
- path "/access-lists/acl/acl-name";
- }
- description
- "This type is used by data models that need to reference an
- Access Control List";
- }
- container access-lists {
- description
- "This is a top level container for Access Control Lists.
- It can have one or more Access Control Lists.";
- list acl {
- key "acl-type acl-name";
- description
- "An Access Control List(ACL) is an ordered list of
- Access List Entries (ACE). Each Access Control Entry has a
- list of match criteria and a list of actions.
- Since there are several kinds of Access Control Lists
- implemented with different attributes for
- different vendors, this
- model accommodates customizing Access Control Lists for
- each kind and for each vendor.";
- leaf acl-name {
- type string;
- description
- "The name of access-list. A device MAY restrict the length
- and value of this name, possibly space and special
- characters are not allowed.";
- }
- leaf acl-type {
- type acl-type;
- description
- "Type of access control list. Indicates the primary intended
- type of match criteria (e.g. ethernet, IPv4, IPv6, mixed, etc)
- used in the list instance.";
- }
- container acl-oper-data {
- config false;
- description
- "Overall Access Control List operational data";
- }
- container access-list-entries {
- description
- "The access-list-entries container contains
- a list of access-list-entries(ACE).";
- list ace {
- key "rule-name";
- ordered-by user;
- description
- "List of access list entries(ACE)";
- leaf rule-name {
- type string;
- description
- "A unique name identifying this Access List
- Entry(ACE).";
- }
- container matches {
- description
- "Definitions for match criteria for this Access List
- Entry.";
- choice ace-type {
- description
- "Type of access list entry.";
- case ace-ip {
- description "IP Access List Entry.";
- choice ace-ip-version {
- description
- "IP version used in this Access List Entry.";
- case ace-ipv4 {
- uses packet-fields:acl-ipv4-header-fields;
- }
- case ace-ipv6 {
- uses packet-fields:acl-ipv6-header-fields;
- }
- }
- uses packet-fields:acl-ip-header-fields;
- }
- case ace-eth {
- description
- "Ethernet Access List entry.";
- uses packet-fields:acl-eth-header-fields;
- }
- }
- }
- container actions {
- description
- "Definitions of action criteria for this Access List
- Entry.";
- choice packet-handling {
- default "deny";
- description
- "Packet handling action.";
- case deny {
- leaf deny {
- type empty;
- description
- "Deny action.";
- }
- }
- case permit {
- leaf permit {
- type empty;
- description
- "Permit action.";
- }
- }
- }
- }
- container ace-oper-data {
- config false;
- description
- "Operational data for this Access List Entry.";
- leaf match-counter {
- type yang:counter64;
- description
- "Number of matches for this Access List Entry";
- }
- }
- }
- }
- }
- }
-}
diff --git a/v3po/api/src/main/yang/ietf-acl-context.yang b/v3po/api/src/main/yang/ietf-acl-context.yang
deleted file mode 100644
index 71bfb73e4..000000000
--- a/v3po/api/src/main/yang/ietf-acl-context.yang
+++ /dev/null
@@ -1,67 +0,0 @@
-module ietf-acl-context {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:vpp:acl:context";
- prefix "nc";
-
- description "Context for nat mapping";
-
- revision "2016-12-14" {
- description "Initial revision.";
- }
-
- import ietf-inet-types {
- prefix "inet";
- }
-
- import naming-context {
- prefix "nc";
- }
-
- import yang-ext {
- prefix "ext";
- }
-
- grouping mapping-entry-context-attributes {
- container acl-mapping-entry-context {
- list mapping-table {
- key "direction";
-
- leaf direction {
- type enumeration {
- enum "ingress";
- enum "egress";
- }
- }
-
- list mapping-entry {
- key "index";
-
- leaf index {
- type int32;
- description "interface id";
- }
-
- leaf ip4_table_id {
- type int32;
- description "ip4 table id";
- }
-
- leaf ip6_table_id {
- type int32;
- description "ip6 table id";
- }
-
- leaf l2_table_id {
- type int32;
- description "l2 table id";
- }
- }
- }
- }
- }
-
- augment /nc:contexts {
- ext:augment-identifier "acl-mapping-entry-ctx-augmentation";
- uses mapping-entry-context-attributes;
- }
-} \ No newline at end of file
diff --git a/v3po/api/src/main/yang/ietf-ip.yang b/v3po/api/src/main/yang/ietf-ip.yang
deleted file mode 100644
index f6c59edea..000000000
--- a/v3po/api/src/main/yang/ietf-ip.yang
+++ /dev/null
@@ -1,742 +0,0 @@
-module ietf-ip {
-
- yang-version 1;
-
- namespace
- "urn:ietf:params:xml:ns:yang:ietf-ip";
-
- prefix ip;
-
- import ietf-interfaces {
- prefix if;
- }
- import ietf-inet-types {
- prefix inet;
- }
- import ietf-yang-types {
- prefix yang;
- }
-
- organization
- "IETF NETMOD (NETCONF Data Modeling Language) Working Group";
-
- contact
- "WG Web: <http://tools.ietf.org/wg/netmod/>
- WG List: <mailto:netmod@ietf.org>
-
- WG Chair: Thomas Nadeau
- <mailto:tnadeau@lucidvision.com>
-
- WG Chair: Juergen Schoenwaelder
- <mailto:j.schoenwaelder@jacobs-university.de>
-
- Editor: Martin Bjorklund
- <mailto:mbj@tail-f.com>";
-
- description
- "This module contains a collection of YANG definitions for
- configuring IP implementations.
-
- Copyright (c) 2014 IETF Trust and the persons identified as
- authors of the code. All rights reserved.
-
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD License
- set forth in Section 4.c of the IETF Trust's Legal Provisions
- Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
-
- This version of this YANG module is part of RFC 7277; see
- the RFC itself for full legal notices.";
-
- revision "2014-06-16" {
- description "Initial revision.";
- reference
- "RFC 7277: A YANG Data Model for IP Management";
-
- }
-
-
- feature ipv4-non-contiguous-netmasks {
- description
- "Indicates support for configuring non-contiguous
- subnet masks.";
- }
-
- feature ipv6-privacy-autoconf {
- description
- "Indicates support for Privacy Extensions for Stateless Address
- Autoconfiguration in IPv6.";
- reference
- "RFC 4941: Privacy Extensions for Stateless Address
- Autoconfiguration in IPv6";
-
- }
-
- typedef ip-address-origin {
- type enumeration {
- enum "other" {
- value 0;
- description
- "None of the following.";
- }
- enum "static" {
- value 1;
- description
- "Indicates that the address has been statically
- configured - for example, using NETCONF or a Command Line
- Interface.";
- }
- enum "dhcp" {
- value 2;
- description
- "Indicates an address that has been assigned to this
- system by a DHCP server.";
- }
- enum "link-layer" {
- value 3;
- description
- "Indicates an address created by IPv6 stateless
- autoconfiguration that embeds a link-layer address in its
- interface identifier.";
- }
- enum "random" {
- value 4;
- description
- "Indicates an address chosen by the system at
-
- random, e.g., an IPv4 address within 169.254/16, an
- RFC 4941 temporary address, or an RFC 7217 semantically
- opaque address.";
- reference
- "RFC 4941: Privacy Extensions for Stateless Address
- Autoconfiguration in IPv6
- RFC 7217: A Method for Generating Semantically Opaque
- Interface Identifiers with IPv6 Stateless
- Address Autoconfiguration (SLAAC)";
-
- }
- }
- description
- "The origin of an address.";
- }
-
- typedef neighbor-origin {
- type enumeration {
- enum "other" {
- value 0;
- description
- "None of the following.";
- }
- enum "static" {
- value 1;
- description
- "Indicates that the mapping has been statically
- configured - for example, using NETCONF or a Command Line
- Interface.";
- }
- enum "dynamic" {
- value 2;
- description
- "Indicates that the mapping has been dynamically resolved
- using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
- protocol.";
- }
- }
- description
- "The origin of a neighbor entry.";
- }
-
- augment /if:interfaces/if:interface {
- description
- "Parameters for configuring IP on interfaces.
-
- If an interface is not capable of running IP, the server
- must not allow the client to configure these parameters.";
- container ipv4 {
- presence
- "Enables IPv4 unless the 'enabled' leaf
- (which defaults to 'true') is set to 'false'";
- description
- "Parameters for the IPv4 address family.";
- leaf enabled {
- type boolean;
- default 'true';
- description
- "Controls whether IPv4 is enabled or disabled on this
- interface. When IPv4 is enabled, this interface is
- connected to an IPv4 stack, and the interface can send
- and receive IPv4 packets.";
- }
-
- leaf forwarding {
- type boolean;
- default 'false';
- description
- "Controls IPv4 packet forwarding of datagrams received by,
- but not addressed to, this interface. IPv4 routers
- forward datagrams. IPv4 hosts do not (except those
- source-routed via the host).";
- }
-
- leaf mtu {
- type uint16 {
- range "68..max";
- }
- units "octets";
- description
- "The size, in octets, of the largest IPv4 packet that the
- interface will send and receive.
-
- The server may restrict the allowed values for this leaf,
- depending on the interface's type.
-
- If this leaf is not configured, the operationally used MTU
- depends on the interface's type.";
- reference
- "RFC 791: Internet Protocol";
-
- }
-
- 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 {
- if-feature ipv4-non-contiguous-netmasks;
- type yang:dotted-quad;
- description
- "The subnet specified as a netmask.";
- }
- } // 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
- } // container ipv4
-
- container ipv6 {
- presence
- "Enables IPv6 unless the 'enabled' leaf
- (which defaults to 'true') is set to 'false'";
- description
- "Parameters for the IPv6 address family.";
- leaf enabled {
- type boolean;
- default 'true';
- description
- "Controls whether IPv6 is enabled or disabled on this
- interface. When IPv6 is enabled, this interface is
- connected to an IPv6 stack, and the interface can send
- and receive IPv6 packets.";
- }
-
- leaf forwarding {
- type boolean;
- default 'false';
- description
- "Controls IPv6 packet forwarding of datagrams received by,
- but not addressed to, this interface. IPv6 routers
- forward datagrams. IPv6 hosts do not (except those
- source-routed via the host).";
- reference
- "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
- Section 6.2.1, IsRouter";
-
- }
-
- leaf mtu {
- type uint32 {
- range "1280..max";
- }
- units "octets";
- description
- "The size, in octets, of the largest IPv6 packet that the
- interface will send and receive.
-
- The server may restrict the allowed values for this leaf,
- depending on the interface's type.
-
- If this leaf is not configured, the operationally used MTU
- depends on the interface's type.";
- reference
- "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
- Section 5";
-
- }
-
- 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
-
- leaf dup-addr-detect-transmits {
- type uint32;
- default '1';
- description
- "The number of consecutive Neighbor Solicitation messages
- sent while performing Duplicate Address Detection on a
- tentative address. A value of zero indicates that
- Duplicate Address Detection is not performed on
- tentative addresses. A value of one indicates a single
- transmission with no follow-up retransmissions.";
- reference
- "RFC 4862: IPv6 Stateless Address Autoconfiguration";
-
- }
-
- container autoconf {
- description
- "Parameters to control the autoconfiguration of IPv6
- addresses, as described in RFC 4862.";
- reference
- "RFC 4862: IPv6 Stateless Address Autoconfiguration";
-
- leaf create-global-addresses {
- type boolean;
- default 'true';
- description
- "If enabled, the host creates global addresses as
- described in RFC 4862.";
- reference
- "RFC 4862: IPv6 Stateless Address Autoconfiguration
- Section 5.5";
-
- }
-
- leaf create-temporary-addresses {
- if-feature ipv6-privacy-autoconf;
- type boolean;
- default 'false';
- description
- "If enabled, the host creates temporary addresses as
- described in RFC 4941.";
- reference
- "RFC 4941: Privacy Extensions for Stateless Address
- Autoconfiguration in IPv6";
-
- }
-
- leaf temporary-valid-lifetime {
- if-feature ipv6-privacy-autoconf;
- type uint32;
- units "seconds";
- default '604800';
- description
- "The time period during which the temporary address
- is valid.";
- reference
- "RFC 4941: Privacy Extensions for Stateless Address
- Autoconfiguration in IPv6
- - TEMP_VALID_LIFETIME";
-
- }
-
- leaf temporary-preferred-lifetime {
- if-feature ipv6-privacy-autoconf;
- type uint32;
- units "seconds";
- default '86400';
- description
- "The time period during which the temporary address is
- preferred.";
- reference
- "RFC 4941: Privacy Extensions for Stateless Address
- Autoconfiguration in IPv6
- - TEMP_PREFERRED_LIFETIME";
-
- }
- } // container autoconf
- } // container ipv6
- }
-
- augment /if:interfaces-state/if:interface {
- description
- "Data nodes for the operational state of IP on interfaces.";
- container ipv4 {
- presence
- "Present if IPv4 is enabled on this interface";
- config false;
- description
- "Interface-specific parameters for the IPv4 address family.";
- leaf forwarding {
- type boolean;
- description
- "Indicates whether IPv4 packet forwarding is enabled or
- disabled on this interface.";
- }
-
- leaf mtu {
- type uint16 {
- range "68..max";
- }
- units "octets";
- description
- "The size, in octets, of the largest IPv4 packet that the
- interface will send and receive.";
- reference
- "RFC 791: Internet Protocol";
-
- }
-
- list address {
- key "ip";
- description
- "The list of IPv4 addresses on the interface.";
- leaf ip {
- type inet:ipv4-address-no-zone;
- description
- "The IPv4 address on the interface.";
- }
-
- choice subnet {
- 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 {
- if-feature ipv4-non-contiguous-netmasks;
- type yang:dotted-quad;
- description
- "The subnet specified as a netmask.";
- }
- } // choice subnet
-
- leaf origin {
- type ip-address-origin;
- description
- "The origin of this address.";
- }
- } // list address
-
- list neighbor {
- key "ip";
- description
- "A list of mappings from IPv4 addresses to
- link-layer addresses.
-
- This list represents 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;
- description
- "The link-layer address of the neighbor node.";
- }
-
- leaf origin {
- type neighbor-origin;
- description
- "The origin of this neighbor entry.";
- }
- } // list neighbor
- } // container ipv4
-
- container ipv6 {
- presence
- "Present if IPv6 is enabled on this interface";
- config false;
- description
- "Parameters for the IPv6 address family.";
- leaf forwarding {
- type boolean;
- default 'false';
- description
- "Indicates whether IPv6 packet forwarding is enabled or
- disabled on this interface.";
- reference
- "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
- Section 6.2.1, IsRouter";
-
- }
-
- leaf mtu {
- type uint32 {
- range "1280..max";
- }
- units "octets";
- description
- "The size, in octets, of the largest IPv6 packet that the
- interface will send and receive.";
- reference
- "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
- Section 5";
-
- }
-
- list address {
- key "ip";
- description
- "The list of 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.";
- }
-
- leaf origin {
- type ip-address-origin;
- description
- "The origin of this address.";
- }
-
- leaf status {
- type enumeration {
- enum "preferred" {
- value 0;
- description
- "This is a valid address that can appear as the
- destination or source address of a packet.";
- }
- enum "deprecated" {
- value 1;
- description
- "This is a valid but deprecated address that should
- no longer be used as a source address in new
- communications, but packets addressed to such an
- address are processed as expected.";
- }
- enum "invalid" {
- value 2;
- description
- "This isn't a valid address, and it shouldn't appear
- as the destination or source address of a packet.";
- }
- enum "inaccessible" {
- value 3;
- description
- "The address is not accessible because the interface
- to which this address is assigned is not
- operational.";
- }
- enum "unknown" {
- value 4;
- description
- "The status cannot be determined for some reason.";
- }
- enum "tentative" {
- value 5;
- description
- "The uniqueness of the address on the link is being
- verified. Addresses in this state should not be
- used for general communication and should only be
- used to determine the uniqueness of the address.";
- }
- enum "duplicate" {
- value 6;
- description
- "The address has been determined to be non-unique on
- the link and so must not be used.";
- }
- enum "optimistic" {
- value 7;
- description
- "The address is available for use, subject to
- restrictions, while its uniqueness on a link is
- being verified.";
- }
- }
- description
- "The status of an address. Most of the states correspond
- to states from the IPv6 Stateless Address
- Autoconfiguration protocol.";
- reference
- "RFC 4293: Management Information Base for the
- Internet Protocol (IP)
- - IpAddressStatusTC
- RFC 4862: IPv6 Stateless Address Autoconfiguration";
-
- }
- } // list address
-
- list neighbor {
- key "ip";
- description
- "A list of mappings from IPv6 addresses to
- link-layer addresses.
-
- This list represents 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;
- description
- "The link-layer address of the neighbor node.";
- }
-
- leaf origin {
- type neighbor-origin;
- description
- "The origin of this neighbor entry.";
- }
-
- leaf is-router {
- type empty;
- description
- "Indicates that the neighbor node acts as a router.";
- }
-
- leaf state {
- type enumeration {
- enum "incomplete" {
- value 0;
- description
- "Address resolution is in progress, and the link-layer
- address of the neighbor has not yet been
- determined.";
- }
- enum "reachable" {
- value 1;
- description
- "Roughly speaking, the neighbor is known to have been
- reachable recently (within tens of seconds ago).";
- }
- enum "stale" {
- value 2;
- description
- "The neighbor is no longer known to be reachable, but
- until traffic is sent to the neighbor no attempt
- should be made to verify its reachability.";
- }
- enum "delay" {
- value 3;
- description
- "The neighbor is no longer known to be reachable, and
- traffic has recently been sent to the neighbor.
- Rather than probe the neighbor immediately, however,
- delay sending probes for a short while in order to
- give upper-layer protocols a chance to provide
- reachability confirmation.";
- }
- enum "probe" {
- value 4;
- description
- "The neighbor is no longer known to be reachable, and
- unicast Neighbor Solicitation probes are being sent
- to verify reachability.";
- }
- }
- description
- "The Neighbor Unreachability Detection state of this
- entry.";
- reference
- "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
- Section 7.3.2";
-
- }
- } // list neighbor
- } // container ipv6
- }
-} // module ietf-ip
diff --git a/v3po/api/src/main/yang/ietf-packet-fields.yang b/v3po/api/src/main/yang/ietf-packet-fields.yang
deleted file mode 100644
index 0b1ce5cdd..000000000
--- a/v3po/api/src/main/yang/ietf-packet-fields.yang
+++ /dev/null
@@ -1,180 +0,0 @@
-module ietf-packet-fields {
- yang-version 1.1;
- namespace "urn:ietf:params:xml:ns:yang:ietf-packet-fields";
- prefix packet-fields;
- import ietf-inet-types {
- prefix inet;
- }
- import ietf-yang-types {
- prefix yang;
- }
- organization "IETF NETMOD (NETCONF Data Modeling Language) Working
- Group";
- contact
- "WG Web: http://tools.ietf.org/wg/netmod/
- WG List: netmod@ietf.org
- WG Chair: Juergen Schoenwaelder
- j.schoenwaelder@jacobs-university.de
- WG Chair: Tom Nadeau
- tnadeau@lucidvision.com
- Editor: Dean Bogdanovic
- deanb@juniper.net
- Editor: Kiran Agrahara Sreenivasa
- kkoushik@cisco.com
- Editor: Lisa Huang
- lyihuang16@gmail.com
- Editor: Dana Blair
- dblair@cisco.com";
- description
- "This YANG module defines groupings that are used by
- ietf-access-control-list YANG module. Their usage is not
- limited to ietf-access-control-list and can be
- used anywhere as applicable.
- Copyright (c) 2015 IETF Trust and the persons identified as
- the document authors. All rights reserved.
- Redistribution and use in source and binary forms, with or
- without modification, is permitted pursuant to, and subject
- to the license terms contained in, the Simplified BSD
- License set forth in Section 4.c of the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info).
- This version of this YANG module is part of RFC XXXX; see
- the RFC itself for full legal notices.";
- revision 2016-07-08 {
- description
- "Initial version of packet fields used by
- ietf-access-control-list";
- reference
- "RFC XXXX: Network Access Control List (ACL)
- YANG Data Model";
- }
- grouping acl-transport-header-fields {
- description
- "Transport header fields";
- container source-port-range {
- presence "Enables setting source port range";
- description
- "Inclusive range representing source ports to be used.
- When only lower-port is present, it represents a single port.";
- leaf lower-port {
- type inet:port-number;
- mandatory true;
- description
- "Lower boundary for port.";
- }
- leaf upper-port {
- type inet:port-number;
- must ". >= ../lower-port" {
- error-message
- "The upper-port must be greater than or equal to lower-port";
- }
- description
- "Upper boundary for port . If existing, the upper port
- must be greater or equal to lower-port.";
- }
- }
- container destination-port-range {
- presence "Enables setting destination port range";
- description
- "Inclusive range representing destination ports to be used. When
- only lower-port is present, it represents a single port.";
- leaf lower-port {
- type inet:port-number;
- mandatory true;
- description
- "Lower boundary for port.";
- }
- leaf upper-port {
- type inet:port-number;
- must ". >= ../lower-port" {
- error-message
- "The upper-port must be greater than or equal to lower-port";
- }
-
- description
- "Upper boundary for port. If existing, the upper port must
- be greater or equal to lower-port";
- }
- }
- }
- grouping acl-ip-header-fields {
- description
- "IP header fields common to ipv4 and ipv6";
- leaf dscp {
- type inet:dscp;
- description
- "Value of dscp.";
- }
- leaf protocol {
- type uint8;
- description
- "Internet Protocol number.";
- }
- uses acl-transport-header-fields;
- }
- grouping acl-ipv4-header-fields {
- description
- "Fields in IPv4 header.";
- leaf destination-ipv4-network {
- type inet:ipv4-prefix;
- description
- "Destination IPv4 address prefix.";
- }
- leaf source-ipv4-network {
- type inet:ipv4-prefix;
- description
- "Source IPv4 address prefix.";
- }
- }
- grouping acl-ipv6-header-fields {
- description
- "Fields in IPv6 header";
- leaf destination-ipv6-network {
- type inet:ipv6-prefix;
- description
- "Destination IPv6 address prefix.";
- }
- leaf source-ipv6-network {
- type inet:ipv6-prefix;
- description
- "Source IPv6 address prefix.";
- }
- leaf flow-label {
- type inet:ipv6-flow-label;
- description
- "IPv6 Flow label.";
- }
- reference
- "RFC 4291: IP Version 6 Addressing Architecture
- RFC 4007: IPv6 Scoped Address Architecture
- RFC 5952: A Recommendation for IPv6 Address Text Representation";
- }
- grouping acl-eth-header-fields {
- description
- "Fields in Ethernet header.";
- leaf destination-mac-address {
- type yang:mac-address;
- description
- "Destination IEEE 802 MAC address.";
- }
- leaf destination-mac-address-mask {
- type yang:mac-address;
- description
- "Destination IEEE 802 MAC address mask.";
- }
- leaf source-mac-address {
- type yang:mac-address;
- description
- "Source IEEE 802 MAC address.";
- }
- leaf source-mac-address-mask {
- type yang:mac-address;
- description
- "Source IEEE 802 MAC address mask.";
- }
- reference
- "IEEE 802: IEEE Standard for Local and Metropolitan Area
- Networks: Overview and Architecture.";
- }
-
-} \ 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/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.yang b/v3po/api/src/main/yang/v3po.yang
deleted file mode 100644
index 18b68620e..000000000
--- a/v3po/api/src/main/yang/v3po.yang
+++ /dev/null
@@ -1,716 +0,0 @@
-module v3po {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:v3po";
- prefix "v3po";
-
- 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";
- }
-
- 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";
- }
- import vpp-acl {
- prefix "vpp-acl";
- }
-
- typedef bridge-domain-ref {
- type leafref {
- path "/vpp/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;
- }
- }
- }
-
- 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 {
- type string;
- // mandatory true;
- // mandatory for forward action
- // FIXME VPP's CLI does not require to set iface id for filter action
- // VPP's binary api in constrast to CLI does some checks on the iface id value,
- // so currently it has to be set for all actions
- 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 tap-interface-base-attributes {
- leaf tap-name {
- type string{
- pattern "[a-zA-Z0-9\-;.+@$#^&*!_()=\[\]]*";
- }
- }
- }
-
- 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 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";
- }
- 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;
- }
- }
-
- 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;
- }
- }
-
- 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-base-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; // todo use interface-state-ref for operational data?
- description
- "L2 xconnect mode";
- }
- }
- case bridge-based {
- 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 proxy-arp-attributes {
- description
- "Parameters for configuring Proxy ARP on interfaces.";
-
- leaf vrf-id {
- type uint32;
- default 0;
- }
- leaf low-addr {
- type inet:ipv4-address;
- }
- leaf high-addr {
- type inet:ipv4-address;
- }
- }
-
- 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 {
- // TODO (HONEYCOMB-127): add routing info for oper
- leaf ipv4-vrf-id {
- type uint32;
- }
- leaf ipv6-vrf-id {
- type uint32;
- }
- description
- "Defines VRF tables used for ipv4 and ipv6 traffic";
- }
-
- container vhost-user {
- when "../if:type = 'v3po:vhost-user'";
- uses vhost-user-interface-base-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-base-attributes;
- }
-
- container vxlan-gpe {
- when "../if:type = 'v3po:vxlan-gpe-tunnel'";
-
- uses vxlan-gpe-base-attributes;
- }
-
- container proxy-arp {
- uses proxy-arp-attributes;
- }
-
- container acl {
- container ingress {
- uses vpp-acl:acl-base-attributes;
- }
- container egress {
- uses vpp-acl:acl-base-attributes;
- }
- }
-
- container ietf-acl {
- container ingress {
- uses vpp-acl:ietf-acl-base-attributes;
- }
- container egress {
- uses vpp-acl:ietf-acl-base-attributes;
- }
- }
- }
-
- container vpp {
- description
- "VPP config data";
-
- container bridge-domains {
- 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 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-base-attributes;
- }
-
- container proxy-arp {
- uses proxy-arp-attributes;
- }
-
- container acl {
- container ingress {
- uses vpp-acl:acl-base-attributes;
- }
- container egress {
- uses vpp-acl:acl-base-attributes;
- }
- }
-
- container ietf-acl {
- container ingress {
- uses vpp-acl:ietf-acl-base-attributes;
- }
- container egress {
- uses vpp-acl:ietf-acl-base-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 vpp-state {
- config false;
-
- description
- "VPP operational data";
-
- container bridge-domains {
- // FIXME: Should this live in bridge-domain.yang in a modular fashion ?
- list bridge-domain {
-
- key "name";
- leaf name {
- type string;
- }
-
- uses bridge-domain-attributes;
- uses l2-fib-attributes;
-
- description
- "bridge-domain operational data";
- }
- }
-
- container version {
- leaf name {
- type string;
- }
- leaf build-directory {
- type string;
- }
- leaf build-date {
- type string;
- }
- leaf branch {
- type string;
- }
- leaf pid {
- type uint32;
- description
- "PID of the vpp process";
- }
- description
- "vlib version info";
- }
- }
-
- // 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-acl.yang b/v3po/api/src/main/yang/vpp-acl.yang
deleted file mode 100644
index f0c93f45e..000000000
--- a/v3po/api/src/main/yang/vpp-acl.yang
+++ /dev/null
@@ -1,160 +0,0 @@
-module vpp-acl {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:vpp:acl";
- prefix "vpp-acl";
-
- revision "2016-12-14" {
- description
- "Initial revision of vpp-acl model.";
- }
-
- import ietf-access-control-list {
- prefix "acl";
- }
-
- import vpp-classifier {
- prefix "vpp-classifier";
- }
-
- import yang-ext {
- prefix "ext";
- }
-
- import ietf-packet-fields {
- prefix packet-fields;
- }
-
- identity mixed-acl {
- base acl:acl-base;
- description
- "ACL that can match on any of L2/L3/L4 fields.";
- }
-
- typedef interface-mode {
- type enumeration {
- enum "l2";
- enum "l3";
- }
- }
-
- grouping acl-base-attributes {
- description
- "Defines references to classify tables.
- At least one table reference should be specified.";
- container l2-acl {
- leaf classify-table {
- type vpp-classifier:classify-table-ref;
- description
- "An L2 ACL table";
- }
- }
- container ip4-acl {
- leaf classify-table {
- type vpp-classifier:classify-table-ref;
- description
- "An IPv4 ACL table";
- }
- }
- container ip6-acl {
- leaf classify-table {
- type vpp-classifier:classify-table-ref;
- description
- "An IPv6 ACL table";
- }
- }
- }
-
- grouping ietf-acl-base-attributes {
- description
- "Provides limited support for ietf-acl model.";
-
- container access-lists {
- description
- "Defines references to ietf-acl lists.
- ACLs are translated into classify tables and sessions when assigned to interface.
-
- In case of L2 interfaces, acls are translated into a chain of classify tables and assigned as L2 table.
- In case of L3 interfaces, acls are translated into ip4 and ip6 chains (eth only rules go to both chains,
- rest - depending on ip-version).
- User ordering is preserved in both cases.
-
- Assignment update/delete removes all created tables and sessions and repeats process described above.
- Update/delete of ACL lists referenced here is not permitted (assignment needs to be removed first).
-
- Read is supported only for acls that were created and assigned by Honeycomb agent
- (corresponding metadata is present).
-
- Extensions:
- - mixing ACEs of different type in one list is permited
- - mixing L2/L3/L4 rules in one ACE is permited
-
- Limitations (due to vpp limitations):
- - egress rules are currently ignored (HONEYCOMB-234)
- - L4 rules support is limited (every <src,dst> port pair from provided ranges is translated to single classify
- session; which can very slow or even crash vpp if ranges are big, see HONEYCOMB-260)
- - ace-ip-version needs to be provided for all aces (consequence of posibility to mix ACEs of different types,
- and vpp classfier api limitation: common header fields for IP4/IP6 have different offsets)
- - L2 rules on L3 interfaces are applied only to IP traffic (vpp classfier limitation)
- - vlan tags are supported only for sub-interfaces defined as exact-match";
-
- list acl {
- key "type name";
- ordered-by user;
-
- leaf type {
- type acl:acl-type;
- }
-
- leaf name {
- type acl:access-control-list-ref;
- }
- }
-
- leaf default-action {
- type enumeration {
- enum "deny";
- enum "permit";
- }
- default "deny";
- description
- "Default action applied to packet that does not match any of rules defined in assigned ACLs.
- It is translated to single classify table and applied at the end of assigned chains.";
- }
-
- leaf mode {
- type interface-mode;
- default l3;
- description
- "The way ACLs are translated depends on the interface mode.
- In case of L2 interfaces (bridge/interconnection)
- classify tables are assigned as l2_table using input_acl_set_interface (ether type matching is automatically
- added in case of L3 rules).
- In case of L3 interfaces, classify tables are assigned as ip4/ip6 tables.
-
- It is the user responsibility to choose mode that matches target interface.
- ";
- }
- }
- }
-
- augment /acl:access-lists/acl:acl/acl:access-list-entries/acl:ace/acl:matches/acl:ace-type {
- ext:augment-identifier "vpp-acl-type-augmentation";
- case ace-ip-and-eth {
- description
- "Access List entry that can define both ip and eth rules.";
- choice ace-ip-version {
- description
- "IP version used in this Access List Entry.";
- mandatory true;
- case ace-ipv4 {
- uses packet-fields:acl-ipv4-header-fields;
- }
- case ace-ipv6 {
- uses packet-fields:acl-ipv6-header-fields;
- }
- }
- uses packet-fields:acl-ip-header-fields;
- uses packet-fields:acl-eth-header-fields;
- }
- }
-} \ No newline at end of file
diff --git a/v3po/api/src/main/yang/vpp-classifier-context.yang b/v3po/api/src/main/yang/vpp-classifier-context.yang
deleted file mode 100644
index 01eae862d..000000000
--- a/v3po/api/src/main/yang/vpp-classifier-context.yang
+++ /dev/null
@@ -1,68 +0,0 @@
-module vpp-classifier-context {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:vpp:classifier";
- prefix "vpp-classifier-context";
-
- description
- "This module contains vpp classfier metadata definition";
-
- revision "2016-09-09" {
- description
- "Initial revision.";
- }
-
- container vpp-classifier-context {
-
- config "false";
-
- description
- "Classify tables and sessions contain relative node indexes. Management agent like Honeycomb,
- needs to use node names instead (indexes might change after vpp restart).
- VPP does not provide relative index to node name conversion (https://jira.fd.io/browse/VPP-219),
- also finding base node that is needed to perform the conversion
- is not allways possible (https://jira.fd.io/browse/VPP-220).
-
- Therefore Honeycomb needs to provide relative node to index mapping.
- ";
-
- list classify-table-context {
- key "name";
- unique "index";
-
- leaf name {
- type string;
- description
- "Name of the classify table.";
- }
-
- leaf index {
- type int32;
- description
- "Classify table index used by VPP.";
- }
-
- leaf classifier-node-name {
- type string;
- description
- "Name of VPP node the table is defined for.";
- }
-
- list node-context {
- key "name";
- unique "index";
-
- leaf name {
- type string;
- description
- "Name of vpp node (neighbour of classifier-node-name)";
- }
-
- leaf index {
- type int32;
- description
- "Inted of the vpp node relative to classifier-node-name";
- }
- }
- }
- }
-} \ No newline at end of file
diff --git a/v3po/api/src/main/yang/vpp-classifier.yang b/v3po/api/src/main/yang/vpp-classifier.yang
deleted file mode 100644
index ea2788289..000000000
--- a/v3po/api/src/main/yang/vpp-classifier.yang
+++ /dev/null
@@ -1,215 +0,0 @@
-module vpp-classifier {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:vpp:classifier";
- prefix "vpp-classifier";
-
- revision "2016-12-14" {
- description
- "This revision adds the following new features:
- - updates order of union types for opaque-index";
- }
-
- revision "2015-06-03" {
- description
- "Initial revision of model for VPP packet classifier.
- The model can be used ony to implement ACLs.
- Other classify table usages are not supported yet,
- see https://jira.fd.io/browse/VPP-203 for details.";
- reference
- "https://wiki.fd.io/view/VPP/Introduction_To_N-tuple_Classifiers";
- }
-
- import ietf-yang-types {
- prefix "yang";
- }
-
- typedef classify-table-ref {
- type leafref {
- path "/vpp-classifier:vpp-classifier/classify-table/name";
- }
- description
- "This type is used by data models that need to reference
- configured classify tables.";
- }
-
- typedef packet-handling-action {
- type enumeration {
- enum "deny" {
- // by VPP convention, first neighbour node (at index 0) is a drop node
- value 0;
- }
- enum "permit" {
- value -1; // indicates that the next node not set
- }
- }
- }
-
- typedef vpp-node-name {
- type string;
- }
-
- typedef vpp-node {
- type union {
- type packet-handling-action;
- type vpp-node-name;
- }
- description
- "Defines VPP node reference using packet handling action or relative node name
- (if definition in terms of packet handling action is not possible).";
- }
-
- typedef opaque-index {
- type union {
- type uint32;
- type vpp-node;
- }
- description
- "Defines opaque-index type - metadata that can be attached to session-hit packets.
- Vpp nodes can't be referenced by index, because node indexes might change after vpp restart.";
- }
-
- grouping classify-session-attributes {
- description
- "Defines classify session attributes that are mapped to classify_add_del_session
- and classify_session_details messages parameters.";
-
- leaf hit_next {
- type vpp-node;
- mandatory true;
- description
- "Vpp node to which packet will be send when it produces a match.";
- }
- leaf opaque_index {
- type opaque-index;
- }
- leaf advance {
- type int32;
- default 0;
- description
- "Nodes like ip4/6-classify use the parameter to \"consume\" networking layer.
- Example: tunnel decapsulation.";
- }
- }
-
- grouping classify-table-base-attributes {
- description
- "Defines classify table attributes that are mapped to classify_add_del_table message parameters.";
-
- leaf classifier-node {
- type vpp-node-name;
- description
- "Name of VPP node the table is defined for.";
- }
- leaf nbuckets {
- mandatory true;
- type uint32;
- description
- "Used by classifier hashing algorithm. It is not possible to resize the bucket array,
- therefore suggested value is approximate number of expected entries.";
- }
- leaf skip_n_vectors {
- type uint32;
- default 0;
- description
- "Number of 16 byte vectors to be skipped before applying mask.";
- }
- leaf next_table {
- type classify-table-ref;
- description
- "Reference to the next classify table. Required when multiple table chaining is used.";
- }
- leaf miss_next {
- mandatory true;
- type vpp-node;
- description
- "Vpp node to which packet will be send when it falis to produce a match";
- }
- leaf mask {
- type yang:hex-string;
- mandatory true;
- description
- "Defines match mask (multiple of 16 bytes)";
- }
-
- list classify-session {
- key "match";
-
- leaf match {
- type yang:hex-string;
- description
- "Defines actual value to be matched that is
- a byte vector, which length is multiple of 16 bytes";
-
- must "string-length(match) = string-length(../../mask)" {
- error-message
- "Match length is not equal to classify table mask length.";
- description
- "Match length must be equal to classify table mask length.";
- }
- }
-
- uses classify-session-attributes;
- }
- }
-
- grouping classify-table-config-attributes {
- description
- "Defines classify table config only attributes (present in classify_add_del_table message
- but not in classify_table_info_reply).";
-
- // FIXME move to classify-table-base-attributes
- // after https://jira.fd.io/browse/VPP-208 is fixed
- leaf memory_size {
- type uint32;
- mandatory true;
- description
- "Memory size for classify table and its entries.";
- }
- }
-
- grouping classify-table-operational-attributes {
- description
- "Defines classify table operational attributes (present in classify_table_info_reply message
- but not in classify_add_del_table).";
-
- leaf active_sessions {
- type uint32;
- config false;
- description
- "Number of sessions defined for the classify table.";
- }
- }
-
- container vpp-classifier {
- list classify-table {
- key "name";
-
- leaf name {
- type string;
- description
- "Hides classify table identifier managed by vpp.";
- }
-
- uses classify-table-base-attributes;
- uses classify-table-config-attributes;
- }
- }
-
- container vpp-classifier-state {
- config false;
-
- list classify-table {
- key "name";
-
- leaf name {
- type string;
- description
- "Hides classify table identifier managed by vpp.";
- }
-
- uses classify-table-base-attributes;
- uses classify-table-operational-attributes;
- }
- }
-
-}
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-vlan.yang b/v3po/api/src/main/yang/vpp-vlan.yang
deleted file mode 100644
index cd3d320ee..000000000
--- a/v3po/api/src/main/yang/vpp-vlan.yang
+++ /dev/null
@@ -1,443 +0,0 @@
-module vpp-vlan {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:vpp:vlan";
- prefix "vpp-vlan";
-
- 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;
- }
- import vpp-acl {
- prefix vpp-acl;
- }
-
- 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;
- }
-
- container l2 {
- uses v3po:l2-base-attributes;
- container rewrite {
- uses tag-rewrite;
- }
- }
-
- container acl {
- container ingress {
- uses vpp-acl:acl-base-attributes;
- }
- container egress {
- uses vpp-acl:acl-base-attributes;
- }
- }
-
- container ietf-acl {
- container ingress {
- uses vpp-acl:ietf-acl-base-attributes;
- }
- container egress {
- uses vpp-acl:ietf-acl-base-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
- }
- }
-
- 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;
- }
- }
- }
-
- 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;
- }
- }
- }
-
-}