module org-openroadm-routing-constraints {
  namespace "http://org/openroadm/routing/constrains";
  prefix org-openroadm-routing-constraints;

  organization
    "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions of routing constraints.
      
      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
      AT&T Intellectual Property.  All other rights reserved.
      
      Redistribution and use in source and binary forms, with or without modification, 
      are permitted provided that the following conditions are met:
      
      * Redistributions of source code must retain the above copyright notice, this 
        list of conditions and the following disclaimer.
      * Redistributions in binary form must reproduce the above copyright notice, 
        this list of conditions and the following disclaimer in the documentation and/or 
        other materials provided with the distribution.
      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
        contributors may be used to endorse or promote products derived from this software 
        without specific prior written permission.
      
      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
      POSSIBILITY OF SUCH DAMAGE";

  revision 2016-10-14 {
    description
      "Version 1.2";
  }

  grouping routing-constraints {
    container hard-constraints {
      uses constraints;
    }
    container soft-constraints {
      uses constraints;
    }
  }

  grouping constraints {
    leaf-list customer-code {
      type string;
    }
    choice co-routing-or-general {
      case general {
        container diversity {
          uses diversity-existing-service-contraints;
        }
        container exclude {
          uses common-constraints;
          leaf-list supporting-service-name {
            description
              "Supporting service(s) to exclude from this route.";
            type string;
          }
        }
        container include {
          uses common-constraints;
          leaf-list supporting-service-name {
            description
              "Supporting service(s) to include in this route.";
            type string;
          }
        }
        container latency {
          description
            "Maximum latency allowed";
          leaf max-latency {
            type uint32;
            units "ms";
          }
        }
      }
      case co-routing {
        container co-routing {
          leaf-list existing-service {
            type string;
            description
              "Diverse from existing services identified by facility CLFI";
          }
        }
      }
    }
  }

  grouping common-constraints {
    leaf-list fiber-bundle {
      type string;
    }
    leaf-list site {
      type string;
    }
    leaf-list node-id {
      type string;
    }
  }

  grouping diversity-existing-service-contraints {
    leaf-list existing-service {
      type string;
      description
        "Diverse from existing services identified by facility CLFI";
    }
    container existing-service-applicability {
      leaf site {
        type boolean;
      }
      leaf node {
        type boolean;
      }
      leaf srlg {
        type boolean;
      }
    }
  }
}
