diff options
author | Michal Cmarada <mcmarada@cisco.com> | 2018-10-09 16:08:58 +0200 |
---|---|---|
committer | Michal Cmarada <mcmarada@cisco.com> | 2018-10-10 13:38:38 +0000 |
commit | b3c731b754efc83230ea49cc579f8101b8750190 (patch) | |
tree | e9a4e82afcc7f333f6e4c53b49bdd331d8385ffe /v3po/api/src/main/yang/v3po@2018-07-03.yang | |
parent | f6c5ea411cbc015f534ef0aab2c343711d3392c7 (diff) |
HC2VPP-390: Tap v2 interface API
- added support for Tap v2 in v3po yang model
- fixed pattern for tap-name
Change-Id: Id4c02d56879ca87f370396c920fb599dd7741594
Signed-off-by: Michal Cmarada <mcmarada@cisco.com>
Diffstat (limited to 'v3po/api/src/main/yang/v3po@2018-07-03.yang')
-rw-r--r-- | v3po/api/src/main/yang/v3po@2018-07-03.yang | 853 |
1 files changed, 0 insertions, 853 deletions
diff --git a/v3po/api/src/main/yang/v3po@2018-07-03.yang b/v3po/api/src/main/yang/v3po@2018-07-03.yang deleted file mode 100644 index bee9384cd..000000000 --- a/v3po/api/src/main/yang/v3po@2018-07-03.yang +++ /dev/null @@ -1,853 +0,0 @@ -module v3po { - yang-version 1; - namespace "urn:opendaylight:params:xml:ns:yang:v3po"; - prefix "v3po"; - - import iana-if-type { - prefix "ianaift"; - } - import ietf-interfaces { - prefix "if"; - } - import ietf-yang-types { - prefix "yang"; - } - import ietf-inet-types { - prefix "inet"; - } - import yang-ext { - prefix "ext"; - } - import vpp-fib-table-management { - prefix fib-management; - revision-date 2018-05-21; - } - - organization - "FD.io - The Fast Data Project"; - - contact - "Hc2vpp Wiki <https://wiki.fd.io/view/Hc2vpp> - Mailing List <hc2vpp@lists.fd.io>"; - - description - "This module contains a collection of YANG definitions - that extend ietf-interfaces module with VPP specific interface types. - - Copyright (c) 2015-2017 Cisco and/or its affiliates. - - Licensed under the Apache License, Version 2.0 (the 'License'); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at: - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an 'AS IS' BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License."; - - revision "2018-07-03" { - description - "Revision changes: - - adds support for af-packet interface - - uses references to fib-management module instead of uint32 identifiers - - changes type of IP addresses from inet:ip-address to inet:ip-address-no-zone - - fixes some minor issues"; - } - - revision "2017-06-07" { - description "Eliminated config leafrefs in operational tree"; - } - - revision "2017-03-15" { - description - "Revision changes: - - acl and ietf-acl moved to vpp-interface-acl - - vpp-state and rpc moved to vpp-management - - bridge domains moved to standalone container"; - } - - revision "2016-12-14" { - description - "This revision adds the following new features: - - ingress/egress ACLs support - - moved ACL definitions to vpp-acl module - - updated l2 container constraint (permit IP address on BVI interface) - - added PID of vpp process to vpp-state - - added support for Loopback interfaces - - added support for port mirroring"; - } - - revision "2015-01-05" { - description "Initial revision of v3po model"; - } - - typedef bridge-domain-ref { - type leafref { - path "/bridge-domains/bridge-domain/name"; - } - description - "This type is used by to reference a bridge domain table"; - } - - typedef bridged-virtual-interface-ref { - type leafref { - path "/if:interfaces/if:interface/l2/bridged-virtual-interface"; - } - description - "This type is used by to reference a bridged virtual interface"; - } - - identity vxlan-tunnel { - base if:interface-type; - } - - identity gre-tunnel { - base if:interface-type; - } - - identity vhost-user { - base if:interface-type; - } - - identity tap { - base if:interface-type; - } - - identity loopback { - base if:interface-type; - } - - identity l2-fib-action { - description "Base identity for l2-fib actions"; - } - - identity l2-fib-forward { - base l2-fib-action; - description - "Forwards packet with configured mac address"; - } - - identity l2-fib-filter { - base l2-fib-action; - description - "Drops packet with configured mac address"; - } - - typedef l2-fib-action { - type identityref { - base "l2-fib-action"; - } - description "Identifies a specific L2 FIB action"; - } - - typedef vxlan-vni { - // FIXME: should be in a vxlan-specific model - description "VXLAN Network Identifier"; - type uint32 { - range "0..16777215"; - } - } - - typedef vhost-user-role { - type enumeration { - enum "server"; - enum "client"; - } - } - - identity vxlan-gpe-tunnel { - base if:interface-type; - } - - identity af-packet { - base if:interface-type; - } - - typedef vxlan-gpe-vni { - description "VNI used in a VXLAN-GPE tunnel"; - type uint32 { - range "0..16777215"; - } - } - - typedef vxlan-gpe-next-protocol { - type enumeration { - enum "ipv4" { - value 1; - } - enum "ipv6" { - value 2; - } - enum "ethernet" { - value 3; - } - enum "nsh" { - value 4; - } - } - } - - - typedef span-state { - type enumeration { - enum "receive" { - value "1"; - description - "Receive (Rx) SPAN—The goal of receive (or ingress) SPAN - is to monitor as much as possible all the packets received by the source interface. - A copy of each packet received by the source is sent to the destination port for that SPAN session. - You can monitor a series or range of ingress ports in a SPAN session."; - } - - enum "transmit" { - value "2"; - description - "Transmit (Tx) SPAN—The goal of transmit (or egress) SPAN is to monitor as much as possible all the packets - sent by the source interface after all modification and processing is performed by the switch. - A copy of each packet sent by the source is sent to the destination port for that SPAN session. - The copy is provided after the packet is modified. Monitors a range of egress ports in a SPAN session."; - } - - enum "both" { - value "3"; - description - "In a SPAN session, you can monitor a series or range of ports for both received and sent packets."; - } - } - } - - grouping bridge-domain-attributes { - leaf flood { - type boolean; - default true; - description - "Enable/disable L2 flooding."; - } - leaf forward { - type boolean; - default true; - description - "Enable/disable L2 forwarding."; - } - leaf learn { - type boolean; - default true; - description - "Enable/disable L2 learning."; - } - leaf unknown-unicast-flood { - type boolean; - default true; - } - leaf arp-termination { - type boolean; - default false; - } - - container arp-termination-table { - when "../v3po:arp-termination = 'true'"; - - // TODO(HONEYCOMB-133): add support for read (after VPP-230 is done) - list arp-termination-table-entry { - key "ip-address phys-address"; - leaf ip-address { - type inet:ip-address-no-zone; - } - leaf phys-address { - type yang:phys-address; - } - } - } - } - - // TODO express constraints for L2 FIB entries in YANG if possible - grouping l2-fib-attributes { - container l2-fib-table { - list l2-fib-entry { - key "phys-address"; - - leaf phys-address { - type yang:phys-address; - } - - leaf outgoing-interface { - // either filter must be specified or interface(can't be both) - when "../action != 'l2-fib-filter'"; - type if:interface-ref; - // mandatory true; - when is not actually resolved, so mandatory can't be in place - description - "One of interfaces assigned to the FIB table's bridge-domain."; - } - leaf static-config { - type boolean; - default false; - description - "Static entries cannot be overridden by mac learning."; - } - leaf action { - type l2-fib-action; - mandatory true; - description - "L2 FIB action. For filter action, entry must be configured as static."; - } - leaf bridged-virtual-interface { - when "../action = 'l2-fib-forward'"; - type boolean; - config false; // FIXME setting bvi is currently not supported by VPP's binary api - } - } - } - } - - grouping interface-tag { - leaf tag { - type string { - length 1..63; - } - description - "ASCII string placeholder for interface metadata. Value is stored in vpp, - and returned in read requests. No processing involved."; - } - } - - grouping tap-interface-base-attributes { - leaf tap-name { - type string{ - pattern "[a-zA-Z0-9\-;.+@$#^&*!_()=\[\]]*"; - } - } - uses interface-tag; - } - - grouping tap-interface-config-attributes { - leaf mac { - type yang:phys-address; - mandatory false; - description "Mac address to be set for the tap interface. Random will be used if not configured"; - } - - leaf device-instance { - type uint32; - mandatory false; - description "Custom device instance. Autogenerated will be used if not configured"; - } - } - - grouping loopback-interface-base-attributes { - leaf mac { - type yang:phys-address; - mandatory false; - description "Mac address of the loopback interface"; - } - } - - grouping ethernet-base-attributes { - leaf mtu { - type uint16 { - range "64..9216"; - } - units "octets"; - default 9216; - description - "The size, in octets, of the largest packet that the - hardware interface will send and receive. - - Mapped to hw_interface_set_mtu VPP API message which programs the NIC."; - } - } - - grouping routing-base-attributes { - leaf ipv4-vrf-id { - type fib-management:fib-table-list-ref; - } - leaf ipv6-vrf-id { - type fib-management:fib-table-list-ref; - } - description - "Defines VRF tables used for ipv4 and ipv6 traffic"; - } - - grouping ethernet-state-attributes { - leaf manufacturer-description { - type string; - config false; - } - leaf duplex { - type enumeration { - enum "half"; - enum "full"; - } - config false; - } - } - - grouping vhost-user-interface-base-attributes { - leaf socket { - type string { - length 1..255; - } - } - leaf role { - type vhost-user-role; - default "server"; - } - uses interface-tag; - description "vhost-user settings"; - } - - grouping vhost-user-interface-config-attributes { - leaf device-instance { - type uint32; - mandatory false; - description "Custom device instance. Autogenerated will be used if not configured"; - } - description "vhost-user settings"; - } - - grouping vhost-user-interface-state-attributes { - leaf features { - type uint64; - config false; - } - leaf virtio-net-hdr-size { - type uint32; - config false; - } - leaf num-memory-regions { - type uint32; - config false; - } - leaf connect-error { - type string; - config false; - } - } - - /* - * Defines the supported decap node for vxlan. - */ - identity decap-node { - description - "Define the supported decap node"; - } - identity l2-input { - base decap-node; - description - "The next decap node is l2-input"; - } - identity nsh-proxy { - base decap-node; - description - "The next decap node is nsh-proxy"; - } - typedef vxlan-decap-node { - type identityref { - base "decap-node"; - } - } - grouping vxlan-base-attributes { - // FIXME: this should be in an vxlan-specific extension - leaf src { - /*mandatory true;*/ - type inet:ip-address-no-zone; - } - leaf dst { - /*mandatory true;*/ - type inet:ip-address-no-zone; - } - leaf vni { - /*mandatory true;*/ - type vxlan-vni; - } - leaf encap-vrf-id { - /*mandatory true;*/ - type fib-management:fib-table-list-ref; - } - leaf decap-next { - type vxlan-decap-node; - default "l2-input"; - } - } - - grouping gre-base-attributes { - leaf src { - /*mandatory true;*/ - type inet:ip-address-no-zone; - } - leaf dst { - /*mandatory true;*/ - type inet:ip-address-no-zone; - } - leaf outer-fib-id { - type uint32; - } - } - - grouping vxlan-gpe-base-attributes { - leaf local { - /*mandatory true;*/ - type inet:ip-address-no-zone; - } - leaf remote { - /*mandatory true;*/ - type inet:ip-address-no-zone; - } - 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 af-packet-base-attributes { - leaf host-interface-name { - type string { - length "1..63"; - } - /* mandatory true; */ - description "Name of the host interface (veth end point)."; - } - leaf mac { - type yang:phys-address; - mandatory false; - description "Mac address to be set for the af-packet interface. Random will be used if not configured."; - } - reference - "https://docs.fd.io/vpp/18.07/clicmd_src_vnet_devices_af_packet.html"; - } - - grouping l2-config-attributes { - description - "Parameters for configuring Layer2 features on interfaces."; - - choice interconnection { - case xconnect-based { - leaf xconnect-outgoing-interface { - /* Don't allow selection of this interface */ - must "../../if:name != current()"; - type if:interface-ref; - description - "L2 xconnect mode"; - } - } - case bridge-based { - uses bridge-based-attributes; - } - } - } - - grouping l2-state-attributes { - description - "Parameters for configuring Layer2 features on interfaces."; - - choice interconnection { - case xconnect-based { - leaf xconnect-outgoing-interface { - /* Don't allow selection of this interface */ - must "../../if:name != current()"; - type if:interface-state-ref; - description - "L2 xconnect mode"; - } - } - case bridge-based { - uses bridge-based-attributes; - } - } - } - - grouping bridge-based-attributes { - leaf bridge-domain { - type bridge-domain-ref; - mandatory true; - description - "Interfaces in a bridge-domain forward packets to other - interfaces in the same bridge-domain based on - destination mac address."; - } - leaf split-horizon-group { - when "../bridge-domain"; - type uint8 { - range "0..255"; - } - default 0; //no split horizon group - description - "Interface's split-horizon group. Interfaces in the same - bridge-domain and split-horizon group can not forward - packets between each other. "; - } - leaf bridged-virtual-interface { - when "../bridge-domain"; - type boolean; - default false; - description - "Interface forward packets in the bridge-domain - associated with the BVI."; - } - } - - grouping span-attributes { - description "Parameters of the SPAN feature"; - - container mirrored-interfaces { - list mirrored-interface { - key "iface-ref"; - leaf iface-ref { - type if:interface-ref; - } - - leaf state { - type span-state; - mandatory true; - } - } - } - } - - grouping span-state-attributes { - description "Parameters of the SPAN feature"; - - container mirrored-interfaces { - list mirrored-interface { - key "iface-ref"; - leaf iface-ref { - type if:interface-state-ref; - } - - leaf state { - type span-state; - mandatory true; - } - } - } - } - - augment /if:interfaces/if:interface { - ext:augment-identifier "vpp-interface-augmentation"; - - // FIXME using ietf-interfaces model for vpp interfaces makes it hard to implement because: - // 1. The link between interface type and this augmentation is unclear - // 2. Only this augmentation with combination of ifc type is trigger to do something for vpp, what if user only configures base interface stuff ? + We need to get leaves defined by ietf-interfaces when we are processing this augment - // 3. The ietf-interfaces model does not define groupings which makes types reuse difficult - - container tap { - when "../if:type = 'v3po:tap'"; - uses tap-interface-base-attributes; - uses tap-interface-config-attributes; - } - - container loopback { - presence "Presence of this container indicates loopback nature of the interface"; - when "../if:type = 'v3po:loopback'"; - uses loopback-interface-base-attributes; - } - - container ethernet { - when "../if:type = 'ianaift:ethernetCsmacd'"; - uses ethernet-base-attributes; - } - - container routing { - uses routing-base-attributes; - } - - container vhost-user { - when "../if:type = 'v3po:vhost-user'"; - uses vhost-user-interface-base-attributes; - uses vhost-user-interface-config-attributes; - } - - container vxlan { - when "../if:type = 'v3po:vxlan-tunnel'"; - uses vxlan-base-attributes; - } - - container gre { - when "../if:type = 'v3po:gre-tunnel'"; - uses gre-base-attributes; - } - - container l2 { - must "bridged-virtual-interface = 'true' or " + - "(not (../if:ipv4[if:enabled = 'true']/if:address/if:ip) and " + - "not (../if:ipv6[if:enabled = 'true']/if:address/if:ip))"; - - uses l2-config-attributes; - } - - container vxlan-gpe { - when "../if:type = 'v3po:vxlan-gpe-tunnel'"; - - uses vxlan-gpe-base-attributes; - } - - container af-packet { - when "../if:type = 'v3po:af-packet'"; - uses af-packet-base-attributes; - } - - container span { - uses span-attributes; - } - } - - container bridge-domains { - presence "Bridge domains configuration"; - list bridge-domain { - key "name"; - - leaf name { - type string; - } - - uses bridge-domain-attributes; - uses l2-fib-attributes; - - description - "bridge-domain configuration"; - } - } - - augment /if:interfaces-state/if:interface { - ext:augment-identifier "vpp-interface-state-augmentation"; - - leaf description { - type string; - } - - container tap { - when "../if:type = 'v3po:tap'"; - uses tap-interface-base-attributes; - } - - container ethernet { - when "../if:type = 'ianaift:ethernetCsmacd'"; - uses ethernet-base-attributes; - uses ethernet-state-attributes; - } - - container routing { - uses routing-base-attributes; - } - - container vhost-user { - when "../if:type = 'v3po:vhost-user'"; - uses vhost-user-interface-base-attributes; - uses vhost-user-interface-state-attributes; - } - - container vxlan { - when "../if:type = 'v3po:vxlan-tunnel'"; - uses vxlan-base-attributes; - } - container vxlan-gpe { - when "../if:type = 'v3po:vxlan-gpe-tunnel'"; - - uses vxlan-gpe-base-attributes; - } - - container gre { - when "../if:type = 'gre-tunnel'"; - uses gre-base-attributes; - } - - container l2 { - must "bridged-virtual-interface = 'true' or " + - "(not (../if:ipv4[if:enabled = 'true']/if:address/if:ip) and " + - "not (../if:ipv6[if:enabled = 'true']/if:address/if:ip))"; - - uses l2-state-attributes; - } - - container af-packet { - when "../if:type = 'v3po:af-packet'"; - uses af-packet-base-attributes; - } - - container span { - uses span-state-attributes; - } - } - - augment /if:interfaces-state/if:interface/if:statistics { - ext:augment-identifier "vpp-interface-statistics-augmentation"; - leaf in-errors-no-buf { - type yang:counter64; - } - leaf in-errors-miss { - type yang:counter64; - } - leaf out-discards-fifo-full { - type yang:counter64; - } - } - - container bridge-domains-state { - // FIXME: Should this live in bridge-domain.yang in a modular fashion ? - config "false"; - list bridge-domain { - - key "name"; - leaf name { - type string; - } - - uses bridge-domain-attributes; - uses l2-fib-attributes; - - description - "bridge-domain operational data"; - } - } - - // VPP Notifications - - typedef interface-status { - type enumeration { - enum up { - value 1; - } - enum down { - value 0; - } - } - } - - typedef interface-name-or-index { - type union { - type string; - type uint32; - } - } - - notification interface-state-change { - leaf name { - type interface-name-or-index; - } - - leaf admin-status { - type interface-status; - } - - leaf oper-status { - type interface-status; - } - } - - notification interface-deleted { - leaf name { - type interface-name-or-index; - } - } -} |