/*
  Copyright 2020 Whitestack LLC

  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 ns-vld {
    yang-version 1.1;
    namespace "urn:etsi:osm:yang:augments:ns-vld";
    prefix "ns-vld";

    import etsi-nfv-nsd {
        prefix nsd;
    }

    import ietf-inet-types {
        prefix inet;
    }

    grouping extended-vld {
        container provider-network {
            description
              "Container for the provider network.";
            leaf physical-network {
                description
                  "Name of the physical network on which the provider
                   network is built.";
                type string;
            }

            leaf segmentation_id {
                description
                  "ID of segregated virtual networks";
                type uint32;
            }
        }

        leaf mgmt-network {
            description
              "Flag indicating whether this network is a VIM management network";
            type boolean;
            default false;
        }

        leaf vim-network-name {
            description
              "Name of network in VIM account. This is used to indicate
               pre-provisioned network name in cloud account.";
            type string;
        }
    }

    augment "/nsd:nsd/nsd:nsd/nsd:virtual-link-desc" {
        uses extended-vld;
    }

    grouping deviated-constituent-cpd-id {
        list constituent-cpd-id {
           key "constituent-base-element-id constituent-cpd-id";

           description
             "Describes a connection point on a VNF/PNF or a SAP
              which connects to virtual links instantiated from
              the profile identified in the virtualLinkProfileId
              attribute.";
           reference
             "GS NFV IFA014: Section 6.3.7
              NsVirtualLinkConnectivity information element";

           leaf constituent-base-element-id {
               type leafref {
                   path "../../../nsd:id";
               }
               description
                 "Reference to the profile of an NS constituent.";
               reference
                 "GS NFV IFA014: Section 6.4.8
                  CpdInConstituentElement information element";
           }

           leaf constituent-cpd-id {
               type leafref {
                   path "deref(../../../nsd:vnfd-id)/../nsd:ext-cpd/nsd:id";
               }
               description
                 "A reference to the descriptor of a connection point
                  attached to one of the constituent VNFs and PNFs or to
                  the descriptor of a NS SAP.";
               reference
                 "GS NFV IFA014: Section 6.4.4.2 CpdPool information
                  element";
           }

           leaf ip-address {
               description
                 "IP address assigned to the internal connection point";
                  type inet:ip-address;
           }
       }
    }

    deviation "/nsd:nsd/nsd:nsd/nsd:df/nsd:vnf-profile/nsd:virtual-link-connectivity/nsd:constituent-cpd-id" {
        description
          "Deviation of the list of constituent-cpd-id, because the key must be
           a compound key 'constituent-base-element-id constituent-cpd-id'";
        deviate not-supported;
    }

    augment "/nsd:nsd/nsd:nsd/nsd:df/nsd:vnf-profile/nsd:virtual-link-connectivity" {
        description
          "Augment of nsd:virtual-link-connectivity to define a list of constituent-cpd-id,
           replacing the one in SOL006, with a compound key
           'constituent-base-element-id constituent-cpd-id', and the
           addition of the leaf ip-address for each item in the list.";
        uses deviated-constituent-cpd-id;
    }

}
