
/*
 * 
 *   Copyright 2016 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 pnfd
{
  namespace "urn:ietf:params:xml:ns:yang:nfvo:pnfd";
  prefix "pnfd";

  import rw-pb-ext {
    prefix "rwpb";
  }

  import ietf-inet-types {
    prefix "inet";
  }

  import ietf-yang-types {
    prefix "yang";
  }

  import mano-types {
    prefix "manotypes";
  }

  revision 2015-09-10 {
    description
      "Initial revision. This YANG file defines 
       the Physical Network Function Descriptor (PNFD)";
    reference
      "Derived from earlier versions of base YANG files";
  }

  container pnfd-catalog {

    list pnfd {
      key "id";

      leaf id {
        description "Identifier for the PNFD.";
        type yang:uuid;
      }

      leaf name {
        description "PNFD name.";
        type string;
      }

      leaf short-name {
        description "Short name to appear as label in the UI";
        type string;
      }

      leaf vendor {
        description "Vendor of the PNFD.";
        type string;
      }

      leaf description {
        description "Description of the PNFD.";
        type string;
      }

      leaf version {
        description "Version of the PNFD";
        type string;
      }

      list connection-point {
        description
            "List for external connection points. Each PNF has one or more external
            connection points.";
        key "id";
        leaf id {
          description
              "Identifier for the external connection points";
          type uint64;
        }

        leaf cp-type {
          description
              "Type of the connection point.";
          type manotypes:connection-point-type;
        }
      }
    }
  }
}
