From 3a3018590be5f7c11a3ed8c3530b128c53633d7b Mon Sep 17 00:00:00 2001 From: sallylsy <108024270+sallylsy@users.noreply.github.com> Date: Thu, 26 Sep 2024 10:21:16 -0700 Subject: [PATCH 1/9] Support PTP Yang model based on IEEE standard (#1103) (A) release/models/ptp/openconfig-ptp.yang (A) release/models/ptp/openconfig-ptp-types.yang * Support PTP Yang model based on IEEE standard --- release/models/ptp/.spec.yml | 8 + release/models/ptp/openconfig-ptp-types.yang | 299 +++++ release/models/ptp/openconfig-ptp.yang | 1198 ++++++++++++++++++ 3 files changed, 1505 insertions(+) create mode 100644 release/models/ptp/.spec.yml create mode 100644 release/models/ptp/openconfig-ptp-types.yang create mode 100644 release/models/ptp/openconfig-ptp.yang diff --git a/release/models/ptp/.spec.yml b/release/models/ptp/.spec.yml new file mode 100644 index 000000000..ff369d9e3 --- /dev/null +++ b/release/models/ptp/.spec.yml @@ -0,0 +1,8 @@ +- name: openconfig-ptp + docs: + - yang/ptp/openconfig-ptp-types.yang + - yang/ptp/openconfig-ptp.yang + build: + - yang/ptp/openconfig-ptp-types.yang + - yang/ptp/openconfig-ptp.yang + run-ci: true diff --git a/release/models/ptp/openconfig-ptp-types.yang b/release/models/ptp/openconfig-ptp-types.yang new file mode 100644 index 000000000..943569639 --- /dev/null +++ b/release/models/ptp/openconfig-ptp-types.yang @@ -0,0 +1,299 @@ +module openconfig-ptp-types { + + yang-version "1"; + + // namespace + namespace "http://openconfig.net/yang/ptp-types"; + + prefix "oc-ptp-types"; + + import openconfig-extensions { + prefix oc-ext; + } + + // meta + organization + "OpenConfig working group"; + + contact + "OpenConfig working group + www.openconfig.net "; + + description + "This module defines types and identities used in OpenConfig + models related to Precision Time Protocol (PTP). + + IEEE code is subject to the following copyright and license: + Copyright (c) 2020 by The Institute of Electrical and Electronics + Engineers, Inc. All rights reserved."; + + oc-ext:openconfig-version "1.0.0"; + + revision 2024-09-17 { + description + "Initial Public Version"; + reference "1.0.0"; + } + + // extension statements + + // feature statements + + // identity statements + + identity TIME_SOURCE { + description + "Enumeration for the source of time used by the Grandmaster + PTP Instance. + YANG identity is used so that a PTP Profile's YANG augment + can assign values, using numeric range F0 to FE hex."; + reference + "7.6.2.8 of IEEE Std 1588-2019"; + } + + identity CLOCK_CLASS { + description + "Enumeration that denotes the traceability, synchronization + state and expected performance of the time or frequency + distributed by the Grandmaster PTP Instance. + IEEE Std 1588 does not specify a name for each clock-class, + but the names below are intended to be as intuitive as possible. + YANG identity is used so that a PTP Profile's YANG augment + can assign values using a numeric range designated for use by + alternate PTP Profiles."; + reference + "7.6.2.5 of IEEE Std 1588-2019"; + } + + identity CLOCK_ACCURACY { + description + "Enumeration that indicates the expected accuracy of a + PTP Instance when it is the Grandmaster PTP Instance, + or in the event it becomes the Grandmaster PTP Instance. + The value shall be conservatively estimated by the PTP + Instance to a precision consistent with the value of the + selected clock-accuracy and of the next lower enumerated + value, for example, for clockAccuracy = 23 hex, between + 250 ns and 1000 ns. + IEEE Std 1588 does not specify a name for each clock-accuracy, + but the names below are intended to be as intuitive as possible. + YANG identity is used so that a PTP Profile's YANG augment + can assign values, using numeric range 80 to FD hex."; + reference + "7.6.2.6 of IEEE Std 1588-2019"; + } + + typedef clock-identity { + type string { + pattern "[0-9A-F]{2}(-[0-9A-F]{2}){7}"; + oc-ext:posix-pattern '^[0-9A-F]{2}(-[0-9A-F]{2}){7}$'; + } + description + "Identifies unique entities within a PTP Network, + e.g. a PTP Instance or an entity of a common service. + The identity is an 8-octet array, constructed according + to specifications in IEEE Std 1588, using an + organization identifier from the IEEE Registration + Authority. + Each octet is represented in YANG as a pair of + hexadecimal characters, using uppercase for a letter. + Each octet in the array is separated by the dash + character."; + reference + "5.3.4 of IEEE Std 1588-2019 + 7.5.2.2 of IEEE Std 1588-2019"; + } + + typedef time-interval { + type int64; + description + "Time interval, expressed in nanoseconds, multiplied by 2^16. + Positive or negative time intervals outside the maximum range + of this data type shall be encoded as the largest positive and + negative values of the data type, respectively."; + reference + "5.3.2 of IEEE Std 1588-2019"; + } + +typedef instance-type { + type enumeration { + enum OC { + value 0; + description + "Ordinary Clock"; + } + enum BC { + value 1; + description + "Boundary Clock"; + } + enum P2P_TC { + value 2; + description + "Peer-to-peer Transparent Clock"; + } + enum E2E_TC { + value 3; + description + "End-to-end Transparent Clock"; + } + } + description + "Enumeration for the type of PTP Instance. + Values for this enumeration are specified by the IEEE 1588 + standard exclusively."; + reference + "8.2.1.5.5 of IEEE Std 1588-2019"; + } + + + typedef unicast-multicast-enumeration { + type enumeration { + enum UNICAST { + value 1; + description + "unicast"; + } + enum MULTICAST { + value 2; + description + "multicast"; + } + } + description + "Type definition for options when setting the unicast-multicast + attribute in the default data set"; + } + + typedef delay-mechanism-enumeration { + type enumeration { + enum E2E { + value 1; + description + "The port uses the delay request-response mechanism."; + } + enum P2P { + value 2; + description + "The port uses the peer delay mechanism."; + } + enum DISABLED { + value 254; + description + "The port does not implement any delay mechanism."; + } + } + description + "The propagation-delay measuring option used by the + port. Values for this enumeration are specified + by the IEEE Std 1588 standard exclusively."; + reference + "IEEE Std 1588-2008: 8.2.5.4.4"; + } + + typedef port-state-enumeration { + type enumeration { + enum INITIALIZING { + value 1; + description + "The port is initializing its data sets, hardware, and + communication facilities."; + } + enum FAULTY { + value 2; + description + "The port is in the fault state."; + } + enum DISABLED { + value 3; + description + "The port is disabled and is not communicating PTP + messages (other than possibly PTP management + messages)."; + } + enum LISTENING { + value 4; + description + "The port is listening for an Announce message."; + } + enum PRE_MASTER { + value 5; + description + "The port is in the pre-master state."; + } + enum MASTER { + value 6; + description + "The port is behaving as a master port."; + } + enum PASSIVE { + value 7; + description + "The port is in the passive state."; + } + enum UNCALIBRATED { + value 8; + description + "A master port has been selected, but the port is still + in the uncalibrated state."; + } + enum SLAVE { + value 9; + description + "The port is synchronizing to the selected master port."; + } + } + description + "The current state of the protocol engine associated + with the port. Values for this enumeration are specified + by the IEEE Std 1588 standard exclusively."; + reference + "IEEE Std 1588-2008: 8.2.5.3.1, 9.2.5"; + } + + typedef network-transport-enumeration { + type enumeration { + enum L2 { + value 1; + description + "Layer 2 network"; + } + enum UDPV4 { + value 2; + description + "UDPv4 network"; + } + enum UDPV6 { + value 3; + description + "UDPv6 network"; + } + } + description + "Type definition for options when setting the network transport + attribute in the default data set"; + } + + typedef domain-profile-enumeration { + type enumeration { + enum IEEE1588 { + value 1; + description + "default profile"; + } + enum G8275.1 { + value 2; + description + "g8275.1 profile"; + } + enum G8275.2 { + value 3; + description + "g8275.2 profile"; + } + } + description + "Type definition for options when setting the domain-profile + attribute in the default data set"; + } +} diff --git a/release/models/ptp/openconfig-ptp.yang b/release/models/ptp/openconfig-ptp.yang new file mode 100644 index 000000000..8c2a4c714 --- /dev/null +++ b/release/models/ptp/openconfig-ptp.yang @@ -0,0 +1,1198 @@ +module openconfig-ptp { + + yang-version "1"; + + namespace "http://openconfig.net/yang/ptp"; + + prefix "oc-ptp"; + + import ietf-interfaces { prefix if; } + import openconfig-extensions { prefix oc-ext; } + import openconfig-ptp-types { prefix oc-ptp-types; } + + organization + "OpenConfig working group"; + contact + "OpenConfig working group + www.openconfig.net "; + description + "This YANG module defines a data model for the configuration + and state of IEEE Std 1588 clocks. IEEE Std 1588 specifies the + Precision Time Protocol (PTP). + + The nodes in this YANG module are designed for compatibility + with ietf-ptp.yang, the YANG data model for IEEE Std 1588-2008, + as specified in IETF RFC 8575. + + NOTE regarding default value: + PTP's concept of 'initialization value' is analogous to YANG's + concept of a 'default value'. According to 8.1.3.4 of + IEEE Std 1588-2019, the initialization value for configuration + is specified in IEEE Std 1588, but that value can be overridden + by a PTP Profile specification, or by the product that + implements PTP. This makes it challenging to repeat the + specification of initialization value using a YANG 'default' + statement, because there is no straightforward mechanism for + a PTP Profile's (or product's) YANG module to import this + module and override its YANG default. Since a YANG management + client can read the default value from the operational + datastore, there is no need to re-specify the default in YANG. + The implementer of PTP refers to the relevant PTP + specifications for the default (not YANG modules). + Therefore, this YANG module avoids use of the YANG 'default' + statement. + + NOTE regarding IEEE Std 1588 classification: + 8.1.2 of IEEE Std 1588-2019 specifies a classification of + each data set member, which corresponds to a leaf in YANG. + The relationship between 1588 classification and + YANG 'config' (i.e., whether the leaf is read-write) is: + - 1588 static: The leaf is 'config false' (read-only). + - 1588 configurable: The leaf is 'config true', which is + the default value for a YANG leaf. + - 1588 dynamic: A judgement is made on a member-by-member + basis. If the member corresponds to the first item of + 8.1.2.1.2 of IEEE Std 1588-2019 (i.e., value from protocol + only, such as log of protocol behavior), the YANG leaf + is 'config false'. Otherwise, the member's value can be + provided by an entity outside PTP (e.g., NETCONF or + RESTCONF client), and therefore the YANG leaf is + 'config true'. + + NOTE regarding terminology (two YANG modules): + To accommodate the need by some organizations to use the + original terminology specified by IEEE Std 1588, and the + need by some other organizations to use the alternative + terminology specified in 4.4 of IEEE Std 1588g-2022, + two YANG modules are provided by IEEE Std 1588e (MIB and + YANG Data Models). For a detailed explanation, see 15.4.2.11 + of IEEE Std 1588e. + This module uses the original terminology specified by + IEEE Std 1588 (master/slave). + + IEEE code is subject to the following copyright and license: + Copyright (c) 2020 by The Institute of Electrical and Electronics + Engineers, Inc. All rights reserved."; + + oc-ext:openconfig-version "1.0.0"; + + revision 2024-09-17 { + description + "Initial revision. IEEE Std 1588e-XXXX, IEEE Standard for a Precision + Clock Synchronization Protocol for Networked Measurement and Control + Systems - MIB and YANG Data Models."; + reference + "1.0.0"; + } + + grouping instance-config { + description + "Config state data of an instance of the PTP"; + + leaf id { + type uint32; + description + "The instance list is indexed using a number that is unique per PTP + Instance within the PTP Node, applicable to the management context + only (i.e. not used in PTP messages). The domain-number of the PTP + Instance is not used as the key to instance-list, since it is possible + for a PTP Node to contain multiple PTP Instances using the same + domain-number."; + reference + "8.1.4.2 of IEEE Std 1588-2019"; + } + } + + grouping instance-state { + description + "Operational state data of an instance of the PTP"; + + uses instance-config; + } + + grouping current-ds-state { + description + "Provides current data from operation of the protocol."; + reference + "8.2.2 of IEEE Std 1588-2019"; + + leaf steps-removed { + type uint16; + config false; + description + "The number of PTP Communication Paths traversed + between this PTP Instance and the Grandmaster + PTP Instance."; + reference + "8.2.2.2 of IEEE Std 1588-2019"; + } + + leaf offset-from-master { + type oc-ptp-types:time-interval; + config false; + description + "The current value of the time difference between + a Master PTP Instance and a Slave PTP Instance as + computed by the Slave PTP Instance. + NOTE - When a PTP Profile requires a Boundary + Clock to transfer offset information internally + from Slave PTP Port to Master PTP Port(s), this value + effectively returns the offset from the Grandmaster + PTP Instance."; + reference + "8.2.2.3 of IEEE Std 1588-2019"; + } + + leaf mean-path-delay { + type oc-ptp-types:time-interval; + config false; + status deprecated; + description + "In IEEE Std 1588-2008, currentDS.meanDelay was called + currentDS.meanPathDelay. While the specification of + this member is retained in the current standard, the + member is renamed to currentDS.meanDelay. This change + is consistent with other changes that ensure clarity + and consistency of naming, where + - 'path' is associated with the + request-response mechanism + - 'link' is associated with the + peer-to-peer delay mechanism"; + reference + "8.2.2.4 of IEEE Std 1588-2008"; + } + } + + grouping time-properties-ds-state { + description + "Provides data learned from the current Grandmaster PTP Instance."; + reference + "8.2.4 of IEEE Std 1588-2019"; + leaf current-utc-offset { + when "../current-utc-offset-valid='true'"; + type int16; + description + "Specified as in IERS Bulletin C, this provides + the offset from UTC (TAI - UTC). The offset is in + units of seconds."; + reference + "7.2.4 of IEEE Std 1588-2019 + 8.2.4.2 of IEEE Std 1588-2019"; + } + + leaf current-utc-offset-valid { + type boolean; + description + "The value of current-utc-offset-valid shall be true + if the values of current-utc-offset, leap59, and leap61 + are known to be correct, otherwise it shall be false. + NOTE - The constraint for leap59 and leap61 did not + exist in IEEE Std 1588-2008, and for compatibility, + corresponding when statements were not included below."; + reference + "8.2.4.3 of IEEE Std 1588-2019"; + } + + leaf leap59 { + type boolean; + description + "If the timescale is PTP, a true value for leap59 + shall indicate that the last minute of the + current UTC day contains 59 seconds. + If the timescale is not PTP, the value shall be + false."; + reference + "8.2.4.4 of IEEE Std 1588-2019"; + } + + leaf leap61 { + type boolean; + description + "If the timescale is PTP, a true value for leap61 shall indicate + that the last minute of the current UTC day contains 61 seconds. + If the timescale is not PTP, the value shall be false."; + reference + "8.2.4.5 of IEEE Std 1588-2019"; + } + + leaf time-traceable { + type boolean; + description + "The value of time-traceable shall be true if the timescale is + traceable to a primary reference; otherwise, the value shall be + false. The uncertainty specifications appropriate to the + evaluation of whether traceability to a primary reference is + achieved should be defined in the applicable PTP Profile. In + the absence of such a definition the value of time-traceable is + implementation specific."; + reference + "8.2.4.6 of IEEE Std 1588-2019"; + } + + leaf frequency-traceable { + type boolean; + description + "The value of time-traceable shall be true if the frequency + determining the timescale is traceable to a primary reference; + otherwise, the value shall be false. + The uncertainty specifications appropriate to the evaluation + of whether traceability to a primary reference is achieved + should be defined in the applicable PTP Profile. In the absence + of such a definition the value of frequency-traceable is + implementation specific."; + reference + "8.2.4.7 of IEEE Std 1588-2019"; + } + + leaf ptp-timescale { + type boolean; + description + "If ptp-timescale is true, the timescale of the Grandmaster PTP + Instance is PTP, which is the elapsed time since the PTP epoch + measured using the second defined by International Atomic Time (TAI). + If ptp-timescale is false, the timescale of the Grandmaster PTP + Instance is ARB, which is the elapsed time since an arbitrary epoch."; + reference + "7.2.1 of IEEE Std 1588-2019 + 8.2.4.8 of IEEE Std 1588-2019"; + } + + leaf time-source { + type identityref { + base oc-ptp-types:TIME_SOURCE; + } + description + "The source of time used by the Grandmaster + PTP Instance."; + reference + "7.6.2.8 of IEEE Std 1588-2019 + 8.2.4.9 of IEEE Std 1588-2019"; + } + } + + grouping default-ds-config { + description + "Config state data of default data set of the clock"; + + leaf priority1 { + type uint8; + description + "The IEEE Std 1588 priority1 of the PTP Instance. + Since priority1 is one of the first comparisons + performed by the Best Master Clock Algorithm (BMCA), + this leaf's configuration can be used to explicitly + select a Grandmaster PTP Instance. + Lower values take precedence. + The value of priority1 shall be configurable to any + value in the range 0 to 255, unless restricted by + limits established by the applicable PTP Profile."; + reference + "7.6.2.3 of IEEE Std 1588-2019 + 8.2.1.4.1 of IEEE Std 1588-2019"; + } + leaf priority2 { + type uint8; + description + "The IEEE Std 1588 priority2 of the PTP Instance. + The priority2 member is compared by the Best Master + Clock Algorithm (BMCA) after priority1 and clockQuality. + Lower values take precedence. + The value of priority2 shall be configurable to any + value in the range 0 to 255, unless restricted by + limits established by the applicable PTP Profile."; + reference + "7.6.2.4 of IEEE Std 1588-2019 + 8.2.1.4.2 of IEEE Std 1588-2019"; + } + leaf domain-number { + type uint8; + description + "The IEEE Std 1588 domainNumber of the PTP Instance. + A domain consists of one or more PTP Instances + communicating with each other as defined by the + protocol. A domain shall define the scope of PTP message + communication, state, operations, data sets, and + timescale. Therefore, each domain represents a distinct + time. + Within a PTP Network, a domain is identified by two + data set members: domainNumber and sdoId. + The domainNumber is the primary mechanism for end users + and system integrators to isolate the operation of a + PTP Instance from PTP messages used in other domains. + The value of the domainNumber shall be configurable + to values permitted in IEEE Std 1588, unless the + allowed values are further restricted by the applicable + PTP Profile."; + reference + "7.1 of IEEE Std 1588-2019 + 8.2.1.4.3 of IEEE Std 1588-2019"; + } + leaf slave-only { + type boolean; + description + "The value of slave-only shall be true if the + PTP Instance is a slave-only PTP Instance + (false for non-slave-only). + The slave-only member can be true for Ordinary Clocks + only. + When slave-only is true, the PTP Instance implements + special behavior in the context of the state machines + that determine port-state."; + reference + "8.2.1.4.4 of IEEE Std 1588-2019 + 9.2.2.1 of IEEE Std 1588-2019"; + } + + leaf instance-type { + type oc-ptp-types:instance-type; + description + "The type of PTP Instance. + This leaf is read-only unless support for write is + explicitly specified by the applicable PTP Profile or + product specification."; + reference + "8.2.1.5.5 of IEEE Std 1588-2019"; + } + + leaf sdo-id { + type uint16 { + range "0..4095"; + } + description + "The IEEE Std 1588 sdoId of the PTP Instance. + A domain consists of one or more PTP Instances + communicating with each other as defined by the + protocol. A domain shall define the scope of PTP message + communication, state, operations, data sets, and + timescale. Therefore, each domain represents a distinct + time. + Within a PTP Network, a domain is identified by two + data set members: domainNumber and sdoId. + The sdoId of a domain is a 12-bit integer in the + closed range 0 to 4095. + The sdoId member is the primary mechanism for providing + isolation of PTP Instances operating a PTP Profile + specified by a Standards Development Organization (SDO), + from other PTP Instances operating a PTP Profile + specified by a different SDO."; + reference + "7.1 of IEEE Std 1588-2019 + 8.2.1.4.5 of IEEE Std 1588-2019 + 16.5 of IEEE Std 1588-2019"; + } + leaf network-transport { + type oc-ptp-types:network-transport-enumeration; + description + "The network transport used for communication"; + } + leaf unicast-multicast { + type oc-ptp-types:unicast-multicast-enumeration; + description + "Whether the network transport uses unicast or + multicast communication"; + } + leaf domain-profile { + type oc-ptp-types:domain-profile-enumeration; + description + "The method to be used when comparing data sets during + the Best Master Clock Algorithm."; + } + } + + grouping clock-quality-top { + description + "Quality of a PTP Instance, which contains IEEE Std 1588 + clockClass, clockAccuracy and offsetScaledLogVariance. + PTP Instances with better quality are more likely to + become the Grandmaster PTP Instance."; + reference + "5.3.7 of IEEE Std 1588-2019 + 8.2.1.3.1 of IEEE Std 1588-2019"; + + leaf clock-class { + type identityref { + base oc-ptp-types:CLOCK_CLASS; + } + description + "The clockClass denotes the traceability of the time + or frequency distributed by the clock."; + reference + "7.6.2.5 of IEEE Std 1588-2019 + 8.2.1.3.1.2 of IEEE Std 1588-2019"; + } + + leaf clock-accuracy { + type identityref { + base oc-ptp-types:CLOCK_ACCURACY; + } + description + "The clockAccuracy indicates the accuracy of the clock + (Local Clock of the PTP Instance)."; + reference + "7.6.2.6 of IEEE Std 1588-2019 + 8.2.1.3.1.3 of IEEE Std 1588-2019"; + } + + leaf offset-scaled-log-variance { + type uint16; + description + "The offsetScaledLogVariance indicates the stability of the + clock (Local Clock of the PTP Instance). It provides an + estimate of the variations of the clock from a linear timescale + when it is not synchronized to another clock using the + protocol."; + reference + "7.6.2.7 of IEEE Std 1588-2019"; + } + } + + grouping default-ds-state { + description + "Operational state data of default data set of the clock"; + uses default-ds-config; + + leaf two-step-flag { + type boolean; + description + "When set to true, the PTP Instance is two-step, + otherwise the PTP Instance is one-step. + This data set member is no longer used. However, + the twoStepFlag of the PTP common header is used. + One step or two step egress behavior is allowed to + be specified per PTP Port, or per PTP Instance. + Management of the one/two step egress behavior of + a PTP Port is not provided by this standard, but + can be specified as extensions to the data sets by a + PTP Profile or a product specification."; + reference + "8.2.1.2.1 of IEEE Std 1588-2019"; + } + + leaf clock-identity { + type oc-ptp-types:clock-identity; + description + "The IEEE Std 1588 clockIdentity of the PTP Instance."; + reference + "8.2.1.2.2 of IEEE Std 1588-2019"; + } + + leaf number-ports { + type uint16; + description + "The number of PTP Ports on the PTP Instance. + For an Ordinary Clock, the value shall be one."; + reference + "8.2.1.2.3 of IEEE Std 1588-2019"; + } + } + + grouping default-ds-top { + description + "Top-level grouping for default data sets of the clock, + including configuration and operational state data"; + + container default-ds { + description + "The default data set of the PTP Instance."; + reference + "8.2.1 of IEEE Std 1588-2019"; + + container clock-quality { + description + "The IEEE Std 1588 clockQuality of the PTP Instance. + PTP Instances with better quality are more likely to + become the Grandmaster PTP Instance."; + reference + "8.2.1.3.1 of IEEE Std 1588-2019"; + + container config { + description + "Config state data of clock-quality"; + uses clock-quality-top; + } + container state { + config false; + description + "Operational state data of clock-quality"; + uses clock-quality-top; + } + } + container config { + description + "Config state data of default data set of the clock"; + uses default-ds-config; + } + container state { + config false; + description + "Operational state data of default data set of the clock"; + uses default-ds-state; + } + } + } + + grouping port-identity { + description + "The IEEE Std 1588 PortIdentity type identifies a + PTP Port or Link Port."; + reference + "5.3.5 of IEEE Std 1588-2019"; + + leaf clock-identity { + type oc-ptp-types:clock-identity; + description + "IEEE Std 1588 clockIdentity."; + } + + leaf port-number { + type uint16; + description + "IEEE Std 1588 portNumber. + If portNumber is unavailable, the value 0 can + be used, or this leaf can be omitted from the + operational datastore."; + reference + "7.5.2.3 of IEEE Std 1588-2019"; + } + } + + grouping parent-ds-state { + description + "The parent data set of the clock (see IEEE Std 1588-2008 + subclause 8.2.3)."; + reference + "IEEE Std 1588-2008: 8.2.3"; + + container parent-port-identity { + description + "The IEEE Std 1588 portIdentity of the PTP Port on the + Master PTP Instance that issues the Sync messages + used in synchronizing this PTP Instance."; + reference + "8.2.3.2 of IEEE Std 1588-2019"; + uses port-identity; + } + + leaf parent-stats { + type boolean; + description + "When set to true, the values of + parent-ds/observed-parent-offset-scaled-log-variance + and + parent-ds/observed-parent-clock-phase-change-rate + have been measured and are valid."; + reference + "8.2.3.3 of IEEE Std 1588-2019"; + } + + leaf observed-parent-offset-scaled-log-variance { + type uint16; + description + "Estimate of the variance of the phase offset of the + Local PTP Clock of the Parent PTP Instance as measured + with respect to the Local PTP Clock in the Slave PTP + Instance. This measurement is optional, but if not made, + the value of parent-ds/parent-stats shall be false."; + reference + "7.6.3.3 of IEEE Std 1588-2019 + 7.6.3.5 of IEEE Std 1588-2019 + 8.2.3.4 of IEEE Std 1588-2019"; + } + + leaf observed-parent-clock-phase-change-rate { + type int32; + description + "Estimate of the phase change rate of the + Local PTP Clock of the Parent PTP Instance as measured + by the Slave PTP Instance using its Local PTP Clock. + If the estimate exceeds the capacity of its data type, + this value shall be set to 7FFF FFFF (base 16) or + 8000 0000 (base 16), as appropriate. A positive sign + indicates that the phase change rate in the + Parent PTP Instance is greater than that in the + Slave PTP Instance. The measurement of this value is + optional, but if not measured, the value of + parent-ds/parent-stats shall be false."; + reference + "7.6.4.4 of IEEE Std 1588-2019 + 8.2.3.5 of IEEE Std 1588-2019"; + } + + leaf grandmaster-identity { + type oc-ptp-types:clock-identity; + description + "The IEEE Std 1588 clockIdentity of the Grandmaster PTP + Instance."; + reference + "8.2.3.6 of IEEE Std 1588-2019"; + } + + container grandmaster-clock-quality { + description + "The IEEE Std 1588 clockQuality of the Grandmaster PTP + Instance."; + reference + "8.2.3.7 of IEEE Std 1588-2019"; + uses clock-quality-top; + } + + leaf grandmaster-priority1 { + type uint8; + description + "The IEEE Std 1588 priority1 of the Grandmaster PTP + Instance."; + reference + "8.2.3.8 of IEEE Std 1588-2019"; + } + + leaf grandmaster-priority2 { + type uint8; + description + "The IEEE Std 1588 priority2 of the Grandmaster PTP + Instance."; + reference + "8.2.3.9 of IEEE Std 1588-2019"; + } + } + + grouping parent-ds-top { + description + "Top-level grouping for parent data sets of the clock, including + configuration and operational state data"; + + container parent-ds { + description + "Provides data learned from the parent of this PTP Instance (i.e. + master port on the other side of the path/link)."; + reference + "8.2.3 of IEEE Std 1588-2019"; + + container state { + description + "Operational state data of parent data set"; + config false; + uses parent-ds-state; + } + } + } + + grouping ports-top { + description + "Top-level grouping for port data sets of the clock, + including configuration and operational state data"; + container ports { + description + "YANG container that is used to get all PTP Ports + in the PTP Instance. + YANG does not allow get of all elements in a YANG list, + so a YANG container wrapping the YANG list is provided for + that purpose. The naming convention uses plural for the + wrapping YANG container, and singular for the YANG list."; + list port { + key "port-index"; + description + "List of data for each PTP Port in the PTP Instance. + While the PTP Instance is disabled, it is possible to + have zero PTP Ports (i.e., ports not yet created). + While the PTP Instance is enabled, an Ordinary Clock + will have one PTP Port, and a Boundary Clock or + Transparent Clock will have more than one PTP Port."; + reference + "8.1.4.2 of IEEE Std 1588-2019"; + + leaf port-index { + type leafref { + path "../config/port-index"; + } + description + "The port list is indexed using a number that is + unique per PTP Port within the PTP Instance, + applicable to the management context only + (i.e., not used in PTP messages)."; + } + + container config { + description + "Config state data of port data set of the clock"; + uses port-config-top; + } + + container state { + description + "operational state data of port data set of the clock"; + config false; + uses port-config-top; + } + + uses port-ds-top; + } + } + } + + grouping port-config-top { + description + "Configuration data of port data set of the clock"; + leaf port-index { + type uint16; + description + "The port list is indexed using a number that is + unique per PTP Port within the PTP Instance, + applicable to the management context only + (i.e., not used in PTP messages)."; + } + + leaf underlying-interface { + type if:interface-ref; + description + "Reference to the configured underlying IETF YANG + interface that is used by this PTP Port for + transport of PTP messages. Among other data, + physical identifiers for the interface + (e.g., MAC address) can be obtained using this + reference."; + reference + "RFC 8343"; + } + } + + grouping port-ds-state-top { + description + "Operational state data of port data set of the clock"; + + leaf port-state { + type oc-ptp-types:port-state-enumeration; + description + "Current state of the protocol engine associated + with this PTP Port."; + reference + "8.2.15.3.1 of IEEE Std 1588-2019"; + } + + leaf peer-mean-path-delay { + type oc-ptp-types:time-interval; + description + "In IEEE Std 1588-2008, this data set member was + called portDS.peerMeanPathDelay. While the + specification of this member is retained in the + current standard, the member is renamed to + portDS.meanLinkDelay (i.e., ../mean-link-delay). + This change is consistent with other changes that + ensure clarity and consistency of naming, where + - 'path' is associated with the + request-response mechanism + - 'link' is associated with the + peer-to-peer delay mechanism"; + reference + "8.2.5.3.3 of IEEE Std 1588-2008"; + } + } + + grouping port-ds-top { + description + "Top-level container for port data set of PTP Port."; + container port-ds { + description + "Primary data set for the PTP Port."; + reference + "8.2.15 of IEEE Std 1588-2019"; + + container config { + description + "Configuration data of port data set of the clock"; + uses port-ds-config-top; + } + + container state { + description + "Operational state data of port data set of the clock"; + config false; + uses port-ds-config-top; + uses port-ds-state-top; + } + } + } + + grouping port-ds-config-top { + description + "Top-level container for configuration port data set of PTP Port."; + + leaf log-announce-interval { + type int8; + description + "Logarithm to the base 2 of the mean IEEE Std 1588 + announceInterval, the time interval between + successive Announce messages sent by a PTP Port."; + reference + "7.7.2.2 of IEEE Std 1588-2019 + 8.2.15.4.1 of IEEE Std 1588-2019"; + } + + leaf announce-receipt-timeout { + type uint8; + description + "The integral multiple of IEEE Std 1588 + announceInterval that must pass without receipt of + an Announce message before the occurrence of the + event ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES. The range + shall be 2 to 255 subject to further restrictions of + the applicable PTP Profile. While 2 is permissible, + normally the value should be at least 3."; + reference + "7.7.3.1 of IEEE Std 1588-2019 + 8.2.15.4.2 of IEEE Std 1588-2019"; + } + + leaf log-sync-interval { + type int8; + description + "Logarithm to the base 2 of the mean IEEE Std 1588 + syncInterval, the time interval between successive + Sync messages, when transmitted as multicast + messages. The rates for unicast transmissions are + negotiated separately on a per PTP Port basis and + are not constrained by this leaf."; + reference + "7.7.2.3 of IEEE Std 1588-2019 + 8.2.15.4.3 of IEEE Std 1588-2019"; + } + + leaf delay-mechanism { + type oc-ptp-types:delay-mechanism-enumeration; + description + "The path delay measuring mechanism used by the PTP + Port in computing (propagation delay)."; + reference + "8.2.15.4.4 of IEEE Std 1588-2019"; + } + + leaf log-min-pdelay-req-interval { + type int8; + description + "Logarithm to the base 2 of the IEEE Std 1588 + minPdelayReqInterval, the minimum permitted + mean time interval between successive Pdelay_Req + messages sent over a PTP Link."; + reference + "7.7.2.5 of IEEE Std 1588-2019 + 8.2.15.4.5 of IEEE Std 1588-2019"; + } + + leaf version-number { + type uint8; + description + "The PTP major version in use on the PTP Port. + NOTE - This indicates the version of the + IEEE 1588 standard, and not the version of an + applicable PTP Profile."; + reference + "8.2.15.4.6 of IEEE Std 1588-2019"; + } + + leaf log-min-delay-req-interval { + type int8; + description + "Logarithm to the base 2 of the IEEE Std 1588 + minDelayReqInterval, the minimum permitted + mean time interval between successive Delay_Req + messages sent by a Slave PTP Instance."; + reference + "7.7.2.4 of IEEE Std 1588-2019 + 8.2.15.3.2 of IEEE Std 1588-2019"; + } + + leaf unicast-multicast { + type oc-ptp-types:unicast-multicast-enumeration; + description + "Whether the network transport uses unicast or + multicast communication"; + } + } + + grouping transparent-clock-default-ds-config-top { + description + "Top-level container for configuration default data set of transparent clock."; + + leaf delay-mechanism { + type oc-ptp-types:delay-mechanism-enumeration; + description + "The propagation delay measuring mechanism (e2e or p2p)."; + reference + "8.3.2.3.1 of IEEE Std 1588-2019"; + } + + leaf primary-domain { + type uint8; + description + "The domainNumber of the primary syntonization domain."; + reference + "8.3.2.3.2 of IEEE Std 1588-2019"; + } + + leaf two-step-flag { + type boolean; + description + "When set to true, the clock is a two-step clock; + otherwise,the clock is a one-step clock."; + } + } + grouping transparent-clock-top { + description + "Top-level container for configuration and operational state data of transparent clock."; + + container transparent-clock-default-ds { + description + "This default data set was specified in + IEEE Std 1588-2008, and under some interpretations, + it applied to all domains, which in turn means that it + represents multiple Transparent Clocks. + In IEEE Std 1588-2019, this data set is specified as + applying to the PTP Node (all domains), but the data set is + deprecated. For new designs, the standard recommends that + Transparent Clocks use the PTP Instance data sets + (i.e., /ptp/instances/instance[]), such that each + Transparent Clock supports a single PTP Instance and + domain."; + reference + "8.3.1 of IEEE Std 1588-2019"; + + container config { + description + "Top-level container for configuration data of transparent clock."; + uses transparent-clock-default-ds-config-top; + } + container state { + description + "Top-level container for operational state data of transparent clock."; + + config false; + + uses transparent-clock-default-ds-config-top; + + leaf clock-identity { + type oc-ptp-types:clock-identity; + description + "The clockIdentity of the local clock."; + reference + "8.3.2.2.1 of IEEE Std 1588-2019"; + } + + leaf number-ports { + type uint16; + description + "The number of PTP Ports of the device."; + reference + "8.3.2.2.2 of IEEE Std 1588-2019"; + } + } + } + + container transparent-clock-ports { + description + "YANG container that is used to get all ports of the + IEEE Std 1588 transparentClockPortDS. + YANG does not allow get of all elements in a YANG list, + so a YANG container wrapping the YANG list is provided for + that purpose. The naming convention uses plural for the + wrapping YANG container, and singular for the YANG list."; + + list port { + description + "This list of Transparent Clock port data sets was specified + in IEEE Std 1588-2008, and under some interpretations, + it applied to all domains, which in turn means that it + represents multiple Transparent Clocks. + In IEEE Std 1588-2019, this list is specified as + applying to the PTP Node (all domains), but the list is + deprecated. For new designs, the standard recommends that + Transparent Clocks use the PTP Instance data sets + (i.e., /ptp/instances/instance[]), such that each + Transparent Clock supports a single PTP Instance + and domain."; + reference + "8.3.1 of IEEE Std 1588-2019"; + key "port-index"; + leaf port-index { + description + "The port list is indexed using a number that is + unique per PTP Port within the PTP Instance, + applicable to the management context only + (i.e., not used in PTP messages)."; + type leafref { + path "../config/port-index"; + } + } + + container config { + description + "Top-level container for configuration data of transparent clock port."; + uses port-config-top; + } + + container state { + description + "Top-level container for operational state data of transparent clock port."; + config false; + uses port-config-top; + } + + container port-ds { + description + "IEEE Std 1588 transparentClockPortDS."; + reference + "8.3.3 of IEEE Std 1588-2019"; + + container config { + description + "Configuration data of transparent clock port data set."; + uses transparent-port-ds-config-top; + } + container state { + description + "Operational state data of transparent clock port data set."; + config false; + uses transparent-port-ds-config-top; + container port-identity { + description + "The IEEE Std 1588 portIdentity of this port."; + reference + "8.3.3.2.1 of IEEE Std 1588-2019"; + uses port-identity; + } + leaf peer-mean-path-delay { + type oc-ptp-types:time-interval; + description + "An estimate of the current one-way propagation delay + on the link when the delayMechanism is P2P; otherwise, + it is zero."; + reference + "8.3.3.3.3 of IEEE Std 1588-2019"; + } + } + } + } + } + } + + grouping transparent-port-ds-config-top { + description + "Top-level container for configuration port data set of transparent clock port."; + leaf log-min-pdelay-req-interval { + type int8; + description + "The logarithm to the base 2 of the + minPdelayReqInterval (minimum permitted mean time + interval between successive Pdelay_Req messages)."; + reference + "8.3.3.3.1 of IEEE Std 1588-2019"; + } + + leaf faulty-flag { + type boolean; + description + "Shall be true if the port is faulty and false + if the port is operating normally."; + reference + "8.3.3.3.2 of IEEE Std 1588-2019"; + } + + leaf network-transport { + type oc-ptp-types:network-transport-enumeration; + description + "The network transport used for communication"; + } + } + + grouping ptp-top { + description + "Top-level grouping for PTP configuration and operational state data"; + + container ptp { + description + "Contains all YANG nodes for the PTP data sets. This hierarchy can be + augmented with YANG nodes for a specific vendor or PTP Profile."; + + container instances { + description + "YANG container that is used to get all PTP Instances. YANG does not + allow get of all elements in a YANG list, so a YANG container wrapping + the YANG list is provided for that purpose. The naming convention uses + plural for the wrapping YANG container, and singular for the YANG list."; + + list instance { + key "id"; + description + "List of one or more PTP Instances in the product (PTP Node). Each + PTP Instance represents a distinct instance of PTP implementation + (i.e. distinct Ordinary Clock, Boundary Clock, or Transparent Clock), + maintaining a distinct time. PTP Instances may be created or deleted + dynamically in implementations that support dynamic create/delete."; + reference + "8.1.4.2 of IEEE Std 1588-2019"; + + leaf id { + type leafref { + path "../config/id"; + } + description + "The instance list is indexed using a number that is unique per PTP + Instance within the PTP Node, applicable to the management context + only (i.e. not used in PTP messages). The domain-number of the PTP + Instance is not used as the key to instance-list, since it is possible + for a PTP Node to contain multiple PTP Instances using the same + domain-number."; + reference + "8.1.4.2 of IEEE Std 1588-2019"; + } + + container config { + description + "Configuration data for PTP instance."; + uses instance-config; + } + + container state { + description + "Operational state data for PTP instance."; + config false; + uses instance-state; + } + + container current-ds { + description + "Current data set state data of PTP instance."; + container state { + description + "Operational state current data set of PTP instance."; + config false; + uses current-ds-state; + } + } + container time-properties-ds { + description + "Time properties data set of PTP instance."; + container config { + description + "Configuration data of time properties data set."; + uses time-properties-ds-state; + } + + container state { + description + "Operational state data of time properties data set."; + config false; + uses time-properties-ds-state; + } + } + + uses default-ds-top; + uses parent-ds-top; + uses ports-top; + } + } + + uses transparent-clock-top; + } + } + + uses ptp-top; +} From f238a8df49e3b84cb7d3ea8b718f095a53c550b5 Mon Sep 17 00:00:00 2001 From: Darren Loher Date: Mon, 7 Oct 2024 16:08:25 -0700 Subject: [PATCH 2/9] Add aft encapsulation-headers (#1153) * Add aft encap-headers container for specifying arbitrary stacks of packet header encapsulations * Add aft encap header containers for existing encaps (ip-in-ip and gre) * Add aft encap header containers for new encaps (mpls, udpv4, udpv6) --- release/models/aft/openconfig-aft-common.yang | 334 +++++++++++++++++- .../models/aft/openconfig-aft-ethernet.yang | 8 +- release/models/aft/openconfig-aft-ipv4.yang | 8 +- release/models/aft/openconfig-aft-ipv6.yang | 8 +- release/models/aft/openconfig-aft-mpls.yang | 8 +- release/models/aft/openconfig-aft-pf.yang | 8 +- .../aft/openconfig-aft-state-synced.yang | 8 +- release/models/aft/openconfig-aft-types.yang | 12 +- release/models/aft/openconfig-aft.yang | 8 +- 9 files changed, 381 insertions(+), 21 deletions(-) diff --git a/release/models/aft/openconfig-aft-common.yang b/release/models/aft/openconfig-aft-common.yang index c69587e0f..50eac8d8f 100644 --- a/release/models/aft/openconfig-aft-common.yang +++ b/release/models/aft/openconfig-aft-common.yang @@ -23,7 +23,13 @@ submodule openconfig-aft-common { "Submodule containing definitions of groupings that are re-used across multiple contexts within the AFT model."; - oc-ext:openconfig-version "2.6.0"; + oc-ext:openconfig-version "2.7.0"; + + revision "2024-09-05" { + description + "Add encap-headers to AFT model."; + reference "2.7.0"; + } revision "2024-04-25" { description @@ -217,38 +223,212 @@ submodule openconfig-aft-common { container ip-in-ip { description - "When specified, the packet has an IP-in-IP header applied to it before - forwarding to the specified next-hop."; + "When specified, the packet has an IP-in-IP header applied to it + before forwarding to the specified next-hop. + + This node must be supported in addition to the + encap-headers/encap-header tree. A future release of OpenConfig + will deprecate this node in favor of the + encap-headers/encap-header subtree."; container state { config false; description "State parameters relating to IP-in-IP encapsulation."; - uses aft-common-entry-nexthop-ipip-state; + + uses aft-common-entry-nexthop-ip-state; } } container gre { description "When specified, the packet has an GRE - (Generic Routing Encapsulation)header applied to + (Generic Routing Encapsulation) header applied to it before forwarding to the specified next-hop. encapsulate-header leaf should be set to GRE for this - to apply"; + to apply. + + This node must be supported in addition to the + encap-headers/encap-header tree. A future release of OpenConfig + will deprecate this node in favor of the + encap-headers/encap-header subtree."; container state { config false; description "State parameters relating to GRE encapsulation."; + uses aft-common-entry-nexthop-gre-state; } } + container encap-headers { + description + "Container for packet encapsulation headers. When leaves in this + container are populated, it indicates encapsulation of the packet + matching the next-hop is performed using a stack of one or more + headers defined in the list encap-header. + + Each entry in the list must indicate an encapsulation type and + populate a container with the parameters for that encapsulation + header."; + + list encap-header { + description + "A list of headers added on top of a packet ordered by the + index value. The inner-most header is the 0th value and is + adjacent to the original packet. Additional headers may be + added in index order. + + For example, in an encapsulation stack for MPLS in UDPv4, the + first index in the list is the MPLS header and the second + index is a UDPv4 header."; + + key "index"; + + leaf index { + type leafref { + path "../state/index"; + } + description + "A unique index identifying an encapsulation header in a stack + of encapsulation headers."; + } + + container state { + description + "State parameters relating to encapsulation headers."; + + uses aft-common-nexthop-encap-headers-state; + } + + container gre { + when "../state/type = 'oc-aftt:GRE'"; + description + "Container of nodes for GRE encapsulation."; + + container state { + description + "State parameters relating to GRE encapsulation headers."; + + uses aft-common-entry-nexthop-gre-state; + } + } + + container ipv4 { + when "../state/type = 'oc-aftt:IPV4'"; + description + "Container of nodes for UDP in IPv4 encapsulation. When this + container is used, an IPv4 packet with no transport header + is added to the encapsulation list."; + + container state { + description + "State parameters relating to IP encapsulation headers."; + + uses aft-common-entry-nexthop-ip-state; + } + } + + container ipv6 { + when "../state/type = 'oc-aftt:IPV6'"; + description + "Container of nodes for UDP in IPv6 encapsulation. When this + container is used, an IPv6 packet with no transport header + is added to the encapsulation list."; + + container state { + description + "State parameters relating to IP encapsulation headers."; + + uses aft-common-entry-nexthop-ip-state; + } + } + + container mpls { + when "../state/type = 'oc-aftt:MPLS'"; + description + "Container of nodes for MPLS encapsulation."; + + container state { + description + "State parameters relating to MPLS encapsulation headers."; + + uses aft-common-entry-nexthop-mpls-state; + } + } + + container udp-v4 { + when "../state/type = 'oc-aftt:UDPV4'"; + description + "Container of nodes for UDP in IPv4 encapsulation. When this + container is used, an IPv4 header with a UDP header is added + to the encapsulation list."; + + container state { + description + "State parameters relating to UDP in IPv4 encapsulation + headers."; + + uses aft-common-entry-nexthop-encap-udp-state; + } + } + + container udp-v6 { + when "../state/type = 'oc-aftt:UDPV6'"; + description + "Container of nodes for UDP in IPv6 encapsulation. When this + container is used, an IPv6 header with a UDP header is added + to the encapsulation list."; + + container state { + description + "State parameters relating to UDP in IPv6 encapsulation + headers."; + + uses aft-common-entry-nexthop-encap-udp-state; + } + } + + container vxlan { + when "../state/type = 'oc-aftt:VXLAN'"; + description + "Container of nodes for VXLAN encapsulation."; + + container state { + description + "State parameters relating to VXLAN encapsulation headers."; + + uses aft-common-entry-nexthop-vxlan-state; + } + } + + } + } + uses oc-if:interface-ref-state; } } } + grouping aft-common-nexthop-encap-headers-state { + description + "Operational state parameters relating to encapsulation headers."; + + leaf index { + type uint8; + description + "A pointer to an entry in an ordered list of encapsulation headers."; + } + + leaf type { + type oc-aftt:encapsulation-header-type; + description + "Defines which type of packet header should be used."; + } + + } + grouping aft-common-entry-state { description "Operational state parameters relating to a forwarding entry"; @@ -294,14 +474,24 @@ submodule openconfig-aft-common { "Where applicable, the next hop label representing the virtual network identifier (VNI) for the forwarding entry. This leaf is applicable only to next-hops which include VXLAN encapsulation - header information"; + header information. + + This node must be supported in addition to the + encap-headers/encap-header tree. A future release of OpenConfig + will deprecate this node in favor of the + encap-headers/encap-header subtree."; } leaf tunnel-src-ip-address { type oc-inet:ip-address; description "Where applicable this represents the vxlan tunnel source ip address. - For VXLAN this represents the source VTEP ip address"; + For VXLAN this represents the source VTEP IP address. + + This node must be supported in addition to the + encap-headers/encap-header tree. A future release of OpenConfig + will deprecate this node in favor of the + encap-headers/encap-header subtree."; } } @@ -348,7 +538,7 @@ submodule openconfig-aft-common { default false; description "Flag that controls pop action, i.e., the top-most MPLS label - should be popped from the packet when switched by the system. + should be popped from the packet when switched by the system. The top-most MPLS label associated with pop action is equal to the label key used in 'mpls' AFT 'label-entry' list."; @@ -372,8 +562,12 @@ submodule openconfig-aft-common { system re-ordering of leaves is permitted by the system. A swap operation is reflected by entries in the - popped-mpls-label-stack and pushed-mpls-label-stack nodes."; + popped-mpls-label-stack and pushed-mpls-label-stack nodes. + This node must be supported in addition to the + encap-headers/encap-header tree. A future release of OpenConfig + will deprecate this node in favor of the + encap-headers/encap-header subtree."; } leaf encapsulate-header { @@ -381,7 +575,12 @@ submodule openconfig-aft-common { description "When forwarding a packet to the specified next-hop the local system performs an encapsulation of the packet - adding the - specified header type."; + specified header type. + + This node must be supported in addition to the + encap-headers/encap-header tree. A future release of OpenConfig + will deprecate this node in favor of the + encap-headers/encap-header subtree."; } leaf decapsulate-header { @@ -399,9 +598,9 @@ submodule openconfig-aft-common { uses aft-common-install-protocol; } - grouping aft-common-entry-nexthop-ipip-state { + grouping aft-common-entry-nexthop-ip-state { description - "IP-in-IP encapsulation applied on a next-hop"; + "IP encapsulation applied on a next-hop"; leaf src-ip { type oc-inet:ip-address; @@ -444,6 +643,115 @@ submodule openconfig-aft-common { } } + grouping aft-common-entry-nexthop-mpls-state { + description + "MPLS encapsulation of a packet."; + + leaf traffic-class { + type oc-mplst:mpls-tc; + description + "The value of the MPLS traffic class (TC) bits, formerly known as the + EXP bits."; + } + + leaf-list mpls-label-stack { + type oc-mplst:mpls-label; + ordered-by user; + description + "A stack of MPLS label values. The first entry in the list is the + label at the bottom of the stack. The bottom of the stack is adjacent + to the MPLS payload. + + For example, a packet with a label stack of two labels, the bottom + label being 42 and the top label being 8072 will be represented with + a leaf-list of [42, 8072]. The resulting packet, starting with the + beginning of the packet will be '[8072][42][Payload]'. + + Note: a swap operation is reflected by entries in the + popped-mpls-label-stack and the pushed-mpls-label-stack"; + } + } + + + grouping aft-common-entry-nexthop-encap-udp-state { + description + "UDP encapsulation applied on top of a packet."; + + leaf src-ip { + type oc-inet:ip-address; + description + "The source IP address for IP/UDP encapsulation."; + } + + leaf dst-ip { + type oc-inet:ip-address; + description + "Destination IP address for IP/UDP encapsulation."; + } + + leaf dscp { + type oc-inet:dscp; + description + "DSCP value to use for the UDP header of the encapsulated + packet."; + } + + leaf src-udp-port { + type oc-inet:port-number; + description + "Source UDP port number to use for the UDP header of the encapsulated + packet. The source UDP port should be derived from the payload + packet entropy. The exact methodology is implementation dependent, + but for example, the port could be derived from an entropy hash of + the payload or the source port (if present) of the payload."; + } + + leaf dst-udp-port { + type oc-inet:port-number; + description + "Source UDP port number to use for the UDP header of the encapsulated + packet. + + When the payload packet is MPLS, then RFC 7510 - Encapsulating MPLS + in UDP should be followed."; + reference + "RFC 7510 - Encapsulating MPLS in UDP specifies that 6635 must be + used for MPLS-in-UDP and 6636 must be used for MPLS-in-UDP with DTLS. + Because of this condition, no default is defined in OpenConfig. The + system is expected to utilize the appropriate port."; + } + + leaf ip-ttl { + type uint8; + description + "This leaf reflects the configured/default IP TTL value that is used + in the outer header during packet encapsulation. When this leaf is + not set, the TTL value of the inner packet is copied over as the + outer packet's IP TTL value during encapsulation."; + } + } + + grouping aft-common-entry-nexthop-vxlan-state { + description + "VXLAN encapsulation applied on top of a packet."; + + leaf vni-label { + type oc-evpn-types:evi-id; + description + "Where applicable, the next hop label representing the virtual + network identifier (VNI) for the forwarding entry. This leaf is + applicable only to next-hops which include VXLAN encapsulation + header information"; + } + + leaf tunnel-src-ip-address { + type oc-inet:ip-address; + description + "Where applicable this represents the vxlan tunnel source ip address. + For VXLAN this represents the source VTEP ip address"; + } + } + grouping aft-common-install-protocol { description "Grouping for a common reference to the protocol which diff --git a/release/models/aft/openconfig-aft-ethernet.yang b/release/models/aft/openconfig-aft-ethernet.yang index b2c0758df..3fbe6edab 100644 --- a/release/models/aft/openconfig-aft-ethernet.yang +++ b/release/models/aft/openconfig-aft-ethernet.yang @@ -20,7 +20,13 @@ submodule openconfig-aft-ethernet { "Submodule containing definitions of groupings for the abstract forwarding tables for Ethernet."; - oc-ext:openconfig-version "2.6.0"; + oc-ext:openconfig-version "2.7.0"; + + revision "2024-07-18" { + description + "Add container for mpls-in-udp under next-hops aft entry state."; + reference "2.7.0"; + } revision "2024-04-25" { description diff --git a/release/models/aft/openconfig-aft-ipv4.yang b/release/models/aft/openconfig-aft-ipv4.yang index d582b2ad7..87fb7e6fa 100644 --- a/release/models/aft/openconfig-aft-ipv4.yang +++ b/release/models/aft/openconfig-aft-ipv4.yang @@ -20,7 +20,13 @@ submodule openconfig-aft-ipv4 { "Submodule containing definitions of groupings for the abstract forwarding tables for IPv4."; - oc-ext:openconfig-version "2.6.0"; + oc-ext:openconfig-version "2.7.0"; + + revision "2024-09-05" { + description + "Add encapsulate-stack under aft next-hops."; + reference "2.7.0"; + } revision "2024-04-25" { description diff --git a/release/models/aft/openconfig-aft-ipv6.yang b/release/models/aft/openconfig-aft-ipv6.yang index c8aede635..765830cd5 100644 --- a/release/models/aft/openconfig-aft-ipv6.yang +++ b/release/models/aft/openconfig-aft-ipv6.yang @@ -20,7 +20,13 @@ submodule openconfig-aft-ipv6 { "Submodule containing definitions of groupings for the abstract forwarding tables for IPv6."; - oc-ext:openconfig-version "2.6.0"; + oc-ext:openconfig-version "2.7.0"; + + revision "2024-07-18" { + description + "Add container for mpls-in-udp under next-hops aft entry state."; + reference "2.7.0"; + } revision "2024-04-25" { description diff --git a/release/models/aft/openconfig-aft-mpls.yang b/release/models/aft/openconfig-aft-mpls.yang index 2418a5a9e..c99e1c58f 100644 --- a/release/models/aft/openconfig-aft-mpls.yang +++ b/release/models/aft/openconfig-aft-mpls.yang @@ -21,7 +21,13 @@ submodule openconfig-aft-mpls { "Submodule containing definitions of groupings for the abstract forwarding table for MPLS label forwarding."; - oc-ext:openconfig-version "2.6.0"; + oc-ext:openconfig-version "2.7.0"; + + revision "2024-09-05" { + description + "Add encapsulate-stack under aft next-hops."; + reference "2.7.0"; + } revision "2024-04-25" { description diff --git a/release/models/aft/openconfig-aft-pf.yang b/release/models/aft/openconfig-aft-pf.yang index 8f0d5a243..9980ad5f0 100644 --- a/release/models/aft/openconfig-aft-pf.yang +++ b/release/models/aft/openconfig-aft-pf.yang @@ -28,7 +28,13 @@ submodule openconfig-aft-pf { fields other than the destination address that is used in other forwarding tables."; - oc-ext:openconfig-version "2.6.0"; + oc-ext:openconfig-version "2.7.0"; + + revision "2024-07-18" { + description + "Add container for mpls-in-udp under next-hops aft entry state."; + reference "2.7.0"; + } revision "2024-04-25" { description diff --git a/release/models/aft/openconfig-aft-state-synced.yang b/release/models/aft/openconfig-aft-state-synced.yang index 3e0950826..fbe6eb5ca 100644 --- a/release/models/aft/openconfig-aft-state-synced.yang +++ b/release/models/aft/openconfig-aft-state-synced.yang @@ -16,7 +16,13 @@ submodule openconfig-aft-state-synced { "Submodule containing definitions of groupings for the state synced signals corresponding to various abstract forwarding tables."; - oc-ext:openconfig-version "2.6.0"; + oc-ext:openconfig-version "2.7.0"; + + revision "2024-07-18" { + description + "Add container for mpls-in-udp under next-hops aft entry state."; + reference "2.7.0"; + } revision "2024-04-25" { description diff --git a/release/models/aft/openconfig-aft-types.yang b/release/models/aft/openconfig-aft-types.yang index 4b7fc8f64..56d920b5f 100644 --- a/release/models/aft/openconfig-aft-types.yang +++ b/release/models/aft/openconfig-aft-types.yang @@ -16,7 +16,13 @@ module openconfig-aft-types { "Types related to the OpenConfig Abstract Forwarding Table (AFT) model"; - oc-ext:openconfig-version "1.1.0"; + oc-ext:openconfig-version "1.2.0"; + + revision "2024-07-18" { + description + "Add MPLS in UDP enums for encapsulate-header."; + reference "1.2.0"; + } revision "2022-05-05" { description @@ -89,6 +95,10 @@ module openconfig-aft-types { description "The encapsulation header is a VXLAN packet header"; } + enum UDP { + description + "The encapsulation header is UDP packet header."; + } } description "Types of tunnel encapsulation that are supported by systems as either diff --git a/release/models/aft/openconfig-aft.yang b/release/models/aft/openconfig-aft.yang index d1af3e977..de3ce202e 100644 --- a/release/models/aft/openconfig-aft.yang +++ b/release/models/aft/openconfig-aft.yang @@ -42,7 +42,13 @@ module openconfig-aft { is referred to as an Abstract Forwarding Table (AFT), rather than the FIB."; - oc-ext:openconfig-version "2.6.0"; + oc-ext:openconfig-version "2.7.0"; + + revision "2024-09-05" { + description + "Add encapsulate-stack under aft next-hops."; + reference "2.7.0"; + } revision "2024-04-25" { description From 868ab347282a6772921ba06df50c3a2be667ceb4 Mon Sep 17 00:00:00 2001 From: Ravi Verman <80886094+raviv-arista@users.noreply.github.com> Date: Tue, 8 Oct 2024 22:41:23 +0530 Subject: [PATCH 3/9] Added PIM bidirectional mode to the PIM_MODE type (#1118). (#1119) Co-authored-by: Darren Loher --- .../models/multicast/openconfig-pim-types.yang | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/release/models/multicast/openconfig-pim-types.yang b/release/models/multicast/openconfig-pim-types.yang index a1fc515cf..9e2aeac1c 100644 --- a/release/models/multicast/openconfig-pim-types.yang +++ b/release/models/multicast/openconfig-pim-types.yang @@ -21,7 +21,13 @@ module openconfig-pim-types { description "This module defines types related to the PIM protocol model."; - oc-ext:openconfig-version "0.1.1"; + oc-ext:openconfig-version "0.1.2"; + + revision "2024-05-31" { + description + "Add PIM bidirectional mode."; + reference "0.1.2"; + } revision "2018-11-21" { description @@ -62,6 +68,13 @@ module openconfig-pim-types { reference "RFC3973"; } + identity PIM_MODE_BIDIR { + base PIM_MODE; + description + "PIM bidirectional mode."; + reference "RFC5015"; + } + // typedef statements typedef dr-priority-type { From b0ef7797a2f04bd2b4fe89782c09a538c72c6e1b Mon Sep 17 00:00:00 2001 From: Eric Breverman Date: Tue, 15 Oct 2024 09:16:21 -0700 Subject: [PATCH 4/9] Define how physical channel power leaves are used. (#1189) Co-authored-by: Darren Loher --- .../openconfig-platform-transceiver.yang | 51 ++++++++++--------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/release/models/platform/openconfig-platform-transceiver.yang b/release/models/platform/openconfig-platform-transceiver.yang index 81a6e7031..e60220563 100644 --- a/release/models/platform/openconfig-platform-transceiver.yang +++ b/release/models/platform/openconfig-platform-transceiver.yang @@ -66,7 +66,13 @@ module openconfig-platform-transceiver { specify a physical-channel within a TRANSCEIVER component (i.e. gray optic) that it is associated with."; - oc-ext:openconfig-version "0.14.0"; + oc-ext:openconfig-version "0.15.0"; + +revision "2024-09-21" { + description + "Clearly define how physical channel power leaves are used."; + reference "0.15.0"; + } revision "2023-08-30" { description @@ -204,7 +210,11 @@ revision "2023-08-30" { 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"; + instant value. In some cases, such as when the physical + channel has a leafref to an optical channel component and the + module-functional-type is TYPE_DIGITAL_COHERENT_OPTIC this + grouping will NOT be used as the data will be within the + optical-channel"; uses oc-types:avg-min-max-instant-stats-precision2-dBm; } @@ -221,7 +231,12 @@ revision "2023-08-30" { 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"; + instant value. When the physical channel has a leafref to + an optical channel component and the module-functional-type is + TYPE_DIGITAL_COHERENT_OPTIC this represents the aggregate + total optical power value (signal and noise) whereas + optical power value within the optical-channel represents + the signal power"; uses oc-types:avg-min-max-instant-stats-precision2-dBm; } @@ -233,7 +248,11 @@ revision "2023-08-30" { with up to two decimal precision. 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"; + expected to just supply the instant value. In some cases, + such as when the physical channel has a leafref to an optical + channel component and the module-functional-type is + TYPE_DIGITAL_COHERENT_OPTIC this grouping will NOT be used + as the data will be within the optical-channel"; uses oc-types:avg-min-max-instant-stats-precision2-mA; } @@ -251,7 +270,11 @@ revision "2023-08-30" { "The frequency in MHz of the individual physical channel (e.g. ITU C50 - 195.0THz and would be reported as 195,000,000 MHz in this model). This attribute is not - configurable on most client ports."; + configurable on most client ports In some cases, such as when + the physical channel has a leafref to an optical channel + component and the module-functional-type is + TYPE_DIGITAL_COHERENT_OPTIC this grouping will NOT be used + as the data will be within the optical-channel."; } } @@ -384,24 +407,6 @@ revision "2023-08-30" { uses oc-opt-types:avg-min-max-instant-stats-precision2-pct; } - uses physical-channel-state-extended { - when "../../../state/module-functional-type = 'oc-opt-types:TYPE_STANDARD_OPTIC'" { - description - "When the physical channel is of TYPE_STANDARD_OPTIC, the - extended state will be used"; - } - } - } - - grouping physical-channel-state-extended { - description - "Extended operational state data for physical client channels - for applications where the full physical channel config and - state are used. In some cases, such as when the physical - channel has a leafref to an optical channel component and the - module-functional-type is TYPE_DIGITAL_COHERENT_OPTIC this - grouping will NOT be used."; - uses output-optical-frequency; uses optical-power-state; } From 881b9e606c4b8a4d631e7c85dc84d303a8230dc9 Mon Sep 17 00:00:00 2001 From: Aaron Bamberger Date: Tue, 22 Oct 2024 11:59:28 -0500 Subject: [PATCH 5/9] Updates to the ES model to allow the configuration of an ES-import route target (#1109) * Add a new leaf "es-import-route-target" to the Ethernet Segment config model to allow the explicit configuration of an ES-import route target as per RFC7432 Section 7.6 --- .../openconfig-ethernet-segments.yang | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/release/models/ethernet-segments/openconfig-ethernet-segments.yang b/release/models/ethernet-segments/openconfig-ethernet-segments.yang index b09357564..0d490661f 100644 --- a/release/models/ethernet-segments/openconfig-ethernet-segments.yang +++ b/release/models/ethernet-segments/openconfig-ethernet-segments.yang @@ -8,6 +8,7 @@ module openconfig-ethernet-segments { import openconfig-extensions { prefix oc-ext; } import openconfig-interfaces { prefix oc-if; } + import openconfig-yang-types { prefix oc-yang-types; } import openconfig-evpn-types { prefix oc-evpn-types; } // meta @@ -23,7 +24,13 @@ module openconfig-ethernet-segments { The ethernet segments are used in EVPN services are defined for the whole device"; - oc-ext:openconfig-version "0.1.0"; + oc-ext:openconfig-version "0.2.0"; + + revision "2024-09-06" { + description + "Added ability to configure an explicit es-import-route-target for an ES"; + reference "0.2.0"; + } revision "2021-06-28" { description @@ -199,6 +206,17 @@ grouping evpn-ethernet-segment-df-config { "RFC 7432: BGP MPLS-Based Ethernet VPN"; } + leaf es-import-route-target { + type oc-yang-types:mac-address; + description + "Received ES routes with an ES-Import extended community set to this value + are imported into this ethernet segment. When configured by a user, the + es-import-route-target will be used, otherwise the system automatically + derives the value used by following the procedures in RFC 7432 Section 7.6."; + reference + "RFC 7432: BGP MPLS-Based Ethernet VPN Section 7.6"; + } + uses oc-if:interface-ref-common; } @@ -247,4 +265,4 @@ grouping evpn-ethernet-segment-df-config { uses evpn-ethernet-segment-top; -} \ No newline at end of file +} From 35b7954619d4c76dbb37903c6f494891b62618d6 Mon Sep 17 00:00:00 2001 From: romeyod <78448014+romeyod@users.noreply.github.com> Date: Tue, 22 Oct 2024 13:00:13 -0400 Subject: [PATCH 6/9] Define `telemetry-atomic-exempt` annotation. Add `telemetry-atomic-exempt` annotation to AFT counters containers (#1186) * Add atomic-exempt and use it in counters AFT --- release/models/aft/openconfig-aft-common.yang | 10 ++++++- .../models/aft/openconfig-aft-ethernet.yang | 8 +++++- release/models/aft/openconfig-aft-ipv4.yang | 8 +++++- release/models/aft/openconfig-aft-ipv6.yang | 8 +++++- release/models/aft/openconfig-aft-mpls.yang | 8 +++++- release/models/aft/openconfig-aft-pf.yang | 8 +++++- .../aft/openconfig-aft-state-synced.yang | 8 +++++- release/models/aft/openconfig-aft.yang | 8 +++++- release/models/openconfig-extensions.yang | 27 +++++++++++++++++-- 9 files changed, 83 insertions(+), 10 deletions(-) diff --git a/release/models/aft/openconfig-aft-common.yang b/release/models/aft/openconfig-aft-common.yang index 50eac8d8f..ee27c1bb8 100644 --- a/release/models/aft/openconfig-aft-common.yang +++ b/release/models/aft/openconfig-aft-common.yang @@ -23,7 +23,13 @@ submodule openconfig-aft-common { "Submodule containing definitions of groupings that are re-used across multiple contexts within the AFT model."; - oc-ext:openconfig-version "2.7.0"; + oc-ext:openconfig-version "2.8.0"; + + revision "2024-09-19" { + description + "Add atomic-exempt attribute to AFT counters containers."; + reference "2.8.0"; + } revision "2024-09-05" { description @@ -1093,6 +1099,7 @@ submodule openconfig-aft-common { } grouping aft-common-entry-counter-state { + oc-ext:telemetry-atomic-exempt; description "Counters relating to a forwarding entry"; @@ -1112,6 +1119,7 @@ submodule openconfig-aft-common { } grouping aft-common-backup-entry-counter-state { + oc-ext:telemetry-atomic-exempt; description "Counters relating to a backup forwarding entry"; diff --git a/release/models/aft/openconfig-aft-ethernet.yang b/release/models/aft/openconfig-aft-ethernet.yang index 3fbe6edab..52d038a62 100644 --- a/release/models/aft/openconfig-aft-ethernet.yang +++ b/release/models/aft/openconfig-aft-ethernet.yang @@ -20,7 +20,13 @@ submodule openconfig-aft-ethernet { "Submodule containing definitions of groupings for the abstract forwarding tables for Ethernet."; - oc-ext:openconfig-version "2.7.0"; + oc-ext:openconfig-version "2.8.0"; + + revision "2024-09-19" { + description + "Add atomic-exempt attribute to AFT counters containers."; + reference "2.8.0"; + } revision "2024-07-18" { description diff --git a/release/models/aft/openconfig-aft-ipv4.yang b/release/models/aft/openconfig-aft-ipv4.yang index 87fb7e6fa..43c19f6a5 100644 --- a/release/models/aft/openconfig-aft-ipv4.yang +++ b/release/models/aft/openconfig-aft-ipv4.yang @@ -20,7 +20,13 @@ submodule openconfig-aft-ipv4 { "Submodule containing definitions of groupings for the abstract forwarding tables for IPv4."; - oc-ext:openconfig-version "2.7.0"; + oc-ext:openconfig-version "2.8.0"; + + revision "2024-09-19" { + description + "Add atomic-exempt attribute to AFT counters containers."; + reference "2.8.0"; + } revision "2024-09-05" { description diff --git a/release/models/aft/openconfig-aft-ipv6.yang b/release/models/aft/openconfig-aft-ipv6.yang index 765830cd5..f68138234 100644 --- a/release/models/aft/openconfig-aft-ipv6.yang +++ b/release/models/aft/openconfig-aft-ipv6.yang @@ -20,7 +20,13 @@ submodule openconfig-aft-ipv6 { "Submodule containing definitions of groupings for the abstract forwarding tables for IPv6."; - oc-ext:openconfig-version "2.7.0"; + oc-ext:openconfig-version "2.8.0"; + + revision "2024-09-19" { + description + "Add atomic-exempt attribute to AFT counters containers."; + reference "2.8.0"; + } revision "2024-07-18" { description diff --git a/release/models/aft/openconfig-aft-mpls.yang b/release/models/aft/openconfig-aft-mpls.yang index c99e1c58f..add842110 100644 --- a/release/models/aft/openconfig-aft-mpls.yang +++ b/release/models/aft/openconfig-aft-mpls.yang @@ -21,7 +21,13 @@ submodule openconfig-aft-mpls { "Submodule containing definitions of groupings for the abstract forwarding table for MPLS label forwarding."; - oc-ext:openconfig-version "2.7.0"; + oc-ext:openconfig-version "2.8.0"; + + revision "2024-09-19" { + description + "Add atomic-exempt attribute to AFT counters containers."; + reference "2.8.0"; + } revision "2024-09-05" { description diff --git a/release/models/aft/openconfig-aft-pf.yang b/release/models/aft/openconfig-aft-pf.yang index 9980ad5f0..8534f84fa 100644 --- a/release/models/aft/openconfig-aft-pf.yang +++ b/release/models/aft/openconfig-aft-pf.yang @@ -28,7 +28,13 @@ submodule openconfig-aft-pf { fields other than the destination address that is used in other forwarding tables."; - oc-ext:openconfig-version "2.7.0"; + oc-ext:openconfig-version "2.8.0"; + + revision "2024-09-19" { + description + "Add atomic-exempt attribute to AFT counters containers."; + reference "2.8.0"; + } revision "2024-07-18" { description diff --git a/release/models/aft/openconfig-aft-state-synced.yang b/release/models/aft/openconfig-aft-state-synced.yang index fbe6eb5ca..5901b2c1e 100644 --- a/release/models/aft/openconfig-aft-state-synced.yang +++ b/release/models/aft/openconfig-aft-state-synced.yang @@ -16,7 +16,13 @@ submodule openconfig-aft-state-synced { "Submodule containing definitions of groupings for the state synced signals corresponding to various abstract forwarding tables."; - oc-ext:openconfig-version "2.7.0"; + oc-ext:openconfig-version "2.8.0"; + + revision "2024-09-19" { + description + "Add atomic-exempt attribute to AFT counters containers."; + reference "2.8.0"; + } revision "2024-07-18" { description diff --git a/release/models/aft/openconfig-aft.yang b/release/models/aft/openconfig-aft.yang index de3ce202e..d00303963 100644 --- a/release/models/aft/openconfig-aft.yang +++ b/release/models/aft/openconfig-aft.yang @@ -42,7 +42,13 @@ module openconfig-aft { is referred to as an Abstract Forwarding Table (AFT), rather than the FIB."; - oc-ext:openconfig-version "2.7.0"; + oc-ext:openconfig-version "2.8.0"; + + revision "2024-09-19" { + description + "Add atomic-exempt attribute to AFT counters containers."; + reference "2.8.0"; + } revision "2024-09-05" { description diff --git a/release/models/openconfig-extensions.yang b/release/models/openconfig-extensions.yang index 2e0fd9f07..56cc22cbb 100644 --- a/release/models/openconfig-extensions.yang +++ b/release/models/openconfig-extensions.yang @@ -18,7 +18,13 @@ module openconfig-extensions { "This module provides extensions to the YANG language to allow OpenConfig specific functionality and meta-data to be defined."; - oc-ext:openconfig-version "0.5.1"; + oc-ext:openconfig-version "0.6.0"; + + revision "2024-09-19" { + description + "Add telemetry-atomic-exempt annotation."; + reference "0.6.0"; + } revision "2022-10-05" { description @@ -154,7 +160,7 @@ module openconfig-extensions { extension telemetry-atomic { description "The telemetry-atomic annotation is specified in the context of - a subtree (containre, or list), and indicates that all nodes + a subtree (container, or list), and indicates that all nodes within the subtree are always updated together within the data model. For example, all elements under the subtree may be updated as a result of a new alarm being raised, or the arrival of a new @@ -164,6 +170,23 @@ module openconfig-extensions { optimisations for sending or storing the corresponding data."; } + extension telemetry-atomic-exempt { + description + "The telemetry-atomic-exempt annotation is specified in the context + of a node or subtree (container, or list), and indicates that the node + or all nodes within the subtree are not always updated together within + the data model of the parent tree. All elements under the subtree may + not be updated as a result of a new alarm being raised, or the arrival + of a new protocol message that updates the parent tree. + + This annotation allows parent tree containers with telemetry-atomic + annotation to not be updated when a more frequently updated node or + subtree. For example, a counters container is present. + + This extension should only be used when there is a parent that + contains telemetry-atomic extension."; + } + extension operational { description "The operational annotation is specified in the context of a From 9ab7c1fcce09bfca53acb7b9c78f1aa17c86da3d Mon Sep 17 00:00:00 2001 From: Emmanuel Ferdman Date: Wed, 23 Oct 2024 01:12:48 +0300 Subject: [PATCH 7/9] Update contributions guide reference (#1205) Signed-off-by: Emmanuel Ferdman --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index acbb7b9ca..39a35b9df 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -3,7 +3,7 @@ tagged with "Note" can be removed from the template.] [Note: Before this PR can be reviewed please agree to the CLA covering this repo. Please also review the contribution guide - -https://github.com/openconfig/public/blob/master/doc/external-contributions-guide.md] +https://github.com/openconfig/public/blob/master/doc/contributions-guide.md] ### Change Scope From aca87f3e59c1e74744e9e01e4e6381b1094aea79 Mon Sep 17 00:00:00 2001 From: Ebben Aries Date: Wed, 23 Oct 2024 14:43:57 -0600 Subject: [PATCH 8/9] Refactor non-compliant/overlapping YANG definition for BGP MED (#1165) * Refactor non-compliant/overlapping YANG definition for BGP MED * (M) release/models/bgp/openconfig-bgp-policy.yang - Remove string type from bgp-set-med-type union - Add new bgp-set-med-action typedef to separate out action on MED values - Add new set-med-action leaf to be optionally utilized with set-med * Add constraints between med/action + add an explicit SET action --------- Co-authored-by: Darren Loher --- release/models/bgp/openconfig-bgp-policy.yang | 68 +++++++++++++++---- 1 file changed, 54 insertions(+), 14 deletions(-) diff --git a/release/models/bgp/openconfig-bgp-policy.yang b/release/models/bgp/openconfig-bgp-policy.yang index f4c0c18c4..ee5c34e01 100644 --- a/release/models/bgp/openconfig-bgp-policy.yang +++ b/release/models/bgp/openconfig-bgp-policy.yang @@ -28,7 +28,14 @@ module openconfig-bgp-policy { It augments the base routing-policy module with BGP-specific options for conditions and actions."; - oc-ext:openconfig-version "7.1.0"; + oc-ext:openconfig-version "8.0.0"; + + revision "2024-08-23" { + description + "Separate the ability to set the BGP MED along with an appropriate + action."; + reference "8.0.0"; + } revision "2024-07-02" { description @@ -210,23 +217,40 @@ module openconfig-bgp-policy { typedef bgp-set-med-type { type union { type uint32; - type string { - pattern '[+-][0-9]+'; - oc-ext:posix-pattern '^[+-][0-9]+$'; - } type enumeration { enum IGP { - description "set the MED value to the IGP cost toward the - next hop for the route"; + description + "Set the MED value to the IGP cost toward the next hop for + the route"; } } } description - "Type definition for specifying how the BGP MED can - be set in BGP policy actions. The three choices are to set - the MED directly using the uint32 type or increment/decrement - using +/- notation in the string type or setting it to - the IGP cost using the enum (predefined value)."; + "Type definition for specifying how the BGP MED can be set in BGP + policy actions. The MED can be specified as a direct integer + value or setting it to the IGP cost. To be used in conjunction + with `bgp-set-med-action` in order to specify the appropriate + action to take on this value."; + } + + typedef bgp-set-med-action { + type enumeration { + enum SET { + description + "Action to set the MED to a specific value."; + } + enum ADD { + description + "Action to increment the previous MED value."; + } + enum SUBTRACT { + description + "Action to decrement the previous MED value."; + } + } + description + "Specifies which action to take on the value specified by the + bgp-set-med-type."; } // grouping statements @@ -1345,8 +1369,24 @@ module openconfig-bgp-policy { leaf set-med { type bgp-set-med-type; - description "set the med metric attribute in the route - update"; + must "../set-med-action" { + error-message + "set-med cannot be specified without a valid set-med-action"; + } + description + "Set the MED metric attribute in the route update. When set, a + valid `set-med-action` must be specified."; + } + + leaf set-med-action { + type bgp-set-med-action; + must "../set-med" { + error-message + "set-med-action cannot be specified without a set-med value"; + } + description + "When set-med is specified, this leaf is mandatory to set the + appropriate action on the MED metric value."; } } From db78d44e93a97cef4db27f82bba3fba454e907a5 Mon Sep 17 00:00:00 2001 From: adityasingh-anet Date: Wed, 23 Oct 2024 20:36:14 -0500 Subject: [PATCH 9/9] Update openconfig-gnsi-acctz.yang (#1195) * Delete idle-timeouts and counters-last-cleared leaves * Split source-counters and client counters to be under separate augments Co-authored-by: Darren Loher --- .../models/gnsi/openconfig-gnsi-acctz.yang | 128 ++++++++++-------- 1 file changed, 69 insertions(+), 59 deletions(-) diff --git a/release/models/gnsi/openconfig-gnsi-acctz.yang b/release/models/gnsi/openconfig-gnsi-acctz.yang index d95ccccfb..258b40c77 100644 --- a/release/models/gnsi/openconfig-gnsi-acctz.yang +++ b/release/models/gnsi/openconfig-gnsi-acctz.yang @@ -10,9 +10,6 @@ module openconfig-gnsi-acctz { import openconfig-system-grpc { prefix oc-sys-grpc; } - import openconfig-types { - prefix oc-types; - } import openconfig-yang-types { prefix oc-yang; } @@ -30,7 +27,14 @@ module openconfig-gnsi-acctz { "This module provides counters of gNSI accountZ requests and responses and the quantity of data transferred."; - oc-ext:openconfig-version "0.2.0"; + oc-ext:openconfig-version "0.3.0"; + + revision 2024-10-07 { + description + "Remove `idle-timeouts` and `counters-last-cleared` leaves. + Relocate source-counters and client-counters to separate paths"; + reference "0.3.0"; + } revision 2024-02-13 { description @@ -116,54 +120,52 @@ module openconfig-gnsi-acctz { description "A collection of counters that were collected by the gNSI.acctz module while servicing acctz clients."; - - container client-counters { - description - "A collection of counters that were collected by the gNSI.acctz - module while servicing acctz clients."; - leaf history-istruncated { - type oc-yang:counter64; - description - "The total number of times that a RecordRequest resulted in - a RecordResponse being marked history-istruncated. ie: a - request was made for a timestamp that did not exist in the - history."; - } - leaf idle-timeouts { - type oc-yang:counter64; - description - "The total number of times that a client was disconnected - due to missing keepalives (ie: RecordRequests)."; - } - leaf record-requests { - type oc-yang:counter64; + container state { description - "The total number of RecordRequest RPCs that have been received."; - } - leaf record-responses { - type oc-yang:counter64; + "Operational state relating to acctz-counters."; + + container counters { description - "The total number of RecordResponse RPCs that have been sent."; + "A collection of counters that were collected by the gNSI.acctz + module while servicing acctz clients."; + + leaf history-istruncated { + type oc-yang:counter64; + description + "The total number of times that a RecordRequest resulted in + a RecordResponse being marked history-istruncated. ie: a + request was made for a timestamp that did not exist in the + history."; + } + leaf record-requests { + type oc-yang:counter64; + description + "The total number of RecordRequest messages that have been received."; + } + leaf record-responses { + type oc-yang:counter64; + description + "The total number of RecordResponse messages that have been sent."; + } } } } // gnsi.acctz producer statistics - grouping source-counters { + grouping source-records { description "A collection of counters for gNSI.acctz record production per service request type."; - container source-counters { + container source-records { description "A collection of counters for gNSI.acctz record production per service request type."; - list source-records { + list source-record { key "service type"; // unique "service type"; description - "The total number of times the gNSI.authz module denied access - to a RPC."; + "A collection of counters for each service request type."; leaf service { type leafref { @@ -194,11 +196,16 @@ module openconfig-gnsi-acctz { description "service request application enum for the gNSI.acctz record."; } - leaf records { - type oc-yang:counter64; + + container counters { description - "The total number of records produced for the service-request - type."; + "A collection of counters for gNSI.acctz record production per + service-type."; + leaf records { + type oc-yang:counter64; + description + "The total number of records produced for the service-type."; + } } } } @@ -207,30 +214,26 @@ module openconfig-gnsi-acctz { grouping grpc-server-acctz-counters { description - "A collection of counters from the gNSI.acctz module."; + "A collection of counters from the gNSI.acctz module that exist per grpc server."; - container acctz-counters { + container acctz { config false; description - "A collection of counters from the gNSI.acctz module - for acctz clients and sources."; - - container state { - description - "Operational state relating to acctz-counters."; - - leaf counters-last-cleared { - type oc-types:timeticks64; - description - "The last time that the counters were cleared (reset to - zero). This value is reported as nanoseconds since epoch - (January 1st, 1970 00:00:00 GMT)."; - } + "A collection of counters from the gNSI.acctz module that exist + per grpc server."; + uses client-counters; + } + } - uses client-counters; - } + grouping system-acctz-counters { + description + "A collection of counters from the gNSI.acctz module."; - uses source-counters; + container acctz { + config false; + description + "A collection of counters regarding the creation of gNSI.acctz records."; + uses source-records; } } @@ -238,8 +241,15 @@ module openconfig-gnsi-acctz { augment "/oc-sys:system/oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server" { when "config[contains(services, 'oc-gnsi:GNSI')]/enable = 'true'"; description - "Counters collected by the gNSI.acctz module."; + "Counters collected by the gNSI.acctz module regarding grpc servers."; uses grpc-server-acctz-counters; } + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:accounting" { + description + "Counters collected by the gNSI.acctz module regarding the system."; + + uses system-acctz-counters; + } }