module openconfig-platform-linecard {
  yang-version 1;
  namespace "http://openconfig.net/yang/platform/linecard";
  prefix oc-linecard;

  import openconfig-platform {
    prefix oc-platform;
  }
  import openconfig-platform-types {
    prefix oc-platform-types;
  }
  import openconfig-extensions {
    prefix oc-ext;
  }

  organization
    "OpenConfig working group";
  contact
    "OpenConfig working group
     www.openconfig.net";
  description
    "This module defines data related to LINECARD components in
     the openconfig-platform model";

  revision 2022-04-21 {
    description
      "Add platform utilization to linecard.";
    reference
      "0.2.0";
  }
  revision 2020-05-10 {
    description
      "Remove when statement that references read-only entity from
       a read-write context.";
    reference
      "0.1.2";
  }
  revision 2018-11-21 {
    description
      "Add OpenConfig module metadata extensions.";
    reference
      "0.1.1";
  }
  revision 2017-08-03 {
    description
      "Initial revision";
    reference
      "0.1.0";
  }

  oc-ext:openconfig-version "0.2.0";
  oc-ext:regexp-posix;
  oc-ext:catalog-organization "openconfig";
  oc-ext:origin "openconfig";

  grouping linecard-config {
    description
      "Configuration data for linecard components";
    leaf power-admin-state {
      type oc-platform-types:component-power-type;
      default "POWER_ENABLED";
      description
        "Enable or disable power to the linecard";
    }
  }

  grouping linecard-state {
    description
      "Operational state data for linecard components";
    leaf slot-id {
      type string;
      description
        "Identifier for the slot or chassis position in which the
         linecard is installed";
    }
  }

  grouping linecard-top {
    description
      "Top-level grouping for linecard data";
    container linecard {
      description
        "Top-level container for linecard data";
      container config {
        description
          "Configuration data for linecards";
        uses linecard-config;
      }
      container state {
        config false;
        description
          "Operational state data for linecards";
        uses linecard-config;
        uses linecard-state;
      }
      uses oc-platform:platform-utilization-top;
    }
  }

  augment "/oc-platform:components/oc-platform:component" {
    description
      "Adding linecard data to physical inventory. This subtree
       is only valid when the type of the component is LINECARD.";
    uses linecard-top;
  }
}