/* * * Copyright 2016-2017 RIFT.IO Inc * * 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. * * */ module vnfr { namespace "urn:ietf:params:xml:ns:yang:nfvo:vnfr"; prefix "vnfr"; import mano-types { prefix "manotypes"; } import rw-pb-ext { prefix "rwpb"; } import vnfd-base { prefix "vnfd-base"; } import project-vnfd { prefix "project-vnfd"; } import project-nsd { prefix "project-nsd"; } import vlr { prefix "vlr"; } import ietf-yang-types { prefix "yang"; } import ietf-inet-types { prefix "inet"; } import rw-project { prefix "rw-project"; } revision 2017-02-28 { description "Update model to support projects."; } revision 2015-09-10 { description "Initial revision. This YANG file defines the Virtual Network Function Record (VNFR)"; reference "Derived from earlier versions of base YANG files"; } grouping placement-group-info { list placement-groups-info { description " Placement groups to which this VDU belongs and its cloud construct "; key "name"; uses manotypes:placement-group-info; uses manotypes:placement-group-input; } } grouping virtual-interface { container virtual-interface { description "Container for the virtual interface properties"; leaf type { description "Specifies the type of virtual interface between VM and host. VIRTIO : Use the traditional VIRTIO interface. PCI-PASSTHROUGH : Use PCI-PASSTHROUGH interface. SR-IOV : Use SR-IOV interface."; type enumeration { enum VIRTIO; enum PCI-PASSTHROUGH; enum SR-IOV; } } leaf bandwidth { description "Aggregate bandwidth of the NIC."; type uint64; } leaf ovs-offload { description "Defines if the NIC supports OVS offload. MANDATORY : OVS offload support in the NIC is mandatory. PREFERRED : OVS offload support in the NIC is preferred."; type enumeration { enum MANDATORY; enum PREFERRED; } } leaf vendor-id { description "Specifies the vendor specific id for the device. This is used when a NIC from specific HW vendor is required."; type string; } leaf datapath-library { description "Specifies the name and version of the datapath library the NIC is expected to support."; type string; } leaf provider-network-name { description "Name of the provider network to which this NIC is attached."; type string; } } } grouping associated-virtual-cps { list virtual-cps { key "name"; uses vnfd-base:common-connection-point; leaf ip-address { description "IP address assigned to the virtual connection point"; type inet:ip-address; } leaf mac-address { description "MAC address assigned to the virtual connection point"; type string; } leaf connection-point-id { description "VIM identifier for connection point"; type string; } } } augment "/rw-project:project" { container vnfr-catalog { config false; list vnfr { description "Virtual Network Function Record (VNFR)."; key "id"; unique "name"; leaf id { description "Identifier for the VNFR."; type yang:uuid; } leaf nsr-id-ref { description "NS instance identifier. This is a leafref /nsr:ns-instance-config/nsr:nsr/nsr:id"; type yang:uuid; } leaf member-vnf-index-ref { description "Reference to member VNF index in Network service."; type leafref { path "../../../project-nsd:nsd-catalog/project-nsd:nsd/project-nsd:constituent-vnfd/project-nsd:member-vnf-index"; } } leaf dashboard-url { description "Dashboard URL"; type inet:uri; } leaf name { description "VNFR name."; type string; } leaf short-name { description "VNFR short name."; type string; } leaf vendor { description "Vendor of the VNFR."; type string; } leaf description { description "Description of the VNFR."; type string; } leaf version { description "Version of the VNFR"; type string; } leaf create-time { description "Creation timestamp of this Virtual Network Function. The timestamp is expressed as seconds since unix epoch - 1970-01-01T00:00:00Z"; type uint32; } leaf uptime { description "Active period of this Virtual Network Function. Uptime is expressed in seconds"; type uint32; } container vnfd { description "VNF descriptor used to instantiate this VNF"; uses vnfd-base:vnfd-descriptor; } leaf vnfd-ref { description "Reference to VNFD"; type leafref { path "../../../project-vnfd:vnfd-catalog/project-vnfd:vnfd/project-vnfd:id"; } } // Use parameters provided here to configure this VNF container vnf-configuration { uses manotypes:vca-configuration; } // Mainly used by Mon-params & dashboard url container mgmt-interface { leaf ip-address { type inet:ip-address; } leaf port { type inet:port-number; } container ssh-key { description "SSH key pair used for this VNF"; leaf public-key { description "Public key configured on this VNF"; type string; } leaf private-key-file { description "Path to the private key file"; type string; } } } list internal-vlr { key "vlr-ref"; leaf vlr-ref { description "Reference to a VLR record in the VLR catalog"; type leafref { path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id"; } } leaf-list internal-connection-point-ref { type leafref { path "../../vdur/internal-connection-point/id"; } } } list connection-point { key "name"; description "List for external connection points. Each VNF has one or more external connection points. As the name implies that external connection points are used for connecting the VNF to other VNFs or to external networks. Each VNF exposes these connection points to the orchestrator. The orchestrator can construct network services by connecting the connection points between different VNFs. The NFVO will use VLDs and VNFFGs at the network service level to construct network services."; uses vnfd-base:common-connection-point; leaf vlr-ref { description "Reference to the VLR associated with this connection point"; type leafref { path "../../../../vlr:vlr-catalog/vlr:vlr/vlr:id"; } } leaf ip-address { description "IP address assigned to the external connection point"; type inet:ip-address; } leaf mac-address { description "MAC address assigned to the external connection point"; // type inet:mac-address; type string; } leaf connection-point-id { type string; } uses associated-virtual-cps; } list vdur { description "List of Virtual Deployment Units"; key "id"; unique "name"; leaf id { description "Unique id for the VDU"; type yang:uuid; } leaf name { description "name of the instantiated VDUR"; type string; } leaf unique-short-name { description "Short Unique name of the VDU This will be of the format NSR name-ShortnedString-VDUname NSR name and VDU name shall be constrained to 10 characters"; rwpb:field-inline "true"; rwpb:field-string-max 64; type string; } leaf vdu-id-ref { type leafref { path "../../vnfd/vdu/id"; } } leaf vim-id { description "Allocated VM resource id"; type string; } leaf flavor-id { description "VIM assigned flavor id"; type string; } leaf image-id { description "VIM assigned image id"; type string; } leaf management-ip { description "Management IP address"; type inet:ip-address; } leaf vm-management-ip { description "VM Private Management IP address"; type inet:ip-address; } leaf console-url { description "Console URL for this VDU, if available"; type inet:uri; } uses manotypes:vm-flavor; uses manotypes:guest-epa; uses manotypes:vswitch-epa; uses manotypes:hypervisor-epa; uses manotypes:host-epa; uses manotypes:supplemental-boot-data; container vdu-configuration { uses manotypes:vca-configuration; } list volumes { key "name"; leaf name { description "Name of the disk-volumes, e.g. vda, vdb etc"; type string; } leaf volume-id { description "VIM assigned volume id"; type string; } uses manotypes:volume-info; } list internal-connection-point { key "id"; description "List for internal connection points. Each VNFC has zero or more internal connection points. Internal connection points are used for connecting the VNF components internal to the VNF. If a VNF has only one VNFC, it may not have any internal connection points."; uses vnfd-base:common-connection-point; leaf ip-address { description "IP address assigned to the internal connection point"; type inet:ip-address; } leaf mac-address { description "MAC address assigned to the internal connection point"; // type inet:mac-address; type string; } leaf connection-point-id { type string; } uses associated-virtual-cps; } list interface { description "List of interfaces (internal and external) for the VNF"; key name; leaf name { description "Name of the interface. Note that this name has only local significance to the VDU."; type string; } leaf position { description "Explicit Position of the interface within the list"; type uint32; } leaf type { description "Type of the Interface"; type vnfd-base:interface-type; default "EXTERNAL"; } choice connection-point-type { case internal { leaf internal-connection-point-ref { description "Leaf Ref to the particular internal connection point"; type leafref { path "../../internal-connection-point/id"; } } } case external { leaf external-connection-point-ref { description "Leaf Ref to the particular external connection point"; type leafref { path "../../../connection-point/name"; } } } } uses virtual-interface; } leaf operational-status { description "The operational status of the VDU init : The VDU has just started. vm-init-phase : The VDUs in the VNF is being created in VIM. vm-alloc-pending : The VM alloc is pending in VIM running : The VDU is active in VM terminate : The VDU is being terminated vm-terminate-phase : The VDU in the VNF is being terminated in VIM. terminated : The VDU is in the terminated state. failed : The VDU instantiation failed. "; type enumeration { rwpb:enum-type "VduOperationalStatus"; enum init; enum vm-init-phase; enum vm-alloc-pending; enum running; enum terminate; enum vl-terminate-phase; enum terminated; enum failed; } } uses placement-group-info; } uses manotypes:monitoring-param; leaf operational-status { description "The operational status of the VNFR instance pre-init : The VNF before Input Param Substitution. init : The VNF has just started. vl-init-phase : The internal VLs in the VNF are being instantiated. vm-init-phase : The VMs for VDUs in the VNF are being instantiated. running : The VNF is in running state. terminate : The VNF is being terminated. vm-terminate-phase : The VMs in the VNF are being terminated. vl-terminate-phase : The internal VLs in the VNF are being terminated. terminated : The VNF is in the terminated state. failed : The VNF instantiation failed "; type enumeration { rwpb:enum-type "VnfrOperationalStatus"; enum pre-init; enum init; enum vl-init-phase; enum vm-init-phase; enum running; enum terminate; enum vm-terminate-phase; enum vl-terminate-phase; enum terminated; enum failed; } } leaf config-status { description "The configuration status of the NS instance configuring: At least one of the VNFs in this instance is in configuring state configured: All the VNFs in this NS instance are configured or config-not-needed state "; type enumeration { enum configuring { value 1; } enum configured { value 2; } enum failed { value 3; } enum config-not-needed { value 4; } } } uses placement-group-info; container cloud-config { rwpb:msg-new VnfrCloudConfig; uses manotypes:cloud-config; } } } } }