summaryrefslogtreecommitdiffstats
path: root/src/plugins/yang/openconfig/openconfig-platform.yang
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/yang/openconfig/openconfig-platform.yang')
-rw-r--r--src/plugins/yang/openconfig/openconfig-platform.yang762
1 files changed, 762 insertions, 0 deletions
diff --git a/src/plugins/yang/openconfig/openconfig-platform.yang b/src/plugins/yang/openconfig/openconfig-platform.yang
new file mode 100644
index 0000000..399cf24
--- /dev/null
+++ b/src/plugins/yang/openconfig/openconfig-platform.yang
@@ -0,0 +1,762 @@
+module openconfig-platform {
+
+ yang-version "1";
+
+ // namespace
+ namespace "http://openconfig.net/yang/platform";
+
+ prefix "oc-platform";
+
+ import openconfig-platform-types { prefix oc-platform-types; }
+ import openconfig-extensions { prefix oc-ext; }
+ import openconfig-alarm-types { prefix oc-alarm-types; }
+ import openconfig-yang-types { prefix oc-yang; }
+
+
+ // meta
+ organization "OpenConfig working group";
+
+ contact
+ "OpenConfig working group
+ www.openconfig.net";
+
+ description
+ "This module defines a data model for representing a system
+ component inventory, which can include hardware or software
+ elements arranged in an arbitrary structure. The primary
+ relationship supported by the model is containment, e.g.,
+ components containing subcomponents.
+
+ It is expected that this model reflects every field replacable
+ unit on the device at a minimum (i.e., additional information
+ may be supplied about non-replacable components).
+
+ Every element in the inventory is termed a 'component' with each
+ component expected to have a unique name and type, and optionally
+ a unique system-assigned identifier and FRU number. The
+ uniqueness is guaranteed by the system within the device.
+
+ Components may have properties defined by the system that are
+ modeled as a list of key-value pairs. These may or may not be
+ user-configurable. The model provides a flag for the system
+ to optionally indicate which properties are user configurable.
+
+ Each component also has a list of 'subcomponents' which are
+ references to other components. Appearance in a list of
+ subcomponents indicates a containment relationship as described
+ above. For example, a linecard component may have a list of
+ references to port components that reside on the linecard.
+
+ This schema is generic to allow devices to express their own
+ platform-specific structure. It may be augmented by additional
+ component type-specific schemas that provide a common structure
+ for well-known component types. In these cases, the system is
+ expected to populate the common component schema, and may
+ optionally also represent the component and its properties in the
+ generic structure.
+
+ The properties for each component may include dynamic values,
+ e.g., in the 'state' part of the schema. For example, a CPU
+ component may report its utilization, temperature, or other
+ physical properties. The intent is to capture all platform-
+ specific physical data in one location, including inventory
+ (presence or absence of a component) and state (physical
+ attributes or status).";
+
+ oc-ext:openconfig-version "0.12.0";
+
+ revision "2018-06-29" {
+ description
+ "Added location description for components";
+ reference "0.12.0";
+ }
+
+ revision "2018-06-03" {
+ description
+ "Added parent reference, empty flag and preconfiguration
+ for components";
+ reference "0.11.0";
+ }
+
+ revision "2018-04-20" {
+ description
+ "Added new per-component state data: mfg-date and removable";
+ reference "0.10.0";
+ }
+
+ revision "2018-01-30" {
+ description
+ "Amended approach for modelling CPU - rather than having
+ a local CPU utilisation state variable, a component with
+ a CPU should create a subcomponent of type CPU to report
+ statistics.";
+ reference "0.9.0";
+ }
+
+ revision "2018-01-16" {
+ description
+ "Added new per-component common data; add temp alarm;
+ moved hardware-port reference to port model";
+ reference "0.8.0";
+ }
+
+ revision "2017-12-14" {
+ description
+ "Added anchor containers for component data, added new
+ component types";
+ reference "0.7.0";
+ }
+
+ revision "2017-08-16" {
+ description
+ "Added power state enumerated type";
+ reference "0.6.0";
+ }
+
+ revision "2016-12-22" {
+ description
+ "Added temperature state variable to component";
+ reference "0.5.0";
+ }
+
+ // grouping statements
+
+
+ grouping platform-component-properties-config {
+ description
+ "System-defined configuration data for component properties";
+
+ leaf name {
+ type string;
+ description
+ "System-supplied name of the property -- this is typically
+ non-configurable";
+ }
+
+ leaf value {
+ type union {
+ type string;
+ type boolean;
+ type int64;
+ type uint64;
+ type decimal64 {
+ fraction-digits 2;
+ }
+ }
+ description
+ "Property values can take on a variety of types. Signed and
+ unsigned integer types may be provided in smaller sizes,
+ e.g., int8, uint16, etc.";
+ }
+ }
+
+ grouping platform-component-properties-state {
+ description
+ "Operational state data for component properties";
+
+ leaf configurable {
+ type boolean;
+ description
+ "Indication whether the property is user-configurable";
+ }
+ }
+
+ grouping platform-component-properties-top {
+ description
+ "Top-level grouping ";
+
+ container properties {
+ description
+ "Enclosing container ";
+
+ list property {
+ key "name";
+ description
+ "List of system properties for the component";
+
+ leaf name {
+ type leafref {
+ path "../config/name";
+ }
+ description
+ "Reference to the property name.";
+ }
+
+ container config {
+ description
+ "Configuration data for each property";
+
+ uses platform-component-properties-config;
+ }
+
+ container state {
+
+ config false;
+
+ description
+ "Operational state data for each property";
+
+ uses platform-component-properties-config;
+ uses platform-component-properties-state;
+ }
+ }
+ }
+ }
+
+ grouping platform-subcomponent-ref-config {
+ description
+ "Configuration data for subcomponent references";
+
+ leaf name {
+ type leafref {
+ path "../../../../../component/config/name";
+ }
+ description
+ "Reference to the name of the subcomponent";
+ }
+ }
+
+ grouping platform-subcomponent-ref-state {
+ description
+ "Operational state data for subcomponent references";
+
+ }
+
+ grouping platform-subcomponent-ref-top {
+ description
+ "Top-level grouping for list of subcomponent references";
+
+ container subcomponents {
+ description
+ "Enclosing container for subcomponent references";
+
+ list subcomponent {
+ key "name";
+ description
+ "List of subcomponent references";
+
+ leaf name {
+ type leafref {
+ path "../config/name";
+ }
+ description
+ "Reference to the name list key";
+ }
+
+ container config {
+ description
+ "Configuration data for the subcomponent";
+
+ uses platform-subcomponent-ref-config;
+ }
+
+ container state {
+
+ config false;
+
+ description
+ "Operational state data for the subcomponent";
+
+ uses platform-subcomponent-ref-config;
+ uses platform-subcomponent-ref-state;
+ }
+ }
+ }
+ }
+
+ grouping platform-component-config {
+ description
+ "Configuration data for components";
+
+ leaf name {
+ type string;
+ description
+ "Device name for the component -- this may not be a
+ configurable parameter on many implementations. Where
+ component preconfiguration is supported, for example,
+ the component name may be configurable.";
+ }
+ }
+
+ grouping platform-component-state {
+ description
+ "Operational state data for device components.";
+
+ leaf type {
+ type union {
+ type identityref {
+ base oc-platform-types:OPENCONFIG_HARDWARE_COMPONENT;
+ }
+ type identityref {
+ base oc-platform-types:OPENCONFIG_SOFTWARE_COMPONENT;
+ }
+ }
+ description
+ "Type of component as identified by the system";
+ }
+
+ leaf id {
+ type string;
+ description
+ "Unique identifier assigned by the system for the
+ component";
+ }
+
+ leaf location {
+ type string;
+ description
+ "System-supplied description of the location of the
+ component within the system. This could be a bay position,
+ slot number, socket location, etc. For component types that
+ have an explicit slot-id attribute, such as linecards, the
+ system should populate the more specific slot-id.";
+ }
+
+ leaf description {
+ type string;
+ description
+ "System-supplied description of the component";
+ }
+
+ leaf mfg-name {
+ type string;
+ description
+ "System-supplied identifier for the manufacturer of the
+ component. This data is particularly useful when a
+ component manufacturer is different than the overall
+ device vendor.";
+ }
+
+ leaf mfg-date {
+ type oc-yang:date;
+ description
+ "System-supplied representation of the component's
+ manufacturing date.";
+ }
+
+ leaf hardware-version {
+ type string;
+ description
+ "For hardware components, this is the hardware revision of
+ the component.";
+ }
+
+ leaf firmware-version {
+ type string;
+ description
+ "For hardware components, this is the version of associated
+ firmware that is running on the component, if applicable.";
+ }
+
+ leaf software-version {
+ type string;
+ description
+ "For software components such as operating system or other
+ software module, this is the version of the currently
+ running software.";
+ }
+
+ leaf serial-no {
+ type string;
+ description
+ "System-assigned serial number of the component.";
+ }
+
+ leaf part-no {
+ type string;
+ description
+ "System-assigned part number for the component. This should
+ be present in particular if the component is also an FRU
+ (field replaceable unit)";
+ }
+
+ leaf removable {
+ type boolean;
+ description
+ "If true, this component is removable or is a field
+ replaceable unit";
+ }
+
+ leaf oper-status {
+ type identityref {
+ base oc-platform-types:COMPONENT_OPER_STATUS;
+ }
+ description
+ "If applicable, this reports the current operational status
+ of the component.";
+ }
+
+ leaf empty {
+ type boolean;
+ default false;
+ description
+ "The empty leaf may be used by the device to indicate that a
+ component position exists but is not populated. Using this
+ flag, it is possible for the management system to learn how
+ many positions are available (e.g., occupied vs. empty
+ linecard slots in a chassis).";
+ }
+
+ leaf parent {
+ type leafref {
+ path "../../config/name";
+ }
+ description
+ "Reference to the name of the parent component. Note that
+ this reference must be kept synchronized with the
+ corresponding subcomponent reference from the parent
+ component.";
+ }
+ }
+
+ grouping platform-component-temp-alarm-state {
+ description
+ "Temperature alarm data for platform components";
+
+ // TODO(aashaikh): consider if these leaves could be in a
+ // reusable grouping (not temperature-specific); threshold
+ // may always need to be units specific.
+
+ leaf alarm-status {
+ type boolean;
+ description
+ "A value of true indicates the alarm has been raised or
+ asserted. The value should be false when the alarm is
+ cleared.";
+ }
+
+ leaf alarm-threshold {
+ type uint32;
+ description
+ "The threshold value that was crossed for this alarm.";
+ }
+
+ leaf alarm-severity {
+ type identityref {
+ base oc-alarm-types:OPENCONFIG_ALARM_SEVERITY;
+ }
+ description
+ "The severity of the current alarm.";
+ }
+ }
+
+ grouping platform-component-power-state {
+ description
+ "Power-related operational state for device components.";
+
+ leaf allocated-power {
+ type uint32;
+ units watts;
+ description
+ "Power allocated by the system for the component.";
+ }
+
+ leaf used-power {
+ type uint32;
+ units watts;
+ description
+ "Actual power used by the component.";
+ }
+ }
+
+ grouping platform-component-temp-state {
+ description
+ "Temperature state data for device components";
+
+ container temperature {
+ description
+ "Temperature in degrees Celsius of the component. Values include
+ the instantaneous, average, minimum, and maximum statistics. If
+ avg/min/max statistics are not supported, the target is expected
+ to just supply the instant value";
+
+ uses oc-platform-types:avg-min-max-instant-stats-precision1-celsius;
+ uses platform-component-temp-alarm-state;
+ }
+ }
+
+ grouping platform-component-memory-state {
+ description
+ "Per-component memory statistics";
+
+ container memory {
+ description
+ "For components that have associated memory, these values
+ report information about available and utilized memory.";
+
+ leaf available {
+ type uint64;
+ units bytes;
+ description
+ "The available memory physically installed, or logically
+ allocated to the component.";
+ }
+
+ // TODO(aashaikh): consider if this needs to be a
+ // min/max/avg statistic
+ leaf utilized {
+ type uint64;
+ units bytes;
+ description
+ "The memory currently in use by processes running on
+ the component, not considering reserved memory that is
+ not available for use.";
+ }
+ }
+ }
+
+ grouping platform-anchors-top {
+ description
+ "This grouping is used to add containers for components that
+ are common across systems, but do not have a defined schema
+ within the openconfig-platform module. Containers should be
+ added to this grouping for components that are expected to
+ exist in multiple systems, with corresponding modules
+ augmenting the config/state containers directly.";
+
+ container chassis {
+ description
+ "Data for chassis components";
+
+ container config {
+ description
+ "Configuration data for chassis components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for chassis components";
+ }
+ }
+
+// TODO(aashaikh): linecard container is already defined in
+// openconfig-platform-linecard; will move to this module
+// in future.
+ /*
+ container linecard {
+ description
+ "Data for linecard components";
+
+ container config {
+ description
+ "Configuration data for linecard components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for linecard components";
+ }
+ }
+ */
+
+ container port {
+ description
+ "Data for physical port components";
+
+ container config {
+ description
+ "Configuration data for physical port components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for physical port components";
+ }
+ }
+
+// TODO(aashaikh): transceiver container is already defined in
+// openconfig-platform-transceiver; will move to this module
+// in future.
+ /*
+ container transceiver {
+ description
+ "Data for transceiver components";
+
+ container config {
+ description
+ "Configuration data for transceiver components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for transceiver components";
+ }
+ }
+ */
+
+ container power-supply {
+ description
+ "Data for power supply components";
+
+ container config {
+ description
+ "Configuration data for power supply components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for power supply components";
+ }
+ }
+
+ container fan {
+ description
+ "Data for fan components";
+
+ container config {
+ description
+ "Configuration data for fan components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for fan components";
+ }
+ }
+
+ container fabric {
+ description
+ "Data for fabric components";
+
+ container config {
+ description
+ "Configuration data for fabric components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for fabric components";
+ }
+ }
+
+ container storage {
+ description
+ "Data for storage components";
+
+ container config {
+ description
+ "Configuration data for storage components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for storage components";
+ }
+ }
+
+ container cpu {
+ description
+ "Data for cpu components";
+
+ container config {
+ description
+ "Configuration data for cpu components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for cpu components";
+ }
+ }
+
+ container integrated-circuit {
+ description
+ "Data for chip components, such as ASIC, NPUs, etc.";
+
+ container config {
+ description
+ "Configuration data for chip components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for chip components";
+ }
+ }
+
+ container backplane {
+ description
+ "Data for backplane components";
+
+ container config {
+ description
+ "Configuration data for backplane components";
+ }
+
+ container state {
+ config false;
+ description
+ "Operational state data for backplane components";
+ }
+ }
+ }
+
+ grouping platform-component-top {
+ description
+ "Top-level grouping for components in the device inventory";
+
+ container components {
+ description
+ "Enclosing container for the components in the system.";
+
+ list component {
+ key "name";
+ description
+ "List of components, keyed by component name.";
+
+ leaf name {
+ type leafref {
+ path "../config/name";
+ }
+ description
+ "References the component name";
+ }
+
+ container config {
+ description
+ "Configuration data for each component";
+
+ uses platform-component-config;
+ }
+
+ container state {
+
+ config false;
+
+ description
+ "Operational state data for each component";
+
+ uses platform-component-config;
+ uses platform-component-state;
+ uses platform-component-temp-state;
+ uses platform-component-memory-state;
+ uses platform-component-power-state;
+ }
+
+ uses platform-component-properties-top;
+ uses platform-subcomponent-ref-top;
+ uses platform-anchors-top;
+ }
+ }
+ }
+
+
+ // data definition statements
+
+ uses platform-component-top;
+
+
+ // augments
+
+
+}