diff --git a/.github/workflows/diff.yaml b/.github/workflows/diff.yaml new file mode 100644 index 000000000..1775e77ff --- /dev/null +++ b/.github/workflows/diff.yaml @@ -0,0 +1,42 @@ +name: Breaking Changes + +on: + pull_request: + branches: [ master ] + +jobs: + build: + name: major version update check + runs-on: ubuntu-latest + + steps: + - name: Install go + uses: actions/setup-go@v4 + with: + go-version: '1.x' + + - name: Check out code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Install openconfig-ci CLI + run: | + go install github.com/openconfig/models-ci/openconfig-ci@05dd074 + + - name: Make sure all backward-incompatible changes are covered by version changes. + id: check + run: | + readonly HEAD=${{ github.event.pull_request.head.sha }} + readonly BASE="$(git merge-base origin/master "${HEAD}")" + + BASEREPODIR=public_base + mkdir -p "${BASEREPODIR}/release" + git checkout "${BASE}" + cp -r release/models "${BASEREPODIR}/release" + cp -r third_party "${BASEREPODIR}" + git checkout "${HEAD}" + oldroot="${BASEREPODIR}" + newroot=. + + openconfig-ci diff --disallowed-incompats --oldp "${oldroot}/third_party" --oldroot "${oldroot}/release/models" --newp "${newroot}/third_party" --newroot "${newroot}/release/models" diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml new file mode 100644 index 000000000..3fdc49dda --- /dev/null +++ b/.github/workflows/stale.yaml @@ -0,0 +1,14 @@ +name: 'Close stale issues and PRs' +on: + schedule: + - cron: '42 2 * * *' + +jobs: + stale: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + stale-issue-message: 'This issue is stale because it has been open 180 days with no activity. If you wish to keep this issue active, please remove the stale label or add a comment, otherwise will be closed in 14 days.' + days-before-stale: 180 + days-before-close: 14 diff --git a/README.md b/README.md index 236c7d979..83ae80d5c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![OpenConfig Linter](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:oc-pyang.svg)](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:oc-pyang.html) [![pyangbind](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:pyangbind.svg)](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:pyangbind.html) [![goyang/ygot](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:goyang-ygot.svg)](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:goyang-ygot.html) +[![ygnmi](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:ygnmi.svg)](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:ygnmi.html) [![yanglint](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:yanglint.svg)](https://storage.googleapis.com/openconfig/compatibility-badges/openconfig-public:yanglint.html) # OpenConfig diff --git a/cloudbuild.yaml b/cloudbuild.yaml index a53dcde45..1c72a5313 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -52,7 +52,7 @@ steps: git clone git@github.com:openconfig/models-ci.git /go/src/github.com/openconfig/models-ci cd /go/src/github.com/openconfig/models-ci # Modify the major version to update models-ci version. - branch=$(git tag -l 'v9*' | sort -V | tail -1) + branch=$(git tag -l 'v13.*' | sort -V | tail -1) git checkout $branch volumes: - name: 'ssh' @@ -89,7 +89,6 @@ steps: -pr-number=$_PR_NUMBER -skipped-validators=confd,yanglint -extra-pyang-versions=2.2.1 - #-compat-report=yanglint -branch=$BRANCH_NAME secretEnv: ['GITHUB_ACCESS_TOKEN'] env: @@ -213,16 +212,6 @@ steps: id: 'oc-pyang' ############### GOYANG/YGOT ############### -- name: 'golang' - entrypoint: 'go' - args: ['install', 'github.com/openconfig/ygot/generator@latest'] - volumes: - - name: 'gopath' - path: /go - env: - - 'GOPATH=/go' - waitFor: ['go path creation'] - id: 'goyang-ygot prep' - name: 'us-west1-docker.pkg.dev/$PROJECT_ID/models-ci/models-ci-image' entrypoint: 'bash' args: ['-c', "/go/src/github.com/openconfig/models-ci/validators/goyang-ygot/test.sh"] @@ -237,7 +226,7 @@ steps: - 'COMMIT_SHA=$COMMIT_SHA' - '_REPO_SLUG=$_REPO_SLUG' - 'BRANCH_NAME=$BRANCH_NAME' - waitFor: ['validator prep', 'goyang-ygot prep', 'oc-pyang'] + waitFor: ['validator prep', 'go path creation', 'oc-pyang'] id: 'goyang-ygot' ############### PYANG ############### @@ -276,6 +265,24 @@ steps: waitFor: ['validator prep', 'oc-pyang'] id: 'pyangbind' +############### YGNMI ############### +- name: 'us-west1-docker.pkg.dev/$PROJECT_ID/models-ci/models-ci-image' + entrypoint: 'bash' + args: ['-c', "/go/src/github.com/openconfig/models-ci/validators/ygnmi/test.sh"] + secretEnv: ['GITHUB_ACCESS_TOKEN'] + volumes: + - name: 'gopath' + path: /go + env: + - 'GOPATH=/go' + - '_PR_NUMBER=$_PR_NUMBER' + - '_MODEL_ROOT=$_MODEL_ROOT' + - 'COMMIT_SHA=$COMMIT_SHA' + - '_REPO_SLUG=$_REPO_SLUG' + - 'BRANCH_NAME=$BRANCH_NAME' + waitFor: ['validator prep', 'go path creation', 'oc-pyang', 'pyangbind'] # wait for pyangbind to avoid possible OOM. + id: 'ygnmi' + ############### COMPATIBILITY REPORT ############### - name: 'us-west1-docker.pkg.dev/$PROJECT_ID/models-ci/models-ci-image' entrypoint: 'bash' @@ -296,6 +303,7 @@ steps: timeout: 600s options: machineType: 'E2_HIGHCPU_32' + logging: CLOUD_LOGGING_ONLY availableSecrets: inline: diff --git a/doc/Integrated-Circuit_pipeline_aggregated_counters_guide.md b/doc/Integrated-Circuit_pipeline_aggregated_counters_guide.md new file mode 100644 index 000000000..ad7c64d37 --- /dev/null +++ b/doc/Integrated-Circuit_pipeline_aggregated_counters_guide.md @@ -0,0 +1,72 @@ +# Integrated Circuit aggregated pipeline counters guide +## Introduction +This guide discusses semantics of different counters provided under the +`openconfig-platform/components/component/integrated-circuit/pipeline-counters` container. +The `INTEGRATED_CIRCUIT` or I-C, in this document refers to the OpenConfig [INTEGRATED_CIRCUIT](https://github.com/openconfig/public/blob/5d38d8531ef9c5b998262207eb6dbdae8968f9fe/release/models/platform/openconfig-platform-types.yang#L346) component type which is typically an ASIC or NPU (or combination of both) that provides packet processing capabilities. + +## Per-block packets/octets counters +[TODO] more detailed description +## Drop packets/octets counters +The `/components/component/integrated-circuit/pipeline-counters/drop` container collects counters related to packets dropped by the `INTEGRATED_CIRCUIT`. +### Aggregated drop counters +These 4 counters should cover all packets dropped by the IC which are not already covered by the /interfaces tree. For example, a packet which is dropped due to QoS policy for WRED should be counted only by the appropriate /interfaces path [dropped-pkts](https://github.com/openconfig/public/blob/5d38d8531ef9c5b998262207eb6dbdae8968f9fe/release/models/qos/openconfig-qos-interfaces.yang#L375). + +Aggregated drop counters are modeled as below: +``` +module: openconfig-platform + +--rw components + +--rw component* [name] + +--rw integrated-circuit + +--ro oc-ppc:pipeline-counters + +--ro oc-ppc:drop + +--ro oc-ppc:state + +--ro oc-ppc:adverse-aggregate? oc-yang:counter64 + +--ro oc-ppc:congestion-aggregate? oc-yang:counter64 + +--ro oc-ppc:packet-processing-aggregate? oc-yang:counter64 + +--ro oc-ppc:urpf-aggregate? oc-yang:counter64 +``` +#### urpf-aggregate + +##### Usability +The increments of this counter are typically signal of some form of attack with spoofed source address. Typically dDOS class. + +#### packet-processing-aggregate + +##### Usability +The increments of this counter are expected during convergence events as well as during stable operation. However rapid increase in drop rate **may** be a signal of network being unhealthy and typically requires further investigation. +The further break down of this counter, if available as vendor extension under `/openconfig-platform:components/component/integrated-circuit/openconfig-platform-pipeline-counters:pipeline-counters/drop/vendor` container could help to further narrow-down cause of drops. + +If prolonged packet drops are found to be caused by lack of FIB entry for incoming packets, this suggest inconsistency between Network Control plane protocols (BGP, IGP, RSVP, gRIBI), FIB calculated by Controller Card and FIB programmed into given Integrated Circuit. + +If an implementation supports `urpf-aggregate` counter, packets discarded due to uRPF should not be counted as `packet-processing-aggregate`. Else, uRPF discarded oacket should be counted against this counter. + +#### congestion-aggregate + + +##### Usability +The increments of this counter are signal of given Integrated Circuit being overhelmed by incoming traffic and complexity of packet processing that is required. + +#### adverse-aggregate +##### Usability +The increments of this counter are generally a signal of a hardware defect (e.g. memory errors or signal integrity issues) or (micro)code software defects. + +#### Queue tail and AQM drops exception discussion. +Drops associated with QoS queue tail or AQM are the result of egress interface congestion. This is NOT the same as I-C congestion, and should be counted using /interfaces counters as it is expected state from the platform (router) point of view. It may be not expected state from a network design point of view but from the INTEGRATED_CIRCUIT, it is behaving according to design. + +The OpenConfig definition for [congestion-aggregate](https://github.com/openconfig/public/blob/5d38d8531ef9c5b998262207eb6dbdae8968f9fe/release/models/platform/openconfig-platform-pipeline-counters.yang#L1096-L1099) excludes "queue drop counters". It desirable to not count QoS queue drops under this `congestion-aggregate` in order to maintain a clear signal of hitting I-C performance limitations, rather then blend it with basic, simple egress interface speed limitations. + +### Per-Block drop copunters +[TODO] more detailed description for standard OpenConfig drop counters defined for Interface-, Lookup-, Queueing-, Fabric- and Host-Interface- blocks. Also discuss relationship with Control plane traffic packets/octets counters. +### Vendor extensions +Please refer to [Vendor-Specific Augmentation for Pipeline Counter](vendor_counter_guide.md) +## Error counters +These leafs **do not** count **packets or bytes**. +They count error events. + +For example corruption of on chip, HBM or chip external memory buffers (soft-error) which also are not already counted as queue drops for interfaces. + +[TODO] more detailed description +## Control plane traffic packets/octets counters +[TODO] more detailed description. Also discuss relationship with Host-Interface block counters. +### Standard OpenConfig counters +### Vendor extensions diff --git a/doc/controller-card_poweroff.md b/doc/controller-card_poweroff.md new file mode 100644 index 000000000..db2ecf762 --- /dev/null +++ b/doc/controller-card_poweroff.md @@ -0,0 +1,165 @@ + + +## Controller Card Power Control + +This document describes operational use cases, rules and telemetry for power control of `CONTROLLER-CARD` components in network devices using OpenConfig. + + +## Operational use cases for CONTROLLER_CARD power control + +1. Operator suspects a network device issue is occurring due to faults on a CONTROLLER_CARD. The operator wants to quickly disable the CONTROLLER_CARD and later, troubleshoot the issue in a maintenance window. The operator also wants to ensure that the card stays disabled even if the device is rebooted. Some example scenarios below: + + a. It is possible that the faulty controller card is in a boot loop and the operator finds it best to disable the card to prevent undesired state. Expectations are also that the power remains disabled even after a system reboot. + + b. CPU overheating, memory errors or other hardware problems with the PRIMARY card may require the operator to proactively power-off the card and not let it be online during regular operation until replacement of the hardware is completed. + +2. Operator feels it important to keep the card shutdown to prevent unexpected outcomes post the physical swap of the faulty/alerting card so the operator can online the card in a controlled environment post replacement. + + +## CONTROLLER_CARD power and redundancy requirements + +Electrical power for a CONTROLLER_CARD can be configured off using the OC-Path [/components/component/controller-card/config/power-admin-state](https://openconfig.net/projects/models/schemadocs/yangdoc/openconfig-platform.html#components-component-controller-card-config-power-admin-state) and setting its value to POWER\_DISABLED. The following rules regarding CONTROLLER_CARD redundancy and changes to `power-admin-state` must be followed by the device: + + + +1. Only a CONTROLLER_CARD in `state/redundant-role` 'SECONDARY' will honor a change in `config/power-admin-state` to POWER_DISABLED. If the controller-card's `redundant-role` is 'PRIMARY', and its `config/power-admin-state` is set to 'POWER_DISABLED', the NOS must allow the configuration. However, the `state/power-admin-state` must remain as 'POWER_ENABLED'. A change in `state/power-admin-state` must take effect only on the next reboot or if the CONTROLLER_CARD is 'SECONDARY'. Examples of scenarios include: + +### Scenario 1 - Power off a secondary CONTROLLER_CARD + +Let's say controller-card0 is PRIMARY and controller-card1 is SECONDARY and controller-card1 receives an operator driven change of config/power-admin-state = POWER_DISABLED, then controller-card0 will power-off controller-card1 immediately. The leaf state/power-admin-state for controller-card1 must also be POWER_DISABLED. The 'state/last-poweroff-reason/trigger' should show as USER_INITIATED. The NOS may optionally update state/last-poweroff-reason/details. state/last-poweroff-time should record the time when the card was powered-off. For example: + +``` +/components/component[name=controller0]/state/redundant-role, PRIMARY +/components/component[name=controller0]/controller-card/config/power-admin-state, POWER_ENABLED +/components/component[name=controller0]/controller-card/state/power-admin-state, POWER_ENABLED +/components/component[name=controller1]/state/redundant-role, SECONDARY +/components/component[name=controller1]/controller-card/config/power-admin-state, POWER_DISABLED +/components/component[name=controller1]/controller-card/state/power-admin-state, POWER_DISABLED +/components/component[name=controller1]/state/last-poweroff-reason/trigger, USER_INITIATED +/components/component[name=controller1]/state/last-poweroff-reason/details, "User initiated Shutdown" +/components/component[name=controller1]/state/last-poweroff-time, 1706590714681765937 +``` + +### Scenario 2 - Power off primary CONTROLLER_CARD + +1. If controller-card0 is PRIMARY and controller-card1 is SECONDARY and if controller-card0 is set to config/power-admin-state = POWER_DISABLED by an operator, then controller-card0 will stay powered-on until the next reboot. `state/power-admin-state` must show as POWER_ENABLED. If a reboot of the PRIMARY CONTROLLER_CARD occurs, `state/last-poweroff-time` must record the time when the card powers-off, `state/last-poweroff-reason/trigger` must show as USER_INITIATED and `/state/last-poweroff-reason/details` may be updated. For example: + +When controller-card0 is PRIMARY: + +``` +/components/component[name=controller0]/state/redundant-role, PRIMARY +/components/component[name=controller0]/controller-card/config/power-admin-state, POWER_DISABLED +/components/component[name=controller0]/controller-card/state/power-admin-state, POWER_ENABLED +/components/component[name=controller1]/state/redundant-role, SECONDARY +/components/component[name=controller1]/controller-card/state/power-admin-state, POWER_ENABLED +``` + +After controller-card0 transitions to redundant-role SECONDARY: + +``` +/components/component[name=controller0]/state/redundant-role, SECONDARY +/components/component[name=controller0]/controller-card/config/power-admin-state, POWER_DISABLED +/components/component[name=controller0]/controller-card/state/power-admin-state, POWER_DISABLED +/components/component[name=controller0]/state/last-poweroff-reason/trigger, USER_INITIATED +/components/component[name=controller0]/state/last-poweroff-reason/details, "User initiated Shutdown" +/components/component[name=controller0]/state/last-poweroff-time, 1706590714681765937 +/components/component[name=controller1]/state/redundant-role, PRIMARY +/components/component[name=controller1]/controller-card/config/power-admin-state, POWER_ENABLED +/components/component[name=controller1]/controller-card/state/power-admin-state, POWER_ENABLED +``` + +2. A controller-card which is in state/redundant-role=SECONDARY and is config/power-admin-state=POWER_DISABLED must remain powered off, even after a reboot. It is possible that after a reboot, both the controller cards are powered-on. However as soon as the configuration is loaded, the system must power-off the subject controller-card. + +3. A CONTROLLER_CARD in redundant-role SECONDARY and state/power-admin-state = POWER_DISABLED cannot transition to redundant-role PRIMARY. If the PRIMARY CONTROLLER_CARD goes down, the device will be offline. + +4. When a controller card boots up and loads it’s configuration, power-admin-state may be set to POWER_DISABLED. The CONTROLLER_CARD must then power off and never enter into any controller card primary/secondary election process. This also means that an implementation shouldn't start a controller card election process until the configuration is loaded and consumed. + + **Note:-** If an implementation's architecture do not allow for controlling the order in which the configuration is loaded and the PRIMARY/SECONDARY election process, then this rule can be relaxed as long as the implementation has proper arrangements to power-off the controller-card with `config/power-admin-state=POWER_DISABLED` configuration during reboots (Warm/Cold). + + +5. On boot (cold or warm), if the chassis has a single controller card and it is configured for config/power-admin-state=POWER_DISABLED, it must continue with the boot process ignoring the configuration. As per Rule#1 above, the controller-card must have it's state/power-admin-state as POWER_ENABLED given that a single CONTROLLER_CARD will have it's state/redundant-role=PRIMARY. In this case too, the system must log a message using severity "Warning", to inform the Operator about the situation. + +6. In a Dual controller-card scenario, if a config is pushed for config/power-admin-state=POWER_DISABLED for either both controller-cards simultaneously or for one of the controller-cards while the other controller-card in the system is already configured for config/power-admin-state=POWER_DISABLED, then the implementation Must fail the configuration commit operation with an error similar to: "Not allowed to have both controller-cards configured for power-admin-state = POWER_DISABLED" + +## Flowchart on the Rules above: + +![Overview of the expected behavior](https://github.com/openconfig/public/tree/master/doc/img/controller_card.png?raw=true) + +## Concerns and possible failure scenarios + +1. If a PRIMARY card malfunctions and ends up in a bootloop, would this approach help? + + **Response:** + + + In this scenario the expectations are that the implementation takes steps to initiate a controller-card switchover operation. Therefore, the standby controller card takes over the PRIMARY role and the system stabilizes allowing for gRPC connections to be established. In this situation if the operator pushes a configuration to shutdown the SECONDARY card, the PRIMARY card must be able to power-off the SECONDARY controller-card. In this scenario, the implementation (depending on their architecture) may also initiate a shutdown of the faulty card from the new PRIMARY card. + +2. Since the operation relies on configuration, it is possible that the failure scenario may kick in before the configuration takes effect post a reboot. + + **Response:** + + + Response here is the same as "1" above. + + + +3. Both controller-cards are functional and the the secondary controller card is attempted to be powered off. + + **Response:** + + + The shutdown can be initiated by pushing the command [/components/component[controller-card#]/controller-card/config/power-admin-state = POWER\_DISABLED](https://openconfig.net/projects/models/schemadocs/yangdoc/openconfig-platform.html#components-component-controller-card-config-power-admin-state) to the box. As a result, the secondary controller card whose [/components/component/state/redundant-role](https://openconfig.net/projects/models/schemadocs/yangdoc/openconfig-platform.html#components-component-state-redundant-role) is SECONDARY will be shutdown and its [/components/component[name="my_secondary_controller-card"]/controller-card/state/power-admin-state](https://openconfig.net/projects/models/schemadocs/yangdoc/openconfig-platform.html#components-component-controller-card-state-power-admin-state) will change to "POWER\_DISABLED". If the configuration is saved and when the device reboots, the subject controller-card is expected to remain powered off. + +4. Both controller-cards are functional and the the primary controller card is attempted to be shutdown + + **Response:** + + + Follow Rule#1 above + +5. Only one controller-card is present and the card is attempted to be shutdown. + + **Response:** + + + Since the lone controller-card is PRIMARY, please follow Rule#1 above. After reboot, please follow Rule#5 + +6. Faulty card is shutdown and then replaced with a working card but device still has the config of `/components/component[controller-card#]/controller-card/config/power-admin-state = POWER_DISABLED` + + **Response:** + + + The new card must remain powered off. Power should only be enabled on the new card by a configuration change to set `/components/component[controller-card#]/controller-card/config/power-admin-state = POWER_ENABLED` + + +7. Both controller-cards present during the initial boot operation. However, the controller card that is configured as "POWER\_DISABLED" boots up sooner than the other card and takes over the ACTIVE role. + + **Response:** + + + Follow Rule#4 above. The only exception is when it is the only controller card in the chassis. In the latter case, Rule#5 above must be followed. + + +8. Say we have a situation whereby, A dual controller card device is functional, secondary is powered off by changing power-admin-state to POWER\_DISABLED. Later, the PRIMARY card is removed and the system goes offline. If the device is rebooted (for example via externally removing and reapplying power ), what should happen? + + **Response:** + + If during reboot the device continues to have a single controller-card, then Rule#5 above should be followed. + +9. According to Rule#5, a controller-card must ignore the configuration of `config/power-admin-state=POWER_DISABLED` and must continue with its boot process if it is the only controller-card in the chassis. This also means that, under split-brain situations when the communication between the controller-cards is broken, the option to use `config/power-admin-state=POWER_DISABLED` for one of the cards may not help post reboot? + + **Response** + + Lets walk through this situation to set the right context. We have a dual controller-card system which due to some reason (Hardware/Soaftware failure) got in to a split-brain scenaio. As per the question here, the operator decides to use `config/power-admin-state=POWER_DISABLED` command on one of the cards, somehow intiatiates a reboot process (Cold or Warm) and expects that the controller-card with `config/power-admin-state=POWER_DISABLED` stays disabled post reboot. There are several assumptions and nuances to this situation: + + a. One of the assumptions is that, the device is in a split-brain situation and would still allow connections for a configuration change. + + b. If somehow "9.a" above works, since both the controller-cards expect to be the master, none will power-down immediately as per Rule#1 above. Therefore the Chassis would need to be cold booted. + +Now after the system reboots following "9.b", if we consider that the original problem of broken communication between the controller-cards persists, the configration of `config/power-admin-state=POWER_DISABLED` on one of the controller-cards wouldn't help because of Rule#5 above. However, it is expected that the implementation has other hardware/software means to gracefully handle the split-brain situation. The proposal here to allow for power-disable of a controller-card using configuration has no impact whatsoever on the implementations ability to handle split-brain like conditions. + + ***Definition for Split-brain situation:*** + `In network routers/switches that use redundant controller-cards for high availability, a split-brain scenario occurs when the primary and secondary cards lose communication with each other, and both believe they should be the active controller. Probable causees for a Split-brain scenario can be configuration error or software bug preventing exchange of control messages between the cards breaking the communication` + + + diff --git a/doc/img/controller_card.png b/doc/img/controller_card.png new file mode 100644 index 000000000..4599258dd Binary files /dev/null and b/doc/img/controller_card.png differ diff --git a/doc/network_instance_redistribution.md b/doc/network_instance_redistribution.md index e531a66b4..d35b67fdd 100644 --- a/doc/network_instance_redistribution.md +++ b/doc/network_instance_redistribution.md @@ -22,7 +22,8 @@ In numerous use cases an operator wishes to take routes that exist in one protoc In those implementations that maintain a (virtual-) RIB per protocol, the operator must configure explicit connections between these tables, usually alongside a policy to allow such inter-protocol advertisement to occur. While no such configuration is required in those implementations that utilise a single RIB, it is notable that even in these implementations a protocol will not advertise another protocol's routes from the RIB by default (since such a setup would mean that for instance, the BGP DFZ would be re-advertised into the IGP at peering edge devices, which is clearly not desirable). Instead, an operator must create explicit configuration that matches routes installed into the RIB by a particular protocol, and then "import" these routes into the protocol that is expected to advertise them. -In this latter case, the use of an import policy within a particular protocol instance is equivalent to the former - with the only difference being the context in which the policy is defined. With a table per protocol, an explicit configuration of redistributing routes from protocol A to protocol B is specified. In the latter case, the target protocol (protocol B) is specified, and a policy is used to select the source protocols from which routes may be imported for advertisement. +In this latter case, the use of an import policy within a particular protocol instance is equivalent to the former - with the only difference being the context in which the policy is defined. With a table per protocol, an explicit configuration of redistributing routes from protocol A to protocol B is specified. In the latter case, the target protocol (protocol B) is specified, and a policy is used to select the source protocols from which routes may be imported for advertisement. +In both cases, the destination protocol (protocol B) only installs the redistributed routes from the source protocol (protocol A) in its "advertisement RIB view". The redistributed routes are not installed in the FIB (forwarding information base) and therefore are not used for forwarding. ## OpenConfig Approach to Protocol RIB Interconnection @@ -35,6 +36,8 @@ An OpenConfig `routing-policy` is specified along with the connection - allowing It is expected that protocol-specific attributes (e.g., BGP communities) are set by such an import policy, allowing routes that are redistributed to carry information relating to their source (e.g., an IGP route may be tagged with a specific community using policy to indicate its provenance). +In the absense of an import-policy for table-connections, default-import-policy should take effect. In the absence of both, no routes should be allowed to be redistributed. + ## Examples of OpenConfig Network instance ### Example: Aggregate Routes Redistributed to IS-IS Level 2 diff --git a/doc/terminal-device-properties-guide.md b/doc/terminal-device-properties-guide.md index 88f3f0706..682f839d2 100644 --- a/doc/terminal-device-properties-guide.md +++ b/doc/terminal-device-properties-guide.md @@ -36,4 +36,94 @@ Manifest files are a special OpenConfig model category since they do not represe In order to keep separated them from the rest of operational models, the following openconfig extension is included in the model, to enrich the module metadata: ``` oc-ext:origin "openconfig-properties"; -``` \ No newline at end of file +``` +# Extensions introduced in the v0.2.0 release of the model. + +### Motivation + +After the initial release of the [openconfig-terminal-device-properties.yang](https://github.com/openconfig/public/blob/master/release/models/devices-manifest/openconfig-terminal-device-properties.yang), there have been significant technical questions and discussions happening within the Telecom Infra Project (TIP) Open Optical & Packet Transport (OOPT) community between operators and vendors. + +This issue summarizes the motivation and issues detected in the first release of the model and it will serve as an introduction and motivation of a new pull request (#911) with a new proposed comprehensive update of the model which will be accompanied by the relevant explanations on how the new model proposal will try to overcome the detected issues. It is worth mentioning that the current analysis and the new proposal are the outcomes of an extensive technical discussion within the OOPT community between vendors and service providers and that it consolidates an already discussed proposal starting from the issues and motivations explained here. + +### Context + +The current proposed terminal-device-properties model was designed with the objective of allowing the terminal devices' system vendors to expose the intrinsic properties (Modulation Format, FEC, Baud-rate) and performance characteristics (Rx-OSNR, CD/PMD limits) of the device's supported transmission modes. + +The initial version of the model was designed as a flat list of mode properties, where each entry represents a mode supported by the terminal device and includes the list of characteristics of that mode. However, this initial version presents a significant list of limitations. + +### Initial release limitations +- **First issue**: The current model exposes a list of modes available in the device, however, the characteristics of a mode of transmission are affected by the HW transceiver supplying it. In other words, two different transceivers (supported by the same terminal device) might support the same mode, but their mode characteristics are different. + +image + +- **Second issue**: There is not an interoperability matrix within the Terminal Device's which exposes the compatibility between Terminal Device's chassis, linecards, transceivers and modes. Right now there is no compatibility information available in the model, to allow the supplier to properly describe which modes are supported by each transceiver module available in the terminal device. + +#### Operational challenges + +- It is not clear how mode IDs will be assigned and who will assign them. +- Clarification of the bookended solution target by the model. + +### New proposal scope and initial assumptions + +Clarify the target of the next extension targets + +1. Bookended solutions, and interoperability between terminal devices of the same system vendor. +2. Interoperability between different system vendors O-OTs through standard modes + +### Solution proposed + +This pull request covers a proposed solution to the issues described in #910. + +The changes to the existing model **are not backward compatible.** + +The summary of the changes proposed is the following: + +**1. Operational-mode list:** + - The list of the exposed operational modes properties by the Terminal Device is augmented with the set of **CHARacteristic properties** of the operational mode. + - The mode-ids are the same used within the operational datastore of the terminal device (exposed by the [openconfig-terminal-device.yang](https://github.com/openconfig/public/blob/master/release/models/optical-transport/openconfig-terminal-device.yang) model) and have network-wide scope assuming they guarantee interoperability in bookended scenarios (two Terminal Devices of the same system vendor supporting the same mode). + - The mode-ids are defined by the system vendor. + +**2. Mode-descriptors list:** + - The **design properties** of the modes, which are dependent on the transceiver component that implements the mode, are exposed as a nested list within the operational mode list. It is assumed that a single operational mode might be implemented by different transceivers which might have associated different design properties exposed by different mode descriptors. + - The **mode-descriptor-id** is a local index that does not have interoperability meaning outside the specific Terminal device which reports it. In other words, the same mode descriptors might be exported by different Terminal Devices with different IDs. + +**3. Interoperable mode list.** + - A given proprietary operational mode might be capable to comply with a certain number of standards or elsewhere publicly defined operational modes defined by other organizations e.g., ITU-T or OpenROADM. + - This compatibility characteristic shall be assured by the system vendor and imply that the design properties of the implementations of that specific operational mode are a superset of all listed supported standard modes. + - This model block will replace the previous "G.698.2" node tree with a more generic definition able to accommodate multiple standards or MSA-defined modes. + +**4. Transceiver-descriptors list.** + - The Terminal Device exposes the list of the transceiver components which are supported by the device. + - Each transceiver exposes the list of compatible modes and their associated mode descriptor. + - This new model block enhances the previous version by allowing to expose explicitly the compatibility matrix between the Terminal Device, the set of transceiver modules supported and the associated modes supported. + +**5. Linecard-descriptors list.** + - The Terminal Device exposes the list of linecard components which are supported by the device. + - Each linecard component exposes the list of transceivers that are supported. + - Each linecard constrains the list of modes that can be supported among the ones supported by the transceiver. + - Each linecard constrains the optical-channel configuration, e.g., target-output-power and frequency range. + - This new model block enhances the previous version by allowing to expose explicitly the compatibility matrix between the Terminal Device, the line cards, the set of transceiver module per line card and the associated modes supported. + +Following the model tree with the 5 blocks described above. In green the new leaves/containers are added in this proposal; in black the non-modified leaves, even if they have been reallocated within the tree under different containers/lists. + +image + +For more clarity on the above please check the following common definitions and assumptions defined during the design process of this proposal within the Telecom Infra Project (TIP) OOPT MUST project. + +#### Common definitions +- System-vendor = the O-OT host platform provider (e.g. muxponder shelf, router, switch) and system integrator including the network operating system of the O-OT +- Manufacturer = Transceiver manufacturer (pluggable) +- Bookended scenario definition. + - The System Vendor is the same in the two O-OTs. + - The O-OTs of the same system vendor might host different Transceiver manufacturers. + - Mode-ids are defined and maintained by the system vendor. + - Interoperability shall be guaranteed by the system vendor if the same mode-id is configured in the line interfaces /optical-channels of the two O-OTs. + +#### Assumptions +- The **openconfig-terminal-device-properties.yang** is a standalone model which represents static properties of a given terminal device, including: + - **Operational-modes’ characteristic properties** on the transceiver configuration which characterize the mode (modulation-format, baud-rate, bit-rate, fec-format, filter…) + - **Mode-descriptors** which describe the transmission design properties (Tx/Rx properties + CHARacteristic properties) of the implementation of the mode conditioned by the HW platform (transceiver + linecard) (Rx/Tx-OSNR, CD/PMD tolerances, penalties…) + - **optical-channel’s configuration constraints** introduced by the HW implementation (min/max-central-frequency, min/max-output-power…) +- The openconfig-terminal-device-properties.yang is a standalone model representing a given mode’s static properties. We shall avoid any reference btw the manifest files and the operational openconfig trees which change dynamically. In other words, the references between mode-descriptors and operational modes, shall be through absolute identifiers. + + diff --git a/regexp-tests/openconfig-network-instance-types-test.yang b/regexp-tests/openconfig-network-instance-types-test.yang index 9a4edf22d..9047cd777 100644 --- a/regexp-tests/openconfig-network-instance-types-test.yang +++ b/regexp-tests/openconfig-network-instance-types-test.yang @@ -13,6 +13,7 @@ module openconfig-network-instance-types-test { pt:pattern-test-pass "99:4294967295"; pt:pattern-test-pass "999:999999999"; pt:pattern-test-pass "9999:99999999"; + pt:pattern-test-fail "09999:99999999"; // regression: not canonical pt:pattern-test-pass "65535:0"; pt:pattern-test-pass "59999:65536"; pt:pattern-test-pass "64999:4294967289"; @@ -24,6 +25,7 @@ module openconfig-network-instance-types-test { pt:pattern-test-pass "65535:4289999999"; pt:pattern-test-pass "65535:4199999999"; pt:pattern-test-pass "65535:3999999999"; + pt:pattern-test-pass "65535:2999999999"; // regression: [1-3][0-9]{9}, not just 3[0-9]{9} pt:pattern-test-fail "0:4294967296"; pt:pattern-test-fail "65536:777777"; pt:pattern-test-fail "65540:777777"; @@ -52,6 +54,7 @@ module openconfig-network-instance-types-test { pt:pattern-test-fail "1.1.1.1:65600"; pt:pattern-test-fail "1.1.1.1:66000"; pt:pattern-test-fail "1.1.1.1:70000"; + pt:pattern-test-fail "1.1.1.1:09999"; // regression pt:pattern-test-fail "256.255.255.255:99"; pt:pattern-test-fail "1.1.1.256:99"; pt:pattern-test-fail "256.1.1.1%eth0:99"; @@ -71,7 +74,9 @@ module openconfig-network-instance-types-test { pt:pattern-test-pass "4293999999:65535"; pt:pattern-test-pass "4289999999:65535"; pt:pattern-test-pass "4199999999:65535"; + pt:pattern-test-pass "1999999999:65535"; // regression pt:pattern-test-pass "3999999999:65535"; + pt:pattern-test-fail "3999999999:05535"; // regression pt:pattern-test-fail "4294967296:0"; pt:pattern-test-fail "777777:65536"; pt:pattern-test-fail "777777:65540"; diff --git a/regexp-tests/openconfig-yang-types-test.yang b/regexp-tests/openconfig-yang-types-test.yang index 2f6ca1ba6..6539ba6b7 100644 --- a/regexp-tests/openconfig-yang-types-test.yang +++ b/regexp-tests/openconfig-yang-types-test.yang @@ -5,6 +5,19 @@ module openconfig-yang-types-test { import pattern-test { prefix "pt"; } import openconfig-yang-types { prefix "oc-yang"; } + leaf hex-string-prefixed { + type oc-yang:hex-string-prefixed; + pt:pattern-test-pass "0x0000"; + pt:pattern-test-pass "0xffff"; + pt:pattern-test-pass "0xFFFF"; + pt:pattern-test-pass "0x0123456789abcdefABCDEF"; + pt:pattern-test-pass "0xFEDCBAfedcba9876543210"; + pt:pattern-test-fail "0xg"; + pt:pattern-test-fail "0xG"; + pt:pattern-test-fail "0x0123456789abcdefABCDEFG"; + pt:pattern-test-fail "0xFED0xba9876543210"; + } + leaf hex-string { type oc-yang:hex-string; pt:pattern-test-pass "00000"; diff --git a/release/models/aft/.spec.yml b/release/models/aft/.spec.yml index 6320b2469..fd1079c0b 100644 --- a/release/models/aft/.spec.yml +++ b/release/models/aft/.spec.yml @@ -2,7 +2,9 @@ docs: - yang/aft/openconfig-aft.yang - yang/aft/openconfig-aft-types.yang + - yang/aft/openconfig-aft-summary.yang build: - yang/network-instance/openconfig-network-instance.yang - yang/aft/openconfig-aft-network-instance.yang + - yang/aft/openconfig-aft-summary.yang run-ci: true diff --git a/release/models/aft/openconfig-aft-common.yang b/release/models/aft/openconfig-aft-common.yang index b2c44dad6..50eac8d8f 100644 --- a/release/models/aft/openconfig-aft-common.yang +++ b/release/models/aft/openconfig-aft-common.yang @@ -23,7 +23,34 @@ 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.3.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 + "Add backup-active to AFT NHG state."; + reference "2.6.0"; + } + + revision "2024-01-26" { + description + "Add gre container under next-hops aft entry state. + Add src-ip, dst-ip and ttl under gre aft entry state + for telemetry. Updated description for + tunnel-src-ip-address properties under next-hops."; + reference "2.5.0"; + } + + revision "2023-09-26" { + description + "Add next-hop-group-name in NHG AFT entry state."; + reference "2.4.0"; + } revision "2023-04-19" { description @@ -196,14 +223,186 @@ 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 + it before forwarding to the specified next-hop. + encapsulate-header leaf should be set to GRE for this + 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; + } + } + } } @@ -212,6 +411,24 @@ submodule openconfig-aft-common { } } + 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"; @@ -257,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 tunnel source ip address. - For VXLAN this represents the source VTEP ip address"; + "Where applicable this represents the vxlan tunnel source 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."; } } @@ -311,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."; @@ -335,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 { @@ -344,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 { @@ -362,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; @@ -379,6 +615,143 @@ submodule openconfig-aft-common { } } + grouping aft-common-entry-nexthop-gre-state { + description + "GRE encapsulation applied on a IPv4 and IPv6 next-hop."; + + leaf src-ip { + type oc-inet:ip-address; + description + "The source IP address for the GRE encapsulation may be expressed + using this leaf (src-ip) or if may be derived from + '../../interface-ref/state/subinterface'"; + } + + leaf dst-ip { + type oc-inet:ip-address; + description + "Destination IP address to use for the encapsulated packet."; + } + + leaf ttl { + type uint8; + description + "This leaf reflects the configured/default 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 + TTL value during encapsulation."; + } + } + + 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 @@ -579,6 +952,14 @@ submodule openconfig-aft-common { also be updated."; } + leaf next-hop-group-name { + type string; + description + "Where applicable, this leaf is a unique identifier string for the + next-hop-group. It is an arbitrary name for the group, that is + supported by vendors and is exposed for telemetry."; + } + leaf programmed-id { type uint64; description @@ -626,6 +1007,20 @@ submodule openconfig-aft-common { entries within the next-hop group become unusable, the backup next-hop group is used if specified."; } + + leaf backup-active { + type boolean; + default false; + description + "Set to true if and only if the device no longer forwards traffic + using the primary NextHops of this NextHopGroup and instead uses + the specified backup-next-hop-group. This leaf should be set to + false if the backup-next-hop-group is either unspecified or unused + by the device."; + } + + + } grouping aft-nhg-nh-state { diff --git a/release/models/aft/openconfig-aft-ethernet.yang b/release/models/aft/openconfig-aft-ethernet.yang index d0b85dfc7..3fbe6edab 100644 --- a/release/models/aft/openconfig-aft-ethernet.yang +++ b/release/models/aft/openconfig-aft-ethernet.yang @@ -20,7 +20,33 @@ submodule openconfig-aft-ethernet { "Submodule containing definitions of groupings for the abstract forwarding tables for Ethernet."; - oc-ext:openconfig-version "2.3.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 + "Add backup-active to AFT NHG state."; + reference "2.6.0"; + } + + revision "2024-01-26" { + description + "Add gre container under next-hops aft entry state. + Add src-ip, dst-ip and ttl under gre aft entry state + for telemetry."; + reference "2.5.0"; + } + + revision "2023-09-26" { + description + "Add next-hop-group-name in NHG AFT entry state."; + reference "2.4.0"; + } revision "2023-04-19" { description diff --git a/release/models/aft/openconfig-aft-ipv4.yang b/release/models/aft/openconfig-aft-ipv4.yang index 04d4054c2..87fb7e6fa 100644 --- a/release/models/aft/openconfig-aft-ipv4.yang +++ b/release/models/aft/openconfig-aft-ipv4.yang @@ -20,7 +20,33 @@ submodule openconfig-aft-ipv4 { "Submodule containing definitions of groupings for the abstract forwarding tables for IPv4."; - oc-ext:openconfig-version "2.3.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 + "Add backup-active to AFT NHG state."; + reference "2.6.0"; + } + + revision "2024-01-26" { + description + "Add gre container under next-hops aft entry state. + Add src-ip, dst-ip and ttl under gre aft entry state + for telemetry."; + reference "2.5.0"; + } + + revision "2023-09-26" { + description + "Add next-hop-group-name in NHG AFT entry state."; + reference "2.4.0"; + } revision "2023-04-19" { description diff --git a/release/models/aft/openconfig-aft-ipv6.yang b/release/models/aft/openconfig-aft-ipv6.yang index 6b6cd1937..765830cd5 100644 --- a/release/models/aft/openconfig-aft-ipv6.yang +++ b/release/models/aft/openconfig-aft-ipv6.yang @@ -20,7 +20,33 @@ submodule openconfig-aft-ipv6 { "Submodule containing definitions of groupings for the abstract forwarding tables for IPv6."; - oc-ext:openconfig-version "2.3.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 + "Add backup-active to AFT NHG state."; + reference "2.6.0"; + } + + revision "2024-01-26" { + description + "Add gre container under next-hops aft entry state. + Add src-ip, dst-ip and ttl under gre aft entry state + for telemetry."; + reference "2.5.0"; + } + + revision "2023-09-26" { + description + "Add next-hop-group-name in NHG AFT entry state."; + reference "2.4.0"; + } revision "2023-04-19" { description diff --git a/release/models/aft/openconfig-aft-mpls.yang b/release/models/aft/openconfig-aft-mpls.yang index 4b4fd828c..c99e1c58f 100644 --- a/release/models/aft/openconfig-aft-mpls.yang +++ b/release/models/aft/openconfig-aft-mpls.yang @@ -21,7 +21,25 @@ submodule openconfig-aft-mpls { "Submodule containing definitions of groupings for the abstract forwarding table for MPLS label forwarding."; - oc-ext:openconfig-version "2.3.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 + "Add backup-active to AFT NHG state."; + reference "2.6.0"; + } + + revision "2024-04-25" { + description + "Add backup-active to AFT NHG state."; + reference "2.5.0"; + } revision "2023-04-19" { description diff --git a/release/models/aft/openconfig-aft-pf.yang b/release/models/aft/openconfig-aft-pf.yang index 85ee9d78f..9980ad5f0 100644 --- a/release/models/aft/openconfig-aft-pf.yang +++ b/release/models/aft/openconfig-aft-pf.yang @@ -28,7 +28,33 @@ submodule openconfig-aft-pf { fields other than the destination address that is used in other forwarding tables."; - oc-ext:openconfig-version "2.3.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 + "Add backup-active to AFT NHG state."; + reference "2.6.0"; + } + + revision "2024-01-26" { + description + "Add gre container under next-hops aft entry state. + Add src-ip, dst-ip and ttl under gre aft entry state + for telemetry."; + reference "2.5.0"; + } + + revision "2023-09-26" { + description + "Add next-hop-group-name in NHG AFT entry state."; + reference "2.4.0"; + } revision "2023-04-19" { description diff --git a/release/models/aft/openconfig-aft-state-synced.yang b/release/models/aft/openconfig-aft-state-synced.yang index a20dd9257..fbe6eb5ca 100644 --- a/release/models/aft/openconfig-aft-state-synced.yang +++ b/release/models/aft/openconfig-aft-state-synced.yang @@ -16,7 +16,33 @@ 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.3.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 + "Add backup-active to AFT NHG state."; + reference "2.6.0"; + } + + revision "2024-01-26" { + description + "Add gre container under next-hops aft entry state. + Add src-ip, dst-ip and ttl under gre aft entry state + for telemetry."; + reference "2.5.0"; + } + + revision "2023-09-26" { + description + "Add next-hop-group-name in NHG AFT entry state."; + reference "2.4.0"; + } revision "2023-04-19" { description diff --git a/release/models/aft/openconfig-aft-summary.yang b/release/models/aft/openconfig-aft-summary.yang new file mode 100644 index 000000000..8a4cc1730 --- /dev/null +++ b/release/models/aft/openconfig-aft-summary.yang @@ -0,0 +1,125 @@ +module openconfig-aft-summary { + yang-version "1"; + + namespace "http://openconfig.net/yang/aft-summary"; + + prefix "oc-aftsummary"; + + import openconfig-extensions { prefix "oc-ext"; } + import openconfig-policy-types { prefix "oc-pol-types"; } + import openconfig-network-instance { prefix "oc-ni"; } + + organization + "OpenConfig working group"; + + contact + "OpenConfig working group + www.openconfig.net"; + + description + "This module provides summary of aft entry counts per protocol type for each network + instance."; + + oc-ext:openconfig-version "0.2.0"; + + revision "2024-01-12" { + description + "Change count of entries from counter64 to uint64."; + reference "0.2.0"; + } + + revision "2023-11-09" { + description + "Initial version."; + reference "0.1.0"; + } + + grouping protocols-state { + description + "Grouping for protocol type state."; + + leaf origin-protocol { + description + "Protocol type that keys the protocol list."; + + type identityref { + base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; + } + } + + container counters { + description + "Enclosing container for aft entry counters"; + + leaf aft-entries { + description + "Total number of entries in the aft."; + type uint64; + } + } + } + + grouping aft-summary { + description + "A summary of aft entries by protocol type."; + + container protocols { + description + "Enclosing container for a list of protocols"; + list protocol { + key "origin-protocol"; + + description + "Protocol type that keys the aft entry count list."; + + leaf origin-protocol { + type leafref { + path "../state/origin-protocol"; + } + description + "Reference to the protocol type which added the aft entry."; + } + + container state { + description + "State parameters for the aft entry list."; + uses protocols-state; + } + } + } + } + + grouping aft-summary-ipv4 { + description + "Grouping of all aft summaries for ipv4."; + container ipv4-unicast { + description + "Container for ipv4 unicast aft summary by protocol type."; + uses aft-summary; + } + } + + grouping aft-summary-ipv6 { + description + "Grouping of all aft summaries for ipv6."; + container ipv6-unicast { + description + "Container for ipv6 aft counts by protocol type."; + uses aft-summary; + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:afts" { + description + "Augment the afts model with the aft summary container."; + + container aft-summaries { + uses aft-summary-ipv4; + uses aft-summary-ipv6; + + description + "Aft summary for the network instance."; + } + } + +} 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 c204271de..de3ce202e 100644 --- a/release/models/aft/openconfig-aft.yang +++ b/release/models/aft/openconfig-aft.yang @@ -42,7 +42,33 @@ module openconfig-aft { is referred to as an Abstract Forwarding Table (AFT), rather than the FIB."; - oc-ext:openconfig-version "2.3.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 + "Add backup-active to AFT NHG state."; + reference "2.6.0"; + } + + revision "2024-01-26" { + description + "Add gre container under next-hops aft entry state. + Add src-ip, dst-ip and ttl under gre aft entry state + for telemetry."; + reference "2.5.0"; + } + + revision "2023-09-26" { + description + "Add next-hop-group-name in NHG AFT entry state."; + reference "2.4.0"; + } revision "2023-04-19" { description diff --git a/release/models/bfd/openconfig-bfd.yang b/release/models/bfd/openconfig-bfd.yang index 400d7ab00..8f5041b79 100644 --- a/release/models/bfd/openconfig-bfd.yang +++ b/release/models/bfd/openconfig-bfd.yang @@ -26,7 +26,20 @@ module openconfig-bfd { "An OpenConfig model of Bi-Directional Forwarding Detection (BFD) configuration and operational state."; - oc-ext:openconfig-version "0.2.5"; + oc-ext:openconfig-version "0.3.0"; + + revision "2024-03-05" { + description + "Add configuration of min interval, multiplier when + BFD is enabled at protocol level"; + reference "0.3.0"; + } + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "0.2.6"; + } revision "2023-02-06" { description @@ -194,7 +207,7 @@ module openconfig-bfd { "Top-level per-interface configuration parameters for BFD."; leaf id { - type string; + type oc-if:interface-id; description "A unique identifier for the interface."; } @@ -214,43 +227,7 @@ module openconfig-bfd { interface."; } - leaf desired-minimum-tx-interval { - type uint32; - units microseconds; - description - "The minimum interval between transmission of BFD control - packets that the operator desires. This value is advertised to - the peer, however the actual interval used is specified by - taking the maximum of desired-minimum-tx-interval and the - value of the remote required-minimum-receive interval value. - - This value is specified as an integer number of microseconds."; - } - - leaf required-minimum-receive { - type uint32; - units microseconds; - description - "The minimum interval between received BFD control packets that - this system should support. This value is advertised to the - remote peer to indicate the maximum frequency (i.e., minimum - inter-packet interval) between BFD control packets that is - acceptable to the local system."; - } - - // rjs: Could have required-minimum-echo-receive here, but this is - // generally not configurable. - - leaf detection-multiplier { - type uint8 { - range "1..max"; - } - description - "The number of packets that must be missed to declare this - session as down. The detection interval for the BFD session - is calculated by multiplying the value of the negotiated - transmission interval by this value."; - } + uses bfd-configuration; leaf enable-per-member-link { type boolean; @@ -692,6 +669,49 @@ module openconfig-bfd { } } + grouping bfd-configuration { + description + "Configuration parameters of BFD when it is enabled in protocols."; + leaf desired-minimum-tx-interval { + type uint32; + units microseconds; + description + "The minimum interval between transmission of BFD control + packets that the operator desires. This value is advertised to + the peer, however the actual interval used is specified by + taking the maximum of desired-minimum-tx-interval and the + value of the remote required-minimum-receive interval value. + This value is specified as an integer number of microseconds. + The value 0 is reserved and cannot be used."; + reference "section 4.1 of RFC 5880"; + } + + leaf required-minimum-receive { + type uint32; + units microseconds; + description + "The minimum interval between received BFD control packets that + this system should support. This value is advertised to the + remote peer to indicate the maximum frequency (i.e., minimum + inter-packet interval) between BFD control packets that is + acceptable to the local system."; + reference "section 4.1 of RFC 5880"; + } + + leaf detection-multiplier { + type uint8 { + range "1..max"; + } + description + "The number of packets that must be missed to declare this + session as down. The detection interval for the BFD session + is calculated by multiplying the value of the negotiated + transmission interval by this value."; + reference "section 4.1 of RFC 5880"; + } + + } + grouping enable-bfd-state { description "Operational state parameters relating to enabling BFD."; @@ -735,6 +755,8 @@ module openconfig-bfd { "Configuration parameters relating to enabling BFD."; uses enable-bfd-config; + uses bfd-configuration; + } container state { @@ -743,6 +765,7 @@ module openconfig-bfd { "Operational state parameters relating to enabing BFD."; uses enable-bfd-config; + uses bfd-configuration; //uses enable-bfd-state; } } diff --git a/release/models/bgp/openconfig-bgp-common-multiprotocol.yang b/release/models/bgp/openconfig-bgp-common-multiprotocol.yang index 60f4d67d6..884bbe8be 100644 --- a/release/models/bgp/openconfig-bgp-common-multiprotocol.yang +++ b/release/models/bgp/openconfig-bgp-common-multiprotocol.yang @@ -24,7 +24,40 @@ submodule openconfig-bgp-common-multiprotocol { for multiple protocols in BGP. The groupings are common across multiple contexts."; - oc-ext:openconfig-version "9.4.1"; + oc-ext:openconfig-version "9.8.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "9.8.0"; + } + + revision "2023-12-28" { + description + "Clarification to last-prefix-limit-exceeded in description"; + reference "9.7.1"; + } + + revision "2023-12-28" { + description + "Add support for controling use of link-bandwidth extended + community for BGP multipath."; + reference "9.7.0"; + } + revision "2023-11-02" { + description + "Fix revision '2023-03-31': send-community-type was added to the + wrong grouping. + Allow configuring send-community per AFI-SAFI at + neighbor/peer-group."; + reference "9.6.0"; + } + + revision "2023-11-01" { + description + "Add default apply policy to global and per afi-safi config."; + reference "9.5.0"; + } revision "2023-06-27" { description @@ -248,6 +281,15 @@ submodule openconfig-bgp-common-multiprotocol { "This leaf indicates whether the AFI-SAFI is enabled for the neighbor or group"; } + + leaf-list send-community-type { + type oc-bgp-types:community-type; + description + "Specify which types of community should be sent to the + neighbor or group. The default is to not send the + community attribute. This takes precedence over the neighbor + or group configuration"; + } } grouping bgp-common-mp-all-afi-safi-list-contents { diff --git a/release/models/bgp/openconfig-bgp-common-structure.yang b/release/models/bgp/openconfig-bgp-common-structure.yang index a73bc9d46..8aee8797b 100644 --- a/release/models/bgp/openconfig-bgp-common-structure.yang +++ b/release/models/bgp/openconfig-bgp-common-structure.yang @@ -21,7 +21,41 @@ submodule openconfig-bgp-common-structure { "This sub-module contains groupings that are common across multiple BGP contexts and provide structure around other primitive groupings."; - oc-ext:openconfig-version "9.4.1"; + oc-ext:openconfig-version "9.8.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "9.8.0"; + } + + revision "2023-12-28" { + description + "Clarification to last-prefix-limit-exceeded in description"; + reference "9.7.1"; + } + + revision "2023-12-28" { + description + "Add support for controling use of link-bandwidth extended + community for BGP multipath."; + reference "9.7.0"; + } + + revision "2023-11-02" { + description + "Fix revision '2023-03-31': send-community-type was added to the + wrong grouping. + Allow configuring send-community per AFI-SAFI at + neighbor/peer-group."; + reference "9.6.0"; + } + + revision "2023-11-01" { + description + "Add default apply policy to global and per afi-safi config."; + reference "9.5.0"; + } revision "2023-06-27" { description diff --git a/release/models/bgp/openconfig-bgp-common.yang b/release/models/bgp/openconfig-bgp-common.yang index 7cad2ac6f..ac1a3983f 100644 --- a/release/models/bgp/openconfig-bgp-common.yang +++ b/release/models/bgp/openconfig-bgp-common.yang @@ -24,7 +24,41 @@ submodule openconfig-bgp-common { may be application to a subset of global, peer-group or neighbor contexts."; - oc-ext:openconfig-version "9.4.1"; + oc-ext:openconfig-version "9.8.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "9.8.0"; + } + + revision "2023-12-28" { + description + "Clarification to last-prefix-limit-exceeded in description"; + reference "9.7.1"; + } + + revision "2023-12-28" { + description + "Add support for controling use of link-bandwidth extended + community for BGP multipath."; + reference "9.7.0"; + } + + revision "2023-11-02" { + description + "Fix revision '2023-03-31': send-community-type was added to the + wrong grouping. + Allow configuring send-community per AFI-SAFI at + neighbor/peer-group."; + reference "9.6.0"; + } + + revision "2023-11-01" { + description + "Add default apply policy to global and per afi-safi config."; + reference "9.5.0"; + } revision "2023-06-27" { description @@ -298,9 +332,10 @@ submodule openconfig-bgp-common { leaf-list send-community-type { type oc-bgp-types:community-type; description - "Specify which types of community should be sent to the - neighbor or group. The default is to not send the - community attribute"; + "Specify which types of community should be sent to the neighbor or + group. The default is to not send the community attribute. Note, if + the NONE community-type is specified, no other types must be + specified."; } leaf description { @@ -605,6 +640,21 @@ submodule openconfig-bgp-common { container ebgp { description "Multipath parameters for eBGP"; + container link-bandwidth-ext-community { + description + "Usage of DMZ Link-Bandwidth extended community"; + container config { + description + "Configuration parameters relating to usage of link-bandwidth"; + uses bgp-common-use-multiple-paths-link-bandwidth-config; + } + container state { + config false; + description + "State information relating to usage of link-bandwidth"; + uses bgp-common-use-multiple-paths-link-bandwidth-config; + } + } container config { description "Configuration parameters relating to eBGP multipath"; @@ -621,6 +671,21 @@ submodule openconfig-bgp-common { container ibgp { description "Multipath parameters for iBGP"; + container link-bandwidth-ext-community { + description + "Usage of DMZ Link-Bandwidth extended community"; + container config { + description + "Configuration parameters relating to usage of link-bandwidth"; + uses bgp-common-use-multiple-paths-link-bandwidth-config; + } + container state { + config false; + description + "State information relating to usage of link-bandwidth"; + uses bgp-common-use-multiple-paths-link-bandwidth-config; + } + } container config { description "Configuration parameters relating to iBGP multipath"; @@ -636,6 +701,23 @@ submodule openconfig-bgp-common { } } + grouping bgp-common-use-multiple-paths-link-bandwidth-config { + description + "Parameters controlling usage of of DMZ Link-Bandwidth + extended community in pultipath RIB/FIB formation"; + leaf enabled { + type boolean; + description + "When set to TRUE, BGP multiplepath shall distributed traffic + load among contributing routes proportionally to value of + Local Administrator subfield of link-bandwidth extended + community [draft-ietf-idr-link-bandwidth-07]. + This leaf has no effect if BGP multi-path is disabled or + if maximum-path attribute of BGP multi-path value is set + to 1"; + } + } + grouping bgp-common-use-multiple-paths-ebgp-config { description "Configuration parameters relating to multipath for eBGP"; diff --git a/release/models/bgp/openconfig-bgp-errors.yang b/release/models/bgp/openconfig-bgp-errors.yang index d76233820..53372afc7 100644 --- a/release/models/bgp/openconfig-bgp-errors.yang +++ b/release/models/bgp/openconfig-bgp-errors.yang @@ -18,7 +18,32 @@ submodule openconfig-bgp-errors { "This module defines BGP NOTIFICATION message error codes and subcodes"; - oc-ext:openconfig-version "5.4.0"; + oc-ext:openconfig-version "6.1.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "6.1.0"; + } + + revision "2024-01-31" { + description + "Update community-sets/members/member union type by replacing + the bgp-regex type with posix-eregexp."; + reference "6.0.0"; + } + + revision "2023-12-26" { + description + "Add regex for bgp link bandwidth"; + reference "5.6.0"; + } + + revision "2023-09-06" { + description + "Add GRACEFUL_SHUTDOWN as a BGP_WELL_KNOWN_STD_COMMUNITY"; + reference "5.5.0"; + } revision "2023-03-31" { description diff --git a/release/models/bgp/openconfig-bgp-global.yang b/release/models/bgp/openconfig-bgp-global.yang index f3ceff357..9a1480182 100644 --- a/release/models/bgp/openconfig-bgp-global.yang +++ b/release/models/bgp/openconfig-bgp-global.yang @@ -7,6 +7,7 @@ submodule openconfig-bgp-global { import openconfig-extensions { prefix oc-ext; } import openconfig-yang-types { prefix oc-yang; } import openconfig-inet-types { prefix oc-inet; } + import openconfig-routing-policy { prefix oc-rpol; } // Include common submodules include openconfig-bgp-common; @@ -26,7 +27,41 @@ submodule openconfig-bgp-global { "This sub-module contains groupings that are specific to the global context of the OpenConfig BGP module"; - oc-ext:openconfig-version "9.4.1"; + oc-ext:openconfig-version "9.8.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "9.8.0"; + } + + revision "2023-12-28" { + description + "Clarification to last-prefix-limit-exceeded in description"; + reference "9.7.1"; + } + + revision "2023-12-28" { + description + "Add support for controling use of link-bandwidth extended + community for BGP multipath."; + reference "9.7.0"; + } + + revision "2023-11-02" { + description + "Fix revision '2023-03-31': send-community-type was added to the + wrong grouping. + Allow configuring send-community per AFI-SAFI at + neighbor/peer-group."; + reference "9.6.0"; + } + + revision "2023-11-01" { + description + "Add default apply policy to global and per afi-safi config."; + reference "9.5.0"; + } revision "2023-06-27" { description @@ -397,6 +432,7 @@ submodule openconfig-bgp-global { uses bgp-common-global-group-use-multiple-paths; uses bgp-common-structure-neighbor-group-add-paths; uses bgp-global-mp-all-afi-safi-list-contents; + uses oc-rpol:default-policy-group; } } @@ -482,6 +518,7 @@ submodule openconfig-bgp-global { } uses bgp-global-dynamic-neighbors; + uses oc-rpol:default-policy-group; } } diff --git a/release/models/bgp/openconfig-bgp-neighbor.yang b/release/models/bgp/openconfig-bgp-neighbor.yang index 1b76c81a6..ddcef2e8b 100644 --- a/release/models/bgp/openconfig-bgp-neighbor.yang +++ b/release/models/bgp/openconfig-bgp-neighbor.yang @@ -30,7 +30,41 @@ submodule openconfig-bgp-neighbor { "This sub-module contains groupings that are specific to the neighbor context of the OpenConfig BGP module."; - oc-ext:openconfig-version "9.4.1"; + oc-ext:openconfig-version "9.8.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "9.8.0"; + } + + revision "2023-12-28" { + description + "Clarification to last-prefix-limit-exceeded in description"; + reference "9.7.1"; + } + + revision "2023-12-28" { + description + "Add support for controling use of link-bandwidth extended + community for BGP multipath."; + reference "9.7.0"; + } + + revision "2023-11-02" { + description + "Fix revision '2023-03-31': send-community-type was added to the + wrong grouping. + Allow configuring send-community per AFI-SAFI at + neighbor/peer-group."; + reference "9.6.0"; + } + + revision "2023-11-01" { + description + "Add default apply policy to global and per afi-safi config."; + reference "9.5.0"; + } revision "2023-06-27" { description @@ -373,7 +407,8 @@ submodule openconfig-bgp-neighbor { type oc-types:timeticks64; description "This timestamp indicates the time that the BGP session last - violated a configured max prefix-limit for any AFI/SAFI combination + violated a configured recived (pre-policy) or accepted (post-policy) + max prefix-limit for any AFI/SAFI combination on the session. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC). diff --git a/release/models/bgp/openconfig-bgp-peer-group.yang b/release/models/bgp/openconfig-bgp-peer-group.yang index 438ee5005..aba5163ac 100644 --- a/release/models/bgp/openconfig-bgp-peer-group.yang +++ b/release/models/bgp/openconfig-bgp-peer-group.yang @@ -25,7 +25,41 @@ submodule openconfig-bgp-peer-group { "This sub-module contains groupings that are specific to the peer-group context of the OpenConfig BGP module."; - oc-ext:openconfig-version "9.4.1"; + oc-ext:openconfig-version "9.8.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "9.8.0"; + } + + revision "2023-12-28" { + description + "Clarification to last-prefix-limit-exceeded in description"; + reference "9.7.1"; + } + + revision "2023-12-28" { + description + "Add support for controling use of link-bandwidth extended + community for BGP multipath."; + reference "9.7.0"; + } + + revision "2023-11-02" { + description + "Fix revision '2023-03-31': send-community-type was added to the + wrong grouping. + Allow configuring send-community per AFI-SAFI at + neighbor/peer-group."; + reference "9.6.0"; + } + + revision "2023-11-01" { + description + "Add default apply policy to global and per afi-safi config."; + reference "9.5.0"; + } revision "2023-06-27" { description diff --git a/release/models/bgp/openconfig-bgp-policy.yang b/release/models/bgp/openconfig-bgp-policy.yang index 05ae1bacb..f4c0c18c4 100644 --- a/release/models/bgp/openconfig-bgp-policy.yang +++ b/release/models/bgp/openconfig-bgp-policy.yang @@ -13,7 +13,7 @@ module openconfig-bgp-policy { import openconfig-policy-types { prefix oc-pol-types; } import openconfig-bgp-types { prefix oc-bgp-types; } import openconfig-extensions { prefix oc-ext; } - + import openconfig-types { prefix oc-types; } // meta organization @@ -28,7 +28,48 @@ module openconfig-bgp-policy { It augments the base routing-policy module with BGP-specific options for conditions and actions."; - oc-ext:openconfig-version "6.1.1"; + oc-ext:openconfig-version "7.1.0"; + + revision "2024-07-02" { + description + "Add ext-community-count container, which also clarifies that + community-count does not include other types of communities (e.g. + extended)."; + reference "7.1.0"; + } + + revision "2024-01-31" { + description + "Update community-sets/members/member union type by replacing + the bgp-regex type with posix-eregexp."; + reference "7.0.0"; + } + + revision "2023-12-19" { + description + "Add PEER_ADDRESS to bgp-next-hop-type."; + reference "6.4.0"; + } + + revision "2023-10-23" { + description + "Revert revision 2019-02-01. + Move match-set-options of BGP community and BGP extended community from + defined-sets/bgp-defined-sets/community-set and + defined-sets/bgp-defined-sets/ext-community-set back to + policy-definitions/statements/.../bgp-conditions + for consistency across sets."; + reference "6.3.0"; + } + + revision "2023-10-03" { + description + "Deprecate community-set-ref and ext-community-set-ref, + add the following leaf-list nodes: + * community-set-refs + * ext-community-set-refs"; + reference "6.2.0"; + } revision "2023-03-27" { description @@ -155,6 +196,11 @@ module openconfig-bgp-policy { description "special designation for local router's own address, i.e., next-hop-self"; } + enum PEER_ADDRESS { + description "The ip address of the peer should be used. + This enum is efficient to use when setting the next hop + in a policy applied to a peer group."; + } } } description @@ -235,38 +281,139 @@ module openconfig-bgp-policy { } } + grouping match-community-config { + description + "Configuration data for match conditions on community set"; + + leaf community-set { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:community-sets/" + + "oc-bgp-pol:community-set/oc-bgp-pol:community-set-name"; + } + description "References a defined community set"; + } + uses oc-rpol:match-set-options-group; + } + + grouping match-community-state { + description + "Operational state data for match conditions on community set"; + } + + grouping match-community-top { + description + "Top-level grouping for match conditions on community set"; + + container match-community-set { + description + "Match a referenced community set according to the logic + defined in the match-set-options leaf"; + + container config { + description + "Configuration data for match conditions on community set"; + + uses match-community-config; + } + + container state { + + config false; + + description + "Operational state data for match conditions on community set"; + + uses match-community-config; + uses match-community-state; + } + } + } + + grouping match-ext-community-config { + description + "Configuration data for match conditions on extended community set"; + + leaf ext-community-set { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:ext-community-sets/" + + "oc-bgp-pol:ext-community-set/oc-bgp-pol:ext-community-set-name"; + } + description "References a defined extended community set"; + } + uses oc-rpol:match-set-options-group; + } + + grouping match-ext-community-state { + description + "Operational state data for match conditions on extended community set"; + } + + grouping match-ext-community-top { + description + "Top-level grouping for match conditions on extended community set"; + + container match-ext-community-set { + description + "Match a referenced extended community set according to the logic + defined in the match-set-options leaf"; + + container config { + description + "Configuration data for match conditions on extended community set"; + + uses match-ext-community-config; + } + + container state { + + config false; + + description + "Operational state data for match conditions on extended + community set"; + + uses match-ext-community-config; + uses match-ext-community-state; + } + } + } + grouping bgp-match-set-conditions { description "Condition statement definitions for checking membership in a defined set"; uses match-as-path-top; + uses match-community-top; + uses match-ext-community-top; } grouping community-count-config { description - "Configuration data for community count condition"; + "Configuration data for different community count conditions"; uses oc-pol-types:attribute-compare-operators; } grouping community-count-state { description - "Operational state data for community count condition"; + "Operational state data for different community count conditions"; } grouping community-count-top { description - "Top-level grouping for community count condition"; + "Top-level grouping for different community count conditions"; container community-count { description "Value and comparison operations for conditions based on the - number of communities in the route update"; + number of regular communities in the route update."; container config { description - "Configuration data for community count condition"; + "Configuration data for regular community count condition"; uses community-count-config; } @@ -276,7 +423,31 @@ module openconfig-bgp-policy { config false; description - "Operational state data for community count condition"; + "Operational state data for regular community count condition"; + + uses community-count-config; + uses community-count-state; + } + } + + container ext-community-count { + description + "Value and comparison operations for conditions based on the + number of extended communities in the route update."; + + container config { + description + "Configuration data for extended community count condition"; + + uses community-count-config; + } + + container state { + + config false; + + description + "Operational state data for extended community count condition"; uses community-count-config; uses community-count-state; @@ -382,6 +553,7 @@ module openconfig-bgp-policy { } leaf community-set { + status deprecated; type leafref { path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + "oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:community-sets/" + @@ -392,6 +564,7 @@ module openconfig-bgp-policy { } leaf ext-community-set { + status deprecated; type leafref { path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + "oc-bgp-pol:bgp-defined-sets/oc-bgp-pol:ext-community-sets/" + @@ -459,16 +632,29 @@ module openconfig-bgp-policy { type oc-bgp-types:bgp-well-known-community-type; } description - "members of the community set. - For an ADD operation these are the communities that will be added; - the regexp type is not valid in this operation. + "Members of the community set. + For an ADD operation these are the communities that will be + added. The regexp type is not valid in this operation. + For REMOVE or REPLACE operations then matching communities will be removed unless match-set-options is INVERT which will reverse this to mean that anything that does not match will be - removed."; + removed. + + For MATCH operations the posix-eregexp type should be evaluated + against each community associated with a prefix one community + at a time. Communities must be represented as strings in formats + conforming to oc-bgp-types:bgp-std-community-type. For example: + `1000:1000` for a standard community"; } - uses oc-rpol:match-set-options-group; + leaf match-set-options { + status deprecated; + type oc-pol-types:match-set-options-type; + description + "Optional parameter that governs the behaviour of the + match operation"; + } } grouping community-set-state { @@ -532,19 +718,33 @@ module openconfig-bgp-policy { leaf-list ext-community-member { type union { type oc-bgp-types:bgp-ext-community-type; - type oc-bgp-types:bgp-community-regexp-type; + type oc-types:posix-eregexp; } description - "members of the extended community set + "Members of the extended community set. For an ADD operation these are the communities that will be added; the regexp type is not valid in this operation. + For REMOVE or REPLACE operations then matching communities will be removed unless match-set-options is INVERT which will reverse this to mean that anything that does not match will be - removed."; + removed. + + For MATCH operations the posix-eregexp type should be evaluated + against each community associated with a prefix one community + at a time. Communities must be represented as strings in formats + conforming to oc-bgp-types:bgp-ext-community-type. For example: + `route-origin:1000:1000` for the origin type extended community, + and so on."; } - uses oc-rpol:match-set-options-group; + leaf match-set-options { + status deprecated; + type oc-pol-types:match-set-options-type; + description + "Optional parameter that governs the behaviour of the + match operation"; + } } grouping ext-community-set-state { @@ -831,7 +1031,19 @@ module openconfig-bgp-policy { "Configuration data for referening a community-set in the set-community action"; + leaf-list community-set-refs { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/" + + "oc-bgp-pol:community-sets/oc-bgp-pol:community-set/" + + "oc-bgp-pol:community-set-name"; + } + description + "References a list of defined community sets by name"; + } + leaf community-set-ref { + status deprecated; type leafref { path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + "oc-bgp-pol:bgp-defined-sets/" + @@ -994,7 +1206,21 @@ module openconfig-bgp-policy { "Configuration data for referening a extended community-set in the set-ext-community action"; + leaf-list ext-community-set-refs { + type leafref { + path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + + "oc-bgp-pol:bgp-defined-sets/" + + "oc-bgp-pol:ext-community-sets/" + + "oc-bgp-pol:ext-community-set/" + + "oc-bgp-pol:ext-community-set-name"; + } + description + "References a list of defined extended community sets by + name"; + } + leaf ext-community-set-ref { + status deprecated; type leafref { path "/oc-rpol:routing-policy/oc-rpol:defined-sets/" + "oc-bgp-pol:bgp-defined-sets/" + diff --git a/release/models/bgp/openconfig-bgp-types.yang b/release/models/bgp/openconfig-bgp-types.yang index c9a7d01ad..57b8e9b65 100644 --- a/release/models/bgp/openconfig-bgp-types.yang +++ b/release/models/bgp/openconfig-bgp-types.yang @@ -4,7 +4,6 @@ module openconfig-bgp-types { namespace "http://openconfig.net/yang/bgp-types"; prefix "oc-bgp-types"; - import openconfig-types { prefix "oc-types"; } import openconfig-inet-types { prefix "oc-inet"; } import openconfig-extensions { prefix "oc-ext"; } @@ -25,7 +24,31 @@ module openconfig-bgp-types { policy. It can be imported by modules that make use of BGP attributes"; - oc-ext:openconfig-version "5.4.0"; + oc-ext:openconfig-version "6.1.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "6.1.0"; + } + + revision "2024-02-01" { + description + "Modify bgp-community-regexp-type."; + reference "6.0.0"; + } + + revision "2023-12-26" { + description + "Add regex for bgp link bandwidth"; + reference "5.6.0"; + } + + revision "2023-09-06" { + description + "Add GRACEFUL_SHUTDOWN as a BGP_WELL_KNOWN_STD_COMMUNITY"; + reference "5.5.0"; + } revision "2023-03-31" { description @@ -361,6 +384,16 @@ module openconfig-bgp-types { reference "RFC3765"; } + identity GRACEFUL_SHUTDOWN { + base BGP_WELL_KNOWN_STD_COMMUNITY; + description + "An autonomous system which supports the graceful shutdown + receiver procedure receiving NLRI tagged with this community + will set LOCAL_PREF to a low value for those NLRI. This + community has a value of 0xFFFF0000."; + reference "RFC8326"; + } + typedef bgp-session-direction { type enumeration { enum INBOUND { @@ -579,6 +612,27 @@ module openconfig-bgp-types { '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[0-1][0-9]{8}|[1-3][0-9]{9}|' + '[1-9][0-9]{1,8}|[0-9])$'; } + type string { + // Extended Link Bandwidth Community + // link-bandwidth:<2 byte asn>: + // Example: link-bandwidth:20:100M + pattern 'link-bandwidth:' + + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9]):' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[0-1][0-9]{8}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])(k|K|M|G)?'; + oc-ext:posix-pattern '^link-bandwidth:' + + '(6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}' + + '|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$' + + '(429496729[0-5]|42949672[0-8][0-9]|4294967[0-1][0-9]{2}' + + '|429496[0-6][0-9]{3}|42949[0-5][0-9]{4}|4294[0-8][0-9]{5}|' + + '429[0-3][0-9]{6}|42[0-8][0-9]{7}|4[0-1][0-9]{8}|[1-3][0-9]{9}|' + + '[1-9][0-9]{1,8}|[0-9])(k|K|M|G)?$'; + } + } description "Type definition for extended community attributes. In the case that @@ -592,11 +646,15 @@ module openconfig-bgp-types { - route-origin:<2b ASN>:<4b value> per RFC4360 section 5 - route-origin:<4b IPv4>:<2b value> per RFC4360 section 5 - color::<4b value> per draft-ietf-idr-segment-routing-te-policy - section 3"; + section 3 + - link-bandwidth:<2 byte asn>: per + draft-ietf-idr-link-bandwidth-07"; + reference "RFC 4360 - BGP Extended Communities Attribute RFC 5668 - 4-Octet AS Specific BGP Extended Community - draft-ietf-idr-segment-routing-te-policy"; + draft-ietf-idr-segment-routing-te-policy + draft-ietf-idr-link-bandwidth-07"; } typedef bgp-ext-community-recv-type { @@ -630,12 +688,15 @@ module openconfig-bgp-types { } typedef bgp-community-regexp-type { - // TODO: needs more work to decide what format these regexps can - // take. - type oc-types:std-regexp; + type oc-types:posix-eregexp; description "Type definition for communities specified as regular - expression patterns"; + expression patterns. The regular expression must be a + POSIX extended regular expression with some limitations + which are commonly found in device implementations described + in draft-ietf-idr-bgp-model."; + reference + "draft-ietf-idr-bgp-model"; } typedef bgp-origin-attr-type { @@ -740,10 +801,8 @@ module openconfig-bgp-types { } enum NONE { description - "Do not send any community attribute. - This value has been deprecated because the node is now - a leaf-list."; - status deprecated; + "Do not send any community attribute. If this value is present + then the other community-types must not be present."; } } description diff --git a/release/models/bgp/openconfig-bgp.yang b/release/models/bgp/openconfig-bgp.yang index b9e9b2f07..054f3cdd9 100644 --- a/release/models/bgp/openconfig-bgp.yang +++ b/release/models/bgp/openconfig-bgp.yang @@ -68,7 +68,41 @@ module openconfig-bgp { whereas leaf not present inherits its value from the leaf present at the next higher level in the hierarchy."; - oc-ext:openconfig-version "9.4.1"; + oc-ext:openconfig-version "9.8.0"; + + revision "2024-09-06" { + description + "Restore NONE enum value for community-type."; + reference "9.8.0"; + } + + revision "2023-12-28" { + description + "Clarification to last-prefix-limit-exceeded in description"; + reference "9.7.1"; + } + + revision "2023-12-28" { + description + "Add support for controling use of link-bandwidth extended + community for BGP multipath."; + reference "9.7.0"; + } + + revision "2023-11-02" { + description + "Fix revision '2023-03-31': send-community-type was added to the + wrong grouping. + Allow configuring send-community per AFI-SAFI at + neighbor/peer-group."; + reference "9.6.0"; + } + + revision "2023-11-01" { + description + "Add default apply policy to global and per afi-safi config."; + reference "9.5.0"; + } revision "2023-06-27" { description diff --git a/release/models/devices-manifest/openconfig-terminal-device-properties.yang b/release/models/devices-manifest/openconfig-terminal-device-properties.yang index 2a9c2e506..862676c40 100644 --- a/release/models/devices-manifest/openconfig-terminal-device-properties.yang +++ b/release/models/devices-manifest/openconfig-terminal-device-properties.yang @@ -10,7 +10,7 @@ module openconfig-terminal-device-properties { yang-version "1"; // namespace - namespace "http://example.net/yang/openconfig-terminal-device-properties"; + namespace "http://openconfig.net/yang/openconfig-terminal-device-properties"; prefix "oc-opt-term-properties"; import openconfig-extensions { prefix oc-ext; } @@ -35,10 +35,30 @@ module openconfig-terminal-device-properties { the OTSi (OTSiMC). It also includes (optional) aspects such as filter characterization, CD and DGD tolerance."; - oc-ext:openconfig-version "0.1.0"; + oc-ext:openconfig-version "0.2.0"; // Revisions + revision "2024-05-28" { + description "Comprehensive model update to undertake the limitations + of the first version of the model, such the introduction of modes + dependencies on hardware components and the interoperability information + between terminal devices, linecards, transceviers and modes."; + reference "0.2.0"; + } + + revision "2024-05-15" { + description + "Fix yang namespace URI to openconfig.net."; + reference "0.1.2"; + } + + revision "2023-12-13" { + description + "Add reference to the terminal-device-properties-guide.md doc for operational-modes."; + reference "0.1.1"; + } + revision "2022-04-26" { description "Initial manifest fine to extend the information related to the operational modes supported by a terminal device."; @@ -119,15 +139,6 @@ module openconfig-terminal-device-properties { It may vary depending on the modulation format used in the associated transmission mode (operational-mode)."; } - leaf pre-fec-ber-threshold { - type decimal64 { - fraction-digits 18; - } - units bit-errors-per-second; - description - "Threshold on the PRE-FEC-BER, for which FEC code is able to - correct errors."; - } } grouping filter-attributes-top { @@ -225,46 +236,22 @@ module openconfig-terminal-device-properties { } } - grouping operational-mode-descriptor-explicit-capabilities-state { + grouping mode-descriptor-design-properties-state { description - "Operational-mode capabilities leafs."; - - leaf modulation-format { - type union { - type string; - type oc-opt-term-prop-types:modulation-format; - } - description - "Optical modulation format associated to the mode. The - modulation format associated to the optical signal."; - } - - leaf bit-rate { - type oc-opt-term-prop-types:bit-rate; - description - "Rounded bit rate of the tributary signal delivered by the - optical channel associated to the specific operational mode. - Exact bit rate will be refined by protocol selection at the - associated tributary logical channel."; - } - - leaf baud-rate { - type decimal64 { - fraction-digits 2; - } - units Bd; - description - "Baud-rate or symbol rate."; - } - - leaf optical-channel-spectrum-width { - type decimal64 { - fraction-digits 2; - } - units GHz; + "For each given mode supported by the device there might be + one or multiple implementations related to the transceiver hardware + modules which implements the mode. For a given implementation, + a set of design properties are represented within the mode-descriptor + data structure, which is identified by a unique local identifier. + A mode-descriptor shall uniquely characterize a given operational mode + implemented by a given transceiver component described within the + terminal-device manfiest file."; + + leaf mode-descriptor-id { + type uint16; description - "Spectrum width of the optical channel associated to this - operational mode, calculated as the baud-rate*(1+roll-off)."; + "Two-octet encoding of the vendor-defined operational + mode"; } leaf min-tx-osnr { @@ -345,9 +332,19 @@ module openconfig-terminal-device-properties { optical channel associated to the associated transmission mode (operational model), expressed in decibels (dB)"; } + + leaf pre-fec-ber-threshold { + type decimal64 { + fraction-digits 18; + } + units bit-errors-per-second; + description + "Threshold on the PRE-FEC-BER, for which FEC code is able to + correct errors."; + } } - grouping operational-mode-descriptor-explicit-top { + grouping operational-mode-descriptor-design-properties-top { description "Definition of proprietary or non-standard operational-modes, which can be uniformly characterized by the set of attributes included in their @@ -357,150 +354,172 @@ module openconfig-terminal-device-properties { allowed values to be configured at the oc-component:optical-channel instance configured to this mode."; - container explicit-mode { + container mode-descriptors { description "Explicit definition of the operational-mode. Typically this is used for non-standard/proprietary modes defined by the terminal-device vendor and it is self-described by the capabilities included in the subtree underneath."; - container operational-mode-capabilities{ + list mode-descriptor{ + key "mode-descriptor-id"; description - "Set of attributes which characterizes the operational-mode for optimal - optical-channel transmission and receiver functions. This attributes - are intending to describe all the relevant data used during the - network planning phase, to estimate the physical-impairment - tolerances which can be introduced by the DWDM optical path, - while assuring optimal transmission function."; + ""; + leaf mode-descriptor-id { + type leafref { + path "../state/mode-descriptor-id"; + } + description + "Reference to mode-descriptor-id"; + } container state { config false; description - "Operational-mode explicit mode capabilities state container."; - - uses operational-mode-descriptor-explicit-capabilities-state; + "Mode-descriptor state attributes top container."; + uses mode-descriptor-design-properties-state; } - container fec { - description - "The Forward Error Coding (FEC) coding schema used, - including the name, overhead, pre-fec-ber threshold and - gain properties."; + uses operational-mode-descriptor-penalties-top; + uses operational-mode-descriptor-interoperable-modes-top; + } + } + } - container state { - config false; - description - "FEC state attributes top container."; + grouping interoperable-mode-properties-state { + description + "System-defined configuration data for component properties"; - uses fec-codes-attributes; - } + 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."; + } + } - container penalties { - description - "Enconsing list's container."; + grouping operational-mode-descriptor-interoperable-mode-state { + description + "Interoperable mode features attributes grouping."; - list penalty { - key "parameter-and-unit up-to-boundary"; - description - "Penalties includes contributions from different impairments including - cd, pmd, low RX Power, pdl,... - - For parameter values below lowest up-to-boundary value, the penalty is 0. - - For parameter values between lowest and highest up-to-boundary - values, penalty could be linearly interpolated. - - For parameter values above highest up-to-boundary value, the penalty is the one - included within penalty-value attribute associated to the highest up-to-boundary"; - - leaf parameter-and-unit { - type leafref { - path "../state/parameter-and-unit"; - } - description - "Impairment and unit leading to the penalty (i.e., cd-ps)"; - } - - leaf up-to-boundary { - type leafref { - path "../state/up-to-boundary"; - } - description - "defines the upper (for positive values) and lower (for negative values) - limit for which the penalty value is valid."; - } - - container state { - config false; - description - "Penalties list element's state attributes top container."; - uses penalties-list-element-attributes; - } - } - } + leaf mode-name { + type string; + description + "Public well-know free-format name reference to the mode name."; + } - container filter { - description - "This container includes information which characterises the filter at - transceiver transmission for the given operational-mode."; + leaf publisher-organization { + type union { + type string; + type oc-opt-term-prop-types:interoperability-modes-organization; + } + description + "Name of the organization, standard body, Multi-Source Agreement, or + open source project, responsible of the definition of the interoperable + mode."; + } + } + grouping operational-mode-descriptor-penalties-top { + description + "Top container grouping for operational-mode-descriptor."; + container penalties { + description + "Enconsing list's container."; - container state { - config false; - description - "Filter's state attributes top container."; - uses filter-attributes-top; + list penalty { + key "parameter-and-unit up-to-boundary"; + description + "Penalties includes contributions from different impairments including + cd, pmd, low RX Power, pdl,... + - For parameter values below lowest up-to-boundary value, the penalty is 0. + - For parameter values between lowest and highest up-to-boundary + values, penalty could be linearly interpolated. + - For parameter values above highest up-to-boundary value, the penalty is the one + included within penalty-value attribute associated to the highest up-to-boundary"; + + leaf parameter-and-unit { + type leafref { + path "../state/parameter-and-unit"; } + description + "Impairment and unit leading to the penalty (i.e., cd-ps)"; } - } - container optical-channel-config-value-constraints{ - description - "Set of constraints of the configuration attributes - of the optical-channel associated to the selected - operational-mode."; + leaf up-to-boundary { + type leafref { + path "../state/up-to-boundary"; + } + description + "defines the upper (for positive values) and lower (for negative values) + limit for which the penalty value is valid."; + } container state { config false; description - "Operational-mode explicit mode config value constrains state top - container."; - - uses operational-mode-descriptor-explicit-config-constraints-state; + "Penalties list element's state attributes top container."; + uses penalties-list-element-attributes; } } } } - grouping operational-mode-descriptor-standard-state { + grouping operational-mode-descriptor-interoperable-modes-top { description - "Standard mode features attributes grouping."; + "Each mode-descriptor of a given operational-mode could be compatible + with many interoperable modes which are defined, elsewhere, by standard + bodies, multi-source agreements, vendor forums or any other public forum. + This compatibility characteristic shall be assured by the system-vendor + and imply that the design properties of the implementations of that + specific operational mode are a superset of the all listed supported + standard modes"; - leaf standard-mode { - type oc-opt-term-prop-types:standard-mode; + container interoperable-modes { description - "G.698.2 (11/18) standard mode"; - } - } + "Top level container of interoperable modes."; - grouping operational-mode-descriptor-standard-top { - description - "Standard mode features description grouping. It is used if the - 'mode-type' attribute is set to 'TRANSCEIVER_MODE_TYPE_STANDARD"; + list interoperable-mode { + key "mode-name"; + description + "Each interoperable mode is defined by its public name reference + and a set of free form key-value properties which augments with + the required information provided by the system-vendor."; - container G.698.2 { - description - "ITU-T G.698.2 (11/18) standard mode that guarantees interoperability. - It must be an string with the following format: - B-DScW-ytz(v) where all these attributes are conformant - to the ITU-T G.698.2 (11/18) recommendation."; + leaf mode-name { + type leafref { + path "../state/mode-name"; + } + description + "Reference to mode-name."; + } - container state { + container state { config false; description - "Operational-mode standard mode state top container."; + "Operational-mode interoperbale mode state top container."; - uses operational-mode-descriptor-standard-state; + uses operational-mode-descriptor-interoperable-mode-state; + } } } } + grouping operational-mode-descriptor-state{ description "Top-level operational-mode-features grouping definitions"; @@ -512,13 +531,74 @@ module openconfig-terminal-device-properties { mode"; } - leaf mode-type { - type identityref{ - base oc-opt-term-prop-types:TRANSCEIVER_MODE_TYPE; + leaf modulation-format { + type union { + type string; + type oc-opt-term-prop-types:modulation-format; + } + description + "Optical modulation format associated to the mode. The + modulation format associated to the optical signal."; + } + + leaf bit-rate { + type oc-opt-term-prop-types:bit-rate; + description + "Rounded bit rate of the tributary signal delivered by the + optical channel associated to the specific operational mode. + Exact bit rate will be refined by protocol selection at the + associated tributary logical channel."; + } + + leaf baud-rate { + type decimal64 { + fraction-digits 2; } + units Bd; description - "Indicates whether the transceiver's mode is a standard - mode, an organizational mode or an explicit mode."; + "Baud-rate or symbol rate."; + } + + leaf optical-channel-spectrum-width { + type decimal64 { + fraction-digits 2; + } + units GHz; + description + "Spectrum width of the optical channel associated to this + operational mode, calculated as the baud-rate*(1+roll-off)."; + } + } + + grouping operation-mode-filter-and-fec { + description + "Enclosing grouping for Operational Mode filter and FEC attributes."; + + container filter { + description + "This container includes information which characterises the filter at + transceiver transmission for the given operational-mode."; + + container state { + config false; + description + "Filter's state attributes top container."; + uses filter-attributes-top; + } + } + container fec { + description + "The Forward Error Coding (FEC) coding schema used, + including the name, overhead, pre-fec-ber threshold and + gain properties."; + + container state { + config false; + description + "FEC state attributes top container."; + + uses fec-codes-attributes; + } } } @@ -526,18 +606,20 @@ module openconfig-terminal-device-properties { description "top-level operational-mode definitions"; - container operational-modes { + container operational-mode-descriptors { config false; description "Indicates the transceiver's list of supported operational modes and its associated transmission features"; + reference + "https://github.com/openconfig/public/blob/master/doc/terminal-device-properties-guide.md"; - list mode-descriptor { + list operational-modes { key "mode-id"; description - "List of operational modes supported by the platform. - The operational mode provides a platform-defined summary - of information such as symbol rate, modulation, pulse + "List of operational modes supported by the terminal-device. + The operational mode descriptor list provides a platform-defined + summary of the modes' information such as symbol rate, modulation, pulse shaping, etc."; leaf mode-id { @@ -555,11 +637,342 @@ module openconfig-terminal-device-properties { uses operational-mode-descriptor-state; } - uses operational-mode-descriptor-standard-top; - uses operational-mode-descriptor-explicit-top; + uses operation-mode-filter-and-fec; + uses operational-mode-descriptor-design-properties-top; + } + } + } + + // Definition of terminal-device transceiver descriptors. + + grouping terminal-device-component-descriptor-state { + description + "State data for terminal device descriptor components."; + + leaf component-descriptor-id { + type string; + description + "Unique identifier assigned by the system vendor for the + component descriptor."; + } + + leaf system-vendor-name { + type string; + description + "System vendor company name"; + } + + leaf system-vendor-part-no { + type string; + description + "System-vendor assigned part number for the component. This should + be present in particular if the component is also an FRU + (field replaceable unit)"; + } + + 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-part-no { + type string; + description + "Transceiver manufacturer assigned part number for the component."; + } + + 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 clei-code { + type string; + description + "Common Language Equipment Identifier (CLEI) code of the + component. This should be present in particular if the + component is also an FRU (field replaceable unit)"; + } + } + grouping transceiver-compatible-mode-state { + description + "Each compatible mode has associated a mode-descriptor which represents + the operational mode design properties associated to the transceiver which + transmits the mode."; + + container state { + description + "State container of transciever compatible modes."; + + leaf mode-id { + type uint16; + must "../../../../../../operational-mode-descriptors/operational-modes[mode-id=current()]/mode-id"; + + description + "Two-octet encoding of the vendor-defined operational mode. + Each value shall reference a valid mode-id included in the + operational-mode-descriptors list."; + } + + leaf mode-descriptor-id { + type leafref { + path "/oc-opt-term-properties:operational-mode-descriptors/operational-modes/mode-descriptors/mode-descriptor/mode-descriptor-id"; + } + description + "Reference to the associated mode-descriptor-id which describes + the specific design properties of the mode once it is being transmitted + by the parent transceiver component."; + } + } + } + + grouping transceiver-compatible-modes { + description + "Transceiver compatible modes definition."; + + container transceiver-compatible-modes { + config false; + description + "Indicates the set of operatational-modes, present in the terminal- + device manifest, which are compatible with the described transceiver + component."; + + list transceiver-compatible-mode { + key "mode-id"; + description + "List of operational modes supported by the target transceiver."; + + leaf mode-id { + type leafref { + path "../state/mode-id"; + } + description + "Reference to a ../state/mode-id."; + } + uses transceiver-compatible-mode-state; + } + } + } + + grouping transceiver-descriptor-top { + description + "top-level transceiver-descriptor definitions"; + + container transceiver-descriptors { + config false; + description + "Indicates the terminal-device's list of compatible transceiver + component and its associated modes and mode descriptors compatibility + matrix."; + + list transceiver-descriptor { + key "component-descriptor-id"; + description + "List of transceiver components supported by the terminal-device. + The operational mode provides a platform-defined summary + of information such as symbol rate, modulation, pulse + shaping, etc."; + + leaf component-descriptor-id { + type leafref { + path "../state/component-descriptor-id"; + } + description + "Reference to component-descriptor-id"; + } + + container state { + description + "Static features or properties which characterize the + component descriptor."; + + uses terminal-device-component-descriptor-state; + } + uses transceiver-compatible-modes; + } + } + } + + // Definition of terminal-device linecard descriptors. + + grouping linecards-constrained-compatible-modes-state { + description + "Grouping for the linecards' contrained compatible modes + state attributes."; + + container state { + description + "State container for linecard constrained compatible modes"; + + leaf mode-id { + type uint16; + must "../../../../../../../../operational-mode-descriptors/operational-modes[mode-id=current()]/mode-id"; + + description + "Absolute reference to an operational-mode-id. Each value shall + reference a valid mode-id included in the operational-mode-descriptors + list."; + } + + leaf mode-descriptor-id { + type leafref { + path "/oc-opt-term-properties:operational-mode-descriptors/operational-modes/mode-descriptors/mode-descriptor/mode-descriptor-id"; + } + description + "Reference to the associated mode-descriptor-id which describes + the specific design properties of the mode once it is being transmitted + by the parent transceiver component."; + } + } + } + + grouping constrained-compatible-modes { + description + "Linecards' compatible transceiver list of compatible modes which are + constrained by the integration made by the system vendor of the given + terminal-device."; + + container constrained-compatible-modes { + config false; + description + "Indicates the set of operatational-modes, present in the terminal- + device manifest, which are compatible with the described transceiver + component within the linecard component."; + + list constrained-compatible-mode { + key "mode-id"; + description + "List of operational modes supported by the target transceiver."; + + leaf mode-id { + type leafref { + path "../state/mode-id"; + } + description + "Reference to linecard-descriptor/constrained-compatible-mode/state/mode-id."; + } + + uses linecards-constrained-compatible-modes-state; + + container optical-channel-config-value-constraints{ + description + "Set of constraints of the configuration attributes + of the optical-channel associated to the selected + operational-mode."; + + container state { + config false; + description + "Operational-mode explicit mode config value constrains state top + container."; + + uses operational-mode-descriptor-explicit-config-constraints-state; + } + } + } + } + } + + grouping linecard-compatible-transceivers { + description + "Linecard-transceiver compatibility matrix definition."; + + container compatible-transceivers { + config false; + description + "Indicates the set of transceiver component which are compatible + with the described linecard component."; + + list compatible-transceiver { + key "transceiver-descriptor-id"; + description + "List of transceiver descriptor ids."; + + leaf transceiver-descriptor-id { + type leafref { + path "../state/transceiver-descriptor-id"; + } + description + "Reference to transceiver-descriptor-id"; + } + container state { + description + "Static features or properties which characterize the + component descriptor."; + + leaf transceiver-descriptor-id { + type string; + description + "String rerference of the system vendor defined transciever + component descriptor id."; + } + } + uses constrained-compatible-modes; + } + } + } + + grouping linecard-descriptor-top { + description + "top-level linecard-descriptor definitions"; + + container linecard-descriptors { + config false; + description + "Indicates the terminal-device's list of compatible linecard + component and its associated modes and mode descriptors compatibility + matrix."; + + list linecard-descriptor { + key "component-descriptor-id"; + description + "List of linecard components supported by the terminal-device. + The operational mode provides a platform-defined summary + of information such as symbol rate, modulation, pulse + shaping, etc."; + + leaf component-descriptor-id { + type leafref { + path "../state/component-descriptor-id"; + } + description + "Reference to component-descriptor-id"; + } + + container state { + description + "Static features or properties which characterize the + component descriptor."; + + uses terminal-device-component-descriptor-state; + } + uses linecard-compatible-transceivers; } } } + uses transceiver-descriptor-top; + uses linecard-descriptor-top; uses operational-mode-top; } diff --git a/release/models/devices-manifest/openconfig-terminal-device-property-types.yang b/release/models/devices-manifest/openconfig-terminal-device-property-types.yang index 13a019294..b1fd0ef9b 100644 --- a/release/models/devices-manifest/openconfig-terminal-device-property-types.yang +++ b/release/models/devices-manifest/openconfig-terminal-device-property-types.yang @@ -10,7 +10,7 @@ module openconfig-terminal-device-property-types { yang-version "1"; // namespace - namespace "http://example.net/yang/openconfig-terminal-device-property-types"; + namespace "http://openconfig.net/yang/openconfig-terminal-device-property-types"; prefix "oc-opt-term-prop-types"; import openconfig-extensions { prefix oc-ext; } @@ -29,10 +29,24 @@ module openconfig-terminal-device-property-types { definitions of the set of modulation format, FEC codes and adjustment granularity types use in the reffered model."; - oc-ext:openconfig-version "0.1.0"; + oc-ext:openconfig-version "0.2.0"; // Revisions + revision "2024-05-28" { + description "Comprehensive model update to undertake the limitations + of the first version of the model, such the introduction of modes + dependencies on hardware components and the interoperability information + between terminal devices, linecards, transceviers and modes."; + reference "0.2.0"; + } + + revision "2024-05-15" { + description + "Fix yang namespace URI to openconfig.net."; + reference "0.1.1"; + } + revision "2022-03-08" { description "Initial version to provide the initial set of identities used in the openconfig-terminal-device-properties model."; @@ -56,6 +70,14 @@ module openconfig-terminal-device-property-types { reference "ITU-T G.698.2 (11/2018)"; } + typedef interoperability-modes-organization { + type identityref { + base INTEROPERABILITY_MODES_ORGANIZATION; + } + description + "Optical modulation format associated to the mode"; + } + typedef bit-rate { type identityref { base oc-opt-types:TRIBUTARY_RATE_CLASS_TYPE; @@ -117,6 +139,11 @@ module openconfig-terminal-device-property-types { "Definition of impairment type and unit used in penaty list"; } + identity INTEROPERABILITY_MODES_ORGANIZATION { + description + "Base identity for interoperability modes' defining organizations."; + } + identity SHAPING_TYPE { description "Base identity for pulse-shaping-type, to help characterize the @@ -254,7 +281,6 @@ module openconfig-terminal-device-property-types { no minimun spacing between channels is defined."; } - identity FEC { description "Forward Error Correction base identity."; @@ -273,6 +299,7 @@ module openconfig-terminal-device-property-types { "Generic FEC, Reed Solomon (255,239) coding schema, defined in ITU-T G.975 (10/2000)."; } + identity FEC_E { base FEC; description diff --git a/release/models/ethernet-segments/.spec.yml b/release/models/ethernet-segments/.spec.yml new file mode 100644 index 000000000..f41f4ff79 --- /dev/null +++ b/release/models/ethernet-segments/.spec.yml @@ -0,0 +1,6 @@ +- name: openconfig-ethernet-segments + docs: + - yang/ethernet-segments/openconfig-ethernet-segments.yang + build: + - yang/ethernet-segments/openconfig-ethernet-segments.yang + run-ci: true diff --git a/release/models/ethernet-segments/openconfig-ethernet-segments.yang b/release/models/ethernet-segments/openconfig-ethernet-segments.yang new file mode 100644 index 000000000..b09357564 --- /dev/null +++ b/release/models/ethernet-segments/openconfig-ethernet-segments.yang @@ -0,0 +1,250 @@ +module openconfig-ethernet-segments { + + // namespace + namespace "http://openconfig.net/yang/ethernet-segments"; + + prefix "oc-es"; + + + import openconfig-extensions { prefix oc-ext; } + import openconfig-interfaces { prefix oc-if; } + import openconfig-evpn-types { prefix oc-evpn-types; } + + // meta + organization + "OpenConfig working group"; + + contact + "OpenConfig working group + netopenconfig@googlegroups.com"; + + description + "This module contains definitions of ethernet segements. + The ethernet segments are used in EVPN services are + defined for the whole device"; + + oc-ext:openconfig-version "0.1.0"; + + revision "2021-06-28" { + description + "First Version"; + reference "0.1.0"; + } + + +grouping evpn-ethernet-segment-df-config { + description + "Configuration parameters for the Designated forwarding + Election"; + + leaf df-election-method { + type enumeration { + enum DEFAULT { + value 0; + description + "The default Designated Forwarder Election election method"; + } + enum HIGHEST_RANDOM_WEIGHT { + value 1; + description + "The highest random weight (HRW) method"; + reference + "RFC8584: Framework for Ethernet VPN Designated Forwarder + Election Extensibility"; + } + enum PREFERENCE { + value 2; + description + "The preference based method"; + reference + "RFC8584: Framework for Ethernet VPN Designated Forwarder + Election Extensibility"; + } + } + description + "Select the Designated Forwarder Election (DF) election method"; + reference + "RFC 7432: BGP MPLS-Based Ethernet VPN. + RFC 8584:Framework for Ethernet VPN Designated Forwarder + Election Extensibility"; + } + + leaf preference { + when "../df-election-method = 'PREFERENCE'" { + description + "The preference value is only applicable + to the preference based method"; + } + type uint16; + description + "Defines a 2-octet value that indicates the PE + preference to become the DF in the Ethernet-Segment."; + reference + "RFC8584: Framework for Ethernet VPN Designated Forwarder + Election Extensibility"; + } + + leaf revertive { + when "../df-election-method = 'PREFERENCE'" { + description + "The revertive value is only applicable + to the preference method"; + } + type boolean; + default true; + description + "The 'preempt' or 'revertive' behavior. This option will allow a + non-revertive behavior in the DF election."; + reference + "RFC8584: Framework for Ethernet VPN Designated Forwarder + Election Extensibility"; + } + + leaf election-wait-time { + when "../df-election-method = 'PREFERENCE'" { + description + "The Designated Forwarder Election wait-time is only applicable + to the preference method"; + } + type uint32; + description + "Designated Forwarder Election wait-time. When the DF timer expires, + the PE device selects the DF based on the highest preference value"; + reference + "RFC8584: Framework for Ethernet VPN Designated Forwarder + Election Extensibility"; + } + } + + grouping evpn-ethernet-segment-df-top { + description + "Top grouping for the configuration and state parameters + for the Designated forwarding Election"; + + container df-election { + description + "Top container for the configuration and state parameters + for the Designated forwarding Election"; + + container config { + description + "Configuration parameters for the Designated forwarding Election"; + + uses evpn-ethernet-segment-df-config; + } + + container state { + description + "Configuration parameters for the Designated forwarding Election"; + config false; + + uses evpn-ethernet-segment-df-config; + } + } + } + + grouping evpn-ethernet-segment-config { + description + "Configuration attributes for the Ethernet + Segment."; + + leaf name { + type string; + description + "Ethernet Segment name"; + } + + leaf esi-type { + type oc-evpn-types:esi-type; + default "TYPE_0_OPERATOR_CONFIGURED"; + description + "ESI Type is a 1-octet field (most significant octet) that + specifies the format of the remaining 9 octets (ESI Value)."; + reference + "RFC 7432: BGP MPLS-Based Ethernet VPN page-16"; + } + + leaf esi { + type union { + type oc-evpn-types:esi; + type enumeration { + enum AUTO { + description + "This ESI type indicates an auto-generated ESI value."; + reference + "RFC 7432: BGP MPLS-Based Ethernet VPN"; + } + } + } + description + "Ethernet Segment Identifier (ESI) value. + For ESI Type 0: The esi leaf value is directly configured by the operator. + For ESI Type 1: The AUTO enum must be used. + For ESI Type 2: The AUTO enum must be used. + For ESI Type 3: The directly configured or AUTO enum must be used. + For ESI Type 4: The directly configured or AUTO enum must be used. + For ESI Type 5: The directly configured or AUTO enum must be used."; + reference + "RFC 7432: BGP MPLS-Based Ethernet VPN."; + } + + leaf redundancy-mode { + type identityref { + base oc-evpn-types:EVPN_REDUNDANCY_MODE; + } + description + "Multihoming options for load balancing of + traffic in the Ethernet Segment."; + reference + "RFC 7432: BGP MPLS-Based Ethernet VPN"; + } + + uses oc-if:interface-ref-common; + } + + grouping evpn-ethernet-segment-top { + description + "Top-level grouping for ethernet segments. An Ethernet Segment + is referenced by a name and an ESI"; + + container ethernet-segments { + description + "Top-level container for ethernet segments. An Ethernet Segment + is referenced by a name and an ESI"; + + list ethernet-segment { + key "name"; + description + "List of Ethernet Segments."; + + leaf name { + type leafref { + path '../config/name'; + } + description + "Ethernet Segment Name "; + } + + container config { + description + "Configuration data for the Ethernet Segments."; + + uses evpn-ethernet-segment-config; + } + + container state { + config false; + description + "Operational state data for the Ethernet Segments."; + + uses evpn-ethernet-segment-config; + } + + uses evpn-ethernet-segment-df-top; + } + } + } + + uses evpn-ethernet-segment-top; + +} \ No newline at end of file diff --git a/release/models/flex-algo/.spec.yml b/release/models/flex-algo/.spec.yml new file mode 100644 index 000000000..8b2e4b3ec --- /dev/null +++ b/release/models/flex-algo/.spec.yml @@ -0,0 +1,6 @@ +- name: openconfig-flexalgo + docs: + - yang/flex-algo/openconfig-flexalgo.yang + build: + - yang/flex-algo/openconfig-flexalgo.yang + run-ci: true diff --git a/release/models/flex-algo/openconfig-flexalgo.yang b/release/models/flex-algo/openconfig-flexalgo.yang new file mode 100644 index 000000000..2fd904b86 --- /dev/null +++ b/release/models/flex-algo/openconfig-flexalgo.yang @@ -0,0 +1,407 @@ +module openconfig-flexalgo { + yang-version 1.1; + namespace "http://openconfig.net/yang/flexalgo"; + prefix "oc-flexalgo"; + + import openconfig-network-instance { + prefix "oc-ni"; + } + import openconfig-extensions { + prefix oc-ext; + } + import openconfig-interfaces { + prefix oc-if; + } + oc-ext:openconfig-version "0.1.0"; + + organization + "OpenConfig working group"; + contact + "OpenConfig working group + www.openconfig.net "; + description + "This YANG module defines the configurational and operational + parameters related to IGP Flex-Algorithms"; + + revision 2023-05-24 { + description + "Initial revision of flexalgo module"; + reference + "0.1.0"; + } + + /* Types definitions */ + + typedef flex-algo-metric-type { + type enumeration { + enum IGP { + value 0; + description + "IGP metric to be used during the calculation."; + } + enum MIN_DELAY { + value 1; + description + "Min Unidirectional Link Delay as defined in [RFC7810] to + be used during the calculation."; + } + enum TE_METRIC { + value 2; + description + "TE default metric as defined in [RFC5305] to be used + during the calculation."; + } + } + description + "Type of metric to be used during a Flex Algo path + computation"; + } + + typedef flex-algo-id { + type uint8 { + range "128..255"; + } + description + "Flex-Algorithm identifies which algorithm should be used during + path computation"; + } + + typedef flex-algo-calc-type { + type uint8 { + range "0..127"; + } + default "0"; + description + "Calculation type value ranges from 0 to 127 both inclusive + from the IGP Algorithm Types registry defined under + Interior Gateway Protocol (IGP) + Parameters IANA registries. + If the required calculation type is Shortest Path First, + the value 0 SHOULD appear in this field."; + } + + grouping algorithm-attributes { + description + "All of the possible attributes for an flexible algorithm + definition"; + leaf flex-algo-id { + type flex-algo-id; + mandatory true; + description + "Flex Algorithm Identifier"; + } + leaf flex-algo-name { + type string; + description + "Flexible Algorithm name"; + } + leaf flex-algo-description { + type string; + description + "Description of this flex-algo"; + } + leaf metric-type { + type flex-algo-metric-type; + default "IGP"; + description + "Indicates which is the corresponding metric type for + this algorithm"; + } + leaf calc-type { + type flex-algo-calc-type; + description + "Indicates the calculation type, if advertised"; + } + leaf priority { + type uint8; + default "237"; + description + "Indicates the priority for this algorithm"; + } + + leaf-list exclude { + type leafref { + path "../../../../flex-algo-global-attributes/flex-algo-admin-groups/" + + "admin-group/admin-group-name"; + } + description + "extended-admin-groups to exclude in path calculation."; + } + leaf-list include-all { + type leafref { + path "../../../../flex-algo-global-attributes/flex-algo-admin-groups/" + + "admin-group/admin-group-name"; + } + description + "extended-admin-groups, all of which must be included"; + } + leaf-list include-any { + type leafref { + path "../../../../flex-algo-global-attributes/flex-algo-admin-groups/" + + "admin-group/admin-group-name"; + } + description + "extended-admin-groups, one of which must be included"; + } + leaf-list srlg-exclude { + type leafref { + path "../../../../flex-algo-global-attributes/srlgs/srlg/name"; + } + description + "list of references to named SRLGs to be excluded"; + } + leaf algo-flags { + type boolean; + description + "Advertise flex-algo definition flags"; + } + } + + grouping flex-algo-definition-top { + description + "Top level grouping for flexible Algorithms and their definitions"; + list algorithm { + key "flex-algo-id"; + description + "List of Flexible Algorithms"; + leaf flex-algo-id { + type leafref { + path "../config/flex-algo-id"; + } + description + "Name for a Flexible Algorithm"; + } + container config { + description + "Attributes for a Flexible Algorithm"; + uses algorithm-attributes; + } + container state { + config false; + description + "Attributes for a Flexible Algorithm"; + uses algorithm-attributes; + } + } + } + + grouping flex-algo-interface-attributes-config { + description + "global level definitions for interfaces + on which TE is run"; + + leaf interface-id { + type oc-if:interface-id; + description + "Id of the interface"; + } + + leaf te-metric { + type uint32; + description + "TE specific metric for the link"; + } + + leaf min-delay { + type uint32; + description + "Min delay for the link"; + } + + leaf-list srlg-membership { + type leafref { + path "../../../../flex-algo-global-attributes/srlgs/srlg/name"; + } + description + "list of references to named shared risk link groups that the + interface belongs to."; + } + + leaf-list admin-group { + type leafref { + path "../../../../flex-algo-global-attributes/flex-algo-admin-groups/" + + "admin-group/admin-group-name"; + } + description + "list of admin groups (by name) on the interface"; + } + } + + grouping flex-algo-interface-attributes-top { + description "Top level grouping for flex Algorithm attributes for interfaces"; + + list interface { + key "interface-id"; + description + "List of flex-algo interfaces"; + + leaf interface-id { + type leafref { + path "../config/interface-id"; + } + description + "Reference to the interface id list key"; + } + + container config { + description + "Configuration parameters related to flex-algo interfaces:"; + uses flex-algo-interface-attributes-config; + } + + container state { + config false; + description + "State parameters related to flex-algo interfaces"; + uses flex-algo-interface-attributes-config; + } + } + } + + grouping flex-algo-srlg-config { + description + "Configuration of various attributes associated with the SRLG"; + + leaf name { + type string; + description + "SRLG group identifier"; + } + + leaf value { + type uint32; + description + "group ID for the SRLG"; + } + } + + grouping flex-algo-srlg-top { + description + "Top level grouping for flex algo shared risk link groups."; + + container srlgs { + description + "Shared risk link groups attributes"; + list srlg { + key "name"; + description + "List of shared risk link groups"; + + leaf name { + type leafref { + path "../config/name"; + } + description + "The SRLG group identifier"; + } + + container config { + description + "Configuration parameters related to the SRLG"; + uses flex-algo-srlg-config; + } + + container state { + config false; + description + "State parameters related to the SRLG"; + uses flex-algo-srlg-config; + } + } + } + } + + grouping flex-algo-admin-group-config { + description + "configuration data for MPLS link admin groups"; + + leaf admin-group-name { + type string; + description + "name for mpls admin-group"; + } + + leaf bit-position { + type uint32; + description + "bit-position value for mpls admin-group. The value + for the admin group is an integer that represents one + of the bit positions in the admin-group bitmask. Values + between 0 and 31 are interpreted as the original limit + of 32 admin groups. Values >=32 are interpreted as + extended admin group values as per RFC7308."; + } + } + + grouping flex-algo-admin-groups-top { + description + "top-level mpls admin-groups config + and state containers"; + + container flex-algo-admin-groups { + description + "Top-level container for admin-groups configuration + and state"; + + list admin-group { + key "admin-group-name"; + description + "configuration of value to name mapping + for mpls affinities/admin-groups"; + + leaf admin-group-name { + type leafref { + path "../config/admin-group-name"; + } + description + "name for mpls admin-group"; + } + container config { + description + "Configurable items for admin-groups"; + uses flex-algo-admin-group-config; + } + + container state { + config false; + description + "Operational state for admin-groups"; + uses flex-algo-admin-group-config; + } + } + } + } + + grouping flex-algo-top { + description + "Top level grouping for Flexible Algorithm Definitions"; + + container flex-algorithm { + description "Flex Algorithms definitions and the attributes"; + + container flex-algorithm-definition { + description "Flexible Algorithms and their definitions"; + uses flex-algo-definition-top; + } + + container flex-algo-global-attributes { + description "Flexible Algorithm global attributes"; + uses flex-algo-srlg-top; + uses flex-algo-admin-groups-top; + } + + container flex-algo-interface-attributes { + description "Flexible Algorithm attributes for interfaces"; + uses flex-algo-interface-attributes-top; + } + } + } + + augment "/oc-ni:network-instances/oc-ni:network-instance" { + description + "List of Flexible Algorithms and their definitions"; + + uses flex-algo-top; + } +} + diff --git a/release/models/gnpsi/.spec.yml b/release/models/gnpsi/.spec.yml new file mode 100644 index 000000000..a38191a7f --- /dev/null +++ b/release/models/gnpsi/.spec.yml @@ -0,0 +1,6 @@ +- name: openconfig-gnpsi + docs: + - yang/gnpsi/openconfig-gnpsi-types.yang + build: + - yang/gnpsi/openconfig-gnpsi-types.yang + run-ci: false diff --git a/release/models/gnpsi/openconfig-gnpsi-types.yang b/release/models/gnpsi/openconfig-gnpsi-types.yang new file mode 100644 index 000000000..ef241b635 --- /dev/null +++ b/release/models/gnpsi/openconfig-gnpsi-types.yang @@ -0,0 +1,38 @@ +module openconfig-gnpsi-types { + yang-version "1"; + namespace "http://openconfig.net/yang/gnpsi/types"; + prefix "oc-gnpsit"; + + import openconfig-extensions { + prefix oc-ext; + } + + import openconfig-grpc-types { + prefix oc-grpct; + } + + organization + "OpenConfig working group"; + contact + "www.openconfig.net"; + + description + "This module adds gRPC server type relating to gNPSI running on + a network device."; + + oc-ext:openconfig-version "0.1.0"; + oc-ext:catalog-organization "openconfig"; + oc-ext:origin "openconfig"; + + revision 2024-05-29 { + description + "Initial revision."; + reference "0.1.0"; + } + + identity GNPSI { + base oc-grpct:GRPC_SERVICE; + description + "gNMI: gRPC Network Management Interface"; + } +} diff --git a/release/models/gnsi/.spec.yml b/release/models/gnsi/.spec.yml new file mode 100644 index 000000000..d8c79b235 --- /dev/null +++ b/release/models/gnsi/.spec.yml @@ -0,0 +1,10 @@ +- name: openconfig-system-gnsi + build: + - yang/system/openconfig-system.yang + - yang/gnsi/openconfig-gnsi.yang + - yang/gnsi/openconfig-gnsi-acctz.yang + - yang/gnsi/openconfig-gnsi-authz.yang + - yang/gnsi/openconfig-gnsi-certz.yang + - yang/gnsi/openconfig-gnsi-credentialz.yang + - yang/gnsi/openconfig-gnsi-pathz.yang + run-ci: true diff --git a/release/models/gnsi/openconfig-gnsi-acctz.yang b/release/models/gnsi/openconfig-gnsi-acctz.yang new file mode 100644 index 000000000..d95ccccfb --- /dev/null +++ b/release/models/gnsi/openconfig-gnsi-acctz.yang @@ -0,0 +1,245 @@ +module openconfig-gnsi-acctz { + yang-version 1; + namespace "https://github.com/openconfig/yang/gnsi/acctz"; + prefix oc-gnsi-acctz; + + import openconfig-extensions { prefix oc-ext; } + import openconfig-system { + prefix oc-sys; + } + import openconfig-system-grpc { + prefix oc-sys-grpc; + } + import openconfig-types { + prefix oc-types; + } + import openconfig-yang-types { + prefix oc-yang; + } + import openconfig-gnsi { + prefix oc-gnsi; + } + organization + "OpenConfig Working Group"; + + contact + "OpenConfig working group + netopenconfig@googlegroups.com"; + + description + "This module provides counters of gNSI accountZ requests and responses and + the quantity of data transferred."; + + oc-ext:openconfig-version "0.2.0"; + + revision 2024-02-13 { + description + "Major style updates and move to openconfig/public from openconfig/gnsi. + Last commit at + https://github.com/openconfig/gnsi/commit/347935aac66135d5649dadb9583ed0914578aab0"; + reference "0.2.0"; + } + + revision 2023-12-01 { + description + "Initial revision."; + reference "0.1.0"; + } + + typedef cmd-service { + description "enum CommandService.CmdServiceType"; + type enumeration { + enum UNSPECIFIED { + value 0; + } + enum SHELL { + value 1; + } + enum CLI { + value 2; + } + enum WEBUI { + value 3; + } + enum RESTCONF { + value 4; + } + enum NETCONF { + value 5; + } + } + } + typedef grpc-service { + description "enum GrpcService.GrpcServiceType"; + type enumeration { + enum UNSPECIFIED { + value 0; + } + enum GNMI { + value 1; + } + enum GNOI { + value 2; + } + enum GNSI { + value 3; + } + enum GRIBI { + value 4; + } + enum P4RT { + value 5; + } + } + } + typedef service-request { + description "enum RecordResponse.service_request"; + type enumeration { + enum CMD_SERVICE { + value 4; + } + enum GRPC_SERVICE { + value 5; + } + } + } + typedef service-type { + description "enum cmd or grpc service type"; + type union { + type cmd-service; + type grpc-service; + } + } + + // gnsi.acctz client statistics + grouping client-counters { + 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; + description + "The total number of RecordRequest RPCs that have been received."; + } + leaf record-responses { + type oc-yang:counter64; + description + "The total number of RecordResponse RPCs that have been sent."; + } + } + } + + // gnsi.acctz producer statistics + grouping source-counters { + description + "A collection of counters for gNSI.acctz record production per + service request type."; + + container source-counters { + description + "A collection of counters for gNSI.acctz record production per + service request type."; + list source-records { + key "service type"; + // unique "service type"; + description + "The total number of times the gNSI.authz module denied access + to a RPC."; + + leaf service { + type leafref { + path "../state/service"; + } + description + "service request type for the gNSI.acctz record."; + } + leaf type { + type leafref { + path "../state/type"; + } + description + "service request application enum for the gNSI.acctz record."; + } + + container state { + description + "Operational state for gNSI.acctz counters of record production per + service request type."; + leaf service { + type service-request; + description + "service request type for the gNSI.acctz record."; + } + leaf type { + type service-type; + description + "service request application enum for the gNSI.acctz record."; + } + leaf records { + type oc-yang:counter64; + description + "The total number of records produced for the service-request + type."; + } + } + } + } + } + + grouping grpc-server-acctz-counters { + description + "A collection of counters from the gNSI.acctz module."; + + container acctz-counters { + 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)."; + } + + uses client-counters; + } + + uses source-counters; + } + } + + // Augments section. + 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."; + + uses grpc-server-acctz-counters; + } +} diff --git a/release/models/gnsi/openconfig-gnsi-authz.yang b/release/models/gnsi/openconfig-gnsi-authz.yang new file mode 100644 index 000000000..870fcac2b --- /dev/null +++ b/release/models/gnsi/openconfig-gnsi-authz.yang @@ -0,0 +1,212 @@ +module openconfig-gnsi-authz { + yang-version 1; + namespace "https://github.com/openconfig/yang/gnsi/authz"; + prefix oc-gnsi-authz; + + import openconfig-extensions { prefix oc-ext; } + import openconfig-system { + prefix oc-sys; + } + import openconfig-system-grpc { + prefix oc-sys-grpc; + } + import openconfig-types { + prefix oc-types; + } + import openconfig-yang-types { + prefix oc-yang; + } + import openconfig-gnsi { + prefix oc-gnsi; + } + organization + "OpenConfig Working Group"; + + contact + "OpenConfig working group + netopenconfig@googlegroups.com"; + + description + "This module provides a data model for the metadata of the gRPC + authorization policies installed on a networking device."; + + oc-ext:openconfig-version "0.4.0"; + + revision 2024-02-13 { + description + "Major style updates and move to openconfig/public from openconfig/gnsi. + Last commit at + https://github.com/openconfig/gnsi/commit/347935aac66135d5649dadb9583ed0914578aab0"; + reference "0.4.0"; + } + + revision 2022-10-30 { + description + "Adds success/failure counters."; + reference "0.3.0"; + } + + revision 2022-08-01 { + description + "Single authz policy."; + reference "0.2.0"; + } + + revision 2022-01-17 { + description + "Initial revision."; + reference "0.1.0"; + } + + typedef version { + type string; + description + "The version ID of the gRPC authorization policy as provided by + the gRPC Authorization Policy Manager when the policy was pushed. + This leaf persists through a reboot."; + } + + typedef created-on { + type oc-types:timeticks64; + description + "The creation time of the gRPC authorization policy as reported by + the gRPC Authorization Policy manager when the policy was pushed + to the device. This value is reported as nanoseconds since epoch + (January 1st, 1970 00:00:00 GMT). This leaf persists through + a reboot."; + } + + // gRPC server authorization policy related definitions. + grouping counters { + description + "A collection of counters that were collected by the gNSI.authz + module while evaluating access to a RPC."; + + leaf access-rejects { + type oc-yang:counter64; + description + "The total number of times the gNSI.authz module denied access + to a RPC."; + } + leaf last-access-reject { + type oc-types:timeticks64; + description + "A timestamp of the last time the gNSI.authz denied access to + a RPC."; + } + leaf access-accepts { + type oc-yang:counter64; + description + "The total number of times the gNSI.authz module allowed access + to a RPC."; + } + leaf last-access-accept { + type oc-types:timeticks64; + description + "A timestamp of the last time the gNSI.authz allowed access to + a RPC."; + } + } + + grouping grpc-server-user-authz-policy-success-failure-counters { + description + "A collection of counters collected by the gNSI.authz module."; + + container rpcs { + description + "A collection of counters collected by the gNSI.authz module + for each RPC separately."; + + list rpc { + description + "A collection of counters collected by the gNSI.authz module + for a RPC identified by the `name`."; + + key "name"; + leaf name { + type leafref { + path "../state/name"; + } + description + "The name of the RPC the counters were collected for. + + The name MUST match the HTTP/2 Path header value in + https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests + + For example, + /gnmi.gNMI/Subscribe + /gnoi.healthz.Healthz/Get + "; + } + container state { + description + "operational state for authz policy success/failure counters."; + leaf name { + type string; + description + "The name of the RPC the counters were collected for. + + The name MUST match the HTTP/2 Path header value in + https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests + + For example, + /gnmi.gNMI/Subscribe + /gnoi.healthz.Healthz/Get + "; + } + uses counters; + } + } + } + } + + grouping grpc-server-authz-policy-success-failure-counters { + description + "A collection of counters collected by the gNSI.authz module."; + + container authz-policy-counters { + description + "A collection of counters collected by the gNSI.authz module."; + config false; + + uses grpc-server-user-authz-policy-success-failure-counters; + } + } + + grouping grpc-server-authz-policy-state { + description + "gNMI server's gRPC authorization policy freshness-related data."; + + leaf grpc-authz-policy-version { + type version; + description + "The version of the gRPC authorization policy that is used by + this system."; + } + leaf grpc-authz-policy-created-on { + type created-on; + description + "The timestamp of the moment when the gRPC authorization policy + that is currently used by this system was created."; + } + } + + // Augments section. + + augment "/oc-sys:system/oc-sys:aaa/oc-sys:authorization/" + + "oc-sys:state" { + description + "A system's gRPC authorization policy freshness information."; + + uses grpc-server-authz-policy-state; + } + + 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 while evaluating access to a gRPC server using + the gNSI.authz authorization policy."; + + uses grpc-server-authz-policy-success-failure-counters; + } +} diff --git a/release/models/gnsi/openconfig-gnsi-certz.yang b/release/models/gnsi/openconfig-gnsi-certz.yang new file mode 100644 index 000000000..0b303cdc0 --- /dev/null +++ b/release/models/gnsi/openconfig-gnsi-certz.yang @@ -0,0 +1,215 @@ +module openconfig-gnsi-certz { + yang-version 1; + namespace "https://github.com/openconfig/yang/gnsi/certz"; + prefix oc-gnsi-certz; + + import openconfig-extensions { prefix oc-ext; } + import openconfig-system { + prefix oc-sys; + } + import openconfig-system-grpc { + prefix oc-sys-grpc; + } + import openconfig-types { + prefix oc-types; + } + import openconfig-yang-types { + prefix oc-yang; + } + import openconfig-gnsi { + prefix oc-gnsi; + } + organization + "OpenConfig Working Group"; + + contact + "OpenConfig working group + netopenconfig@googlegroups.com"; + + description + "This module provides a data model for the metadata of gRPC credentials + installed on a networking device."; + + oc-ext:openconfig-version "0.6.0"; + + revision 2024-03-05 { + description + "rename access/reject counters"; + reference "0.6.0"; + } + + revision 2024-02-13 { + description + "Major style updates and move to openconfig/public from openconfig/gnsi. + Last commit at + https://github.com/openconfig/gnsi/commit/347935aac66135d5649dadb9583ed0914578aab0"; + reference "0.5.0"; + } + + revision 2023-08-24 { + description + "Adds ssl-profile-id leaf"; + reference "0.4.0"; + } + + revision 2023-05-10 { + description + "Adds authentication policy freshness information."; + reference "0.3.0"; + } + + revision 2022-10-30 { + description + "Adds success/failure counters."; + reference "0.2.0"; + } + + revision 2022-09-20 { + description + "Initial revision."; + reference "0.1.0"; + } + + typedef version { + type string; + description + "The version ID of the credential as provided by the credential + manager when the credential was pushed. This leaf persists through + a reboot."; + } + + typedef created-on { + type oc-types:timeticks64; + description + "The creation time of the credential as reported by the credential + manager when the credential was pushed to the device. This value is + reported as nanoseconds since epoch (January 1st, 1970 00:00:00 GMT). + This leaf persists through a reboot."; + } + // gRPC server related definitions. + // Success/failure counters. + grouping grpc-server-certz-counters { + description + "A collection of counters that were collected while evaluating + access to the gRPC server."; + + container counters { + config false; + description + "A collection of counters that were collected by the gRPC during + the authentication process."; + + leaf connection-rejects { + type oc-yang:counter64; + description + "The total number of times that gRPC clients have failed + in establishing a connection to the server."; + } + leaf last-connection-reject { + type oc-types:timeticks64; + description + "A timestamp of the last time a gRPC client failed + in establishing a connection to the server."; + } + leaf connection-accepts { + type oc-yang:counter64; + description + "The total number of times that gRPC clients have succeeded + in establishing a connection to the server."; + } + leaf last-connection-accept { + type oc-types:timeticks64; + description + "A timestamp of the last time a gRPC client succeeded + in establishing a connection to the server."; + } + } + } + + // TODO(earies): move to a system-wide subtree: + // https://github.com/openconfig/public/issues/1049 + grouping grpc-server-credentials-state { + description + "gRPC server credentials freshness-related data."; + + leaf certificate-version { + type version; + description + "The version of the certificate (and associated + private key) that is used by this gRPC server."; + } + leaf certificate-created-on { + type created-on; + description + "The timestamp of the moment when the certificate + (and associated private key) that is currently used + by this gRPC server was created."; + } + leaf ca-trust-bundle-version { + type version; + description + "The version of the bundle of the Certificate + Authority certificates a.k.a. trust bundle used by + this gRPC server."; + } + leaf ca-trust-bundle-created-on { + type created-on; + description + "The timestamp of the moment when the bundle of + the Certificate Authority certificates (a.k.a. + trust bundle) was created."; + } + leaf certificate-revocation-list-bundle-version { + type version; + description + "The version of the Certificate Revocation List bundle used by + this gRPC server."; + } + leaf certificate-revocation-list-bundle-created-on { + type created-on; + description + "The timestamp of the moment when the Certificate Revocation + List bundle was created."; + } + leaf authentication-policy-version { + type version; + description + "The version of the authentication policy that is used by + this gRPC server."; + } + leaf authentication-policy-created-on { + type created-on; + description + "The timestamp of the moment when the authentication policy + that is currently used by this gRPC server was created."; + } + // TODO(earies): Consider aligning this with grpc-server key after moving + // to a system-wide subtree: + // https://github.com/openconfig/public/issues/1050 + leaf ssl-profile-id { + type string; + description + "The ID of this gRPC server's SSL profile + as used by the gNSI Certz service"; + } + } + + // Augments section. + + augment "/oc-sys:system/oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server/" + + "oc-sys-grpc:state" { + when "../config[contains(services, 'oc-gnsi:GNSI')]/enable = 'true'"; + description + "A gRPC server credentials freshness information."; + + uses grpc-server-credentials-state; + } + + augment "/oc-sys:system/oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server/" + + "oc-sys-grpc:state" { + when "../config[contains(services, 'oc-gnsi:GNSI')]/enable = 'true'"; + uses grpc-server-certz-counters; + description + "gNSI certz server access counters."; + } +} diff --git a/release/models/gnsi/openconfig-gnsi-credentialz.yang b/release/models/gnsi/openconfig-gnsi-credentialz.yang new file mode 100644 index 000000000..cf611fd9c --- /dev/null +++ b/release/models/gnsi/openconfig-gnsi-credentialz.yang @@ -0,0 +1,335 @@ +module openconfig-gnsi-credentialz { + yang-version 1; + namespace "https://github.com/openconfig/yang/gnsi/credentialz"; + prefix oc-gnsi-credz; + + import openconfig-extensions { prefix oc-ext; } + import openconfig-system { + prefix oc-sys; + } + import openconfig-types { + prefix oc-types; + } + import openconfig-yang-types { + prefix oc-yang; + } + import openconfig-system-grpc { + prefix oc-sys-grpc; + } + import openconfig-gnsi { + prefix oc-gnsi; + } + organization + "OpenConfig Working Group"; + + contact + "OpenConfig working group + netopenconfig@googlegroups.com"; + + description + "This module provides a data model for the metadata of SSH and console + credentials installed on a networking device. + + The following leaves MUST be treated as invalid when the gNSI server is + enabled and credentialz is supported by the implementation: + /system/aaa/authentication/users/user/config/ssh-key + /system/aaa/authentication/users/user/state/ssh-key + /system/aaa/authentication/users/user/config/password + /system/aaa/authentication/users/user/state/password + /system/aaa/authentication/users/user/config/password-hashed + /system/aaa/authentication/users/user/state/password-hashed"; + + oc-ext:openconfig-version "0.7.0"; + + revision 2024-09-10 { + description + "Adding GLOME capabilities."; + reference "0.7.0"; + } + + revision 2024-02-13 { + description + "Major style updates and move to openconfig/public from openconfig/gnsi. + Last commit at + https://github.com/openconfig/gnsi/commit/347935aac66135d5649dadb9583ed0914578aab0"; + reference "0.6.0"; + } + + revision 2024-01-05 { + description + "Fix typo in YANG leaves"; + reference "0.5.0"; + } + + revision 2023-10-03 { + description + "Added state leaves for admin-user"; + reference "0.4.0"; + } + + revision 2023-08-18 { + description + "Fixed the canonical order of config field."; + reference "0.3.0"; + } + + revision 2022-10-30 { + description + "Adds success/failure counters."; + reference "0.2.0"; + } + + revision 2022-08-22 { + description + "Initial revision."; + reference "0.1.0"; + } + + typedef version { + type string; + description + "The version ID of the credential as provided by the credential + manager when the credential was pushed. This leaf persists through + a reboot."; + } + + typedef created-on { + type oc-types:timeticks64; + description + "The creation time of the credential as reported by the credential + manager when the credential was pushed to the device. This value is + reported as nanoseconds since epoch (January 1st, 1970 00:00:00 GMT). + This leaf persists through a reboot."; + } + + // SSH server related definitions. + + grouping ssh-server-credentials-version { + description + "SSH server credentials freshness-related data."; + + leaf active-trusted-user-ca-keys-version { + type version; + description + "The version of the Certificate Authority keys."; + } + + leaf active-trusted-user-ca-keys-created-on { + type created-on; + description + "The timestamp of the moment when the trusted user CA keys + were created."; + } + + leaf active-host-certificate-version { + type version; + description + "The version of the host certificate."; + } + + leaf active-host-certificate-created-on { + type created-on; + description + "The timestamp of the moment when the host certificate + was created."; + } + + leaf active-host-key-version { + type version; + description + "The version of the host public key."; + } + + leaf active-host-key-created-on { + type created-on; + description + "The timestamp of the moment when the host key was + created."; + } + } + + // GLOME related definitions. + + grouping glome-key-version { + description + "Version identifier for the configured GLOME key."; + + leaf active-glome-key-version { + type version; + description + "The version of the GLOME key."; + } + + leaf active-glome-key-created-on { + type created-on; + description + "The timestamp of the moment when the GLOME key + was created."; + } + } + + // Success/failure counters. + grouping counters { + description + "A collection of counters that were collected while evaluating + access to the target."; + + container counters { + config false; + description + "A collection of counters collected while authorizing users + accessing the target."; + leaf access-rejects { + type oc-yang:counter64; + description + "The total number of times access to the target has been + denied."; + } + leaf last-access-reject { + type oc-types:timeticks64; + description + "A timestamp of the last time access to the target has been + denied."; + } + leaf access-accepts { + type oc-yang:counter64; + description + "The total number of times access to the target has been + allowed."; + } + leaf last-access-accept { + type oc-types:timeticks64; + description + "A timestamp of the last time access to the target has been + allowed."; + } + } + } + // System role SSH related definitions. + + grouping user-ssh-credentials-version { + description + "System role credentials freshness-related data."; + + leaf authorized-principals-list-version { + type version; + description + "The version of the list of authorized principals currently + associated with this system role."; + } + + leaf authorized-principals-list-created-on { + type created-on; + description + "The timestamp of the moment the currently used list of + authorized principals has been created."; + } + + leaf authorized-keys-list-version { + type version; + description + "The version of the list of authorized keys that is currently + associated with this system role."; + } + + leaf authorized-keys-list-created-on { + type created-on; + description + "The timestamp of the moment the currently used list of + authorized keys has been created."; + } + } + + grouping console-config-state { + description + "Console-related configuration and state."; + container console { + description + "Console-related configuration and state."; + + container config { + description + "Console-related configuration."; + } + + container state { + config false; + description + "Console-related state."; + + uses counters; + + leaf enabled { + type boolean; + description + "Whether GLOME is enabled or not."; + } + } + } + } + + // System role console related definitions. + + grouping user-console-credentials-version { + description + "System role credentials freshness-related data."; + + leaf password-version { + type version; + description + "The version of the password that is currently used to + authenticate this user account."; + } + + leaf password-created-on { + type created-on; + description + "The timestamp of the moment the currently used password has + been created."; + } + } + + // Augments section. + + augment "/oc-sys:system" { + when "oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server" + + "/oc-sys-grpc:config[contains(oc-sys-grpc:services, 'oc-gnsi:GNSI')]" + + "/oc-sys-grpc:enable = 'true'"; + description + "Console credentials freshness data."; + + uses console-config-state; + } + augment "/oc-sys:system/oc-sys:ssh-server/oc-sys:state" { + when "../../oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server" + + "/oc-sys-grpc:config[contains(oc-sys-grpc:services, 'oc-gnsi:GNSI')]" + + "/oc-sys-grpc:enable = 'true'"; + description + "SSH server credentials freshness data."; + + uses ssh-server-credentials-version; + uses counters; + } + augment "/oc-sys:system/oc-sys:aaa/oc-sys:authentication/oc-sys:users/" + + "oc-sys:user/oc-sys:state" { + when "../../../../../oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server" + + "/oc-sys-grpc:config[contains(oc-sys-grpc:services, 'oc-gnsi:GNSI')]" + + "/oc-sys-grpc:enable = 'true'"; + description + "A system role credentials freshness information."; + + uses user-console-credentials-version; + uses user-ssh-credentials-version; + } + augment "/oc-sys:system/oc-sys:aaa/oc-sys:authentication/oc-sys:admin-user/" + + "oc-sys:state" { + when "../../../../oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server" + + "/oc-sys-grpc:config[contains(oc-sys-grpc:services, 'oc-gnsi:GNSI')]" + + "/oc-sys-grpc:enable = 'true'"; + description + "A system role credentials freshness information."; + + uses user-console-credentials-version; + uses user-ssh-credentials-version; + } +} diff --git a/release/models/gnsi/openconfig-gnsi-pathz.yang b/release/models/gnsi/openconfig-gnsi-pathz.yang new file mode 100644 index 000000000..962ea79c4 --- /dev/null +++ b/release/models/gnsi/openconfig-gnsi-pathz.yang @@ -0,0 +1,331 @@ +module openconfig-gnsi-pathz { + yang-version 1; + namespace "https://github.com/openconfig/yang/gnsi/pathz"; + prefix oc-gnsi-pathz; + + import openconfig-extensions { prefix oc-ext; } + import openconfig-system { + prefix oc-sys; + } + import openconfig-system-grpc { + prefix oc-sys-grpc; + } + import openconfig-types { + prefix oc-types; + } + import openconfig-yang-types { + prefix oc-yang; + } + import openconfig-gnsi { + prefix oc-gnsi; + } + + organization + "OpenConfig Working Group"; + + contact + "OpenConfig working group + netopenconfig@googlegroups.com"; + + description + "This module provides a data model for the metadata of + OpenConfig-path-based authorization policies installed on a networking + device."; + + oc-ext:openconfig-version "0.3.0"; + + revision 2024-02-13 { + description + "Major style updates and move to openconfig/public from openconfig/gnsi. + Last commit at + https://github.com/openconfig/gnsi/commit/347935aac66135d5649dadb9583ed0914578aab0"; + reference "0.3.0"; + } + + revision 2022-10-30 { + description + "Adds success/failure counters."; + reference "0.2.0"; + } + + revision 2022-01-17 { + description + "Initial revision."; + reference "0.1.0"; + } + + typedef version { + type string; + description + "The version ID of the OpenConfig-path-based authorization policy + as provided by the OpenConfig-path-based Authorization Policy + Manager when the policy was pushed. This leaf persists through + a reboot."; + } + + typedef created-on { + type oc-types:timeticks64; + description + "The creation time of the OpenConfig-path-based authorization policy + as reported by the OpenConfig-path-based Authorization Policy + manager when the policy was pushed to the device. This value is + reported as nanoseconds since epoch (January 1st, 1970 00:00:00 GMT). + This leaf persists through a reboot."; + } + + // gRPC server related definitions. + grouping counters { + description + "A collection of counters that were collected by the gNSI.pathz + module while evaluating access to an OpenConfig path."; + + leaf access-rejects { + type oc-yang:counter64; + description + "The total number of times the gNSI.pathz module denied access + to an OpenConfig path."; + } + leaf last-access-reject { + type oc-types:timeticks64; + description + "A timestamp of the last time the gNSI.pathz denied access to + an OpenConfig path"; + } + leaf access-accepts { + type oc-yang:counter64; + description + "The total number of times the gNSI.pathz module allowed access + to an OpenConfig path."; + } + leaf last-access-accept { + type oc-types:timeticks64; + description + "A timestamp of the last time the gNSI.pathz allowed access to + an OpenConfig path"; + } + } + + grouping gnmi-pathz-policy-success-failure-counters { + description + "A collection of counters collected by the gNSI.pathz module."; + + container gnmi-pathz-policy-counters { + config false; + description + "A collection of per-OpenConfig path counters."; + + uses gnmi-pathz-policy-xpath-success-failure-counters; + } + } + + grouping gnmi-pathz-policy-xpath-success-failure-counters { + description + "A collection of per-OpenConfig path counters."; + + container paths { + description + "Container for a collection of per-OpenConfig path counters."; + + list path { + description + "List for a collection of per-OpenConfig path counters."; + key "name"; + leaf name { + type leafref { + path "../state/name"; + } + description + "A OpenConfig schema path the counter were + collected for. + + For documentation on the naming of paths, see + https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-path-conventions.md"; + } + container state { + description + "Operational state for per-OpenConfig path counters."; + leaf name { + type string; + description + "A OpenConfig schema path the counter were + collected for. + + For documentation on the naming of paths, see + https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-path-conventions.md"; + } + container reads { + description + "The counter were collected while + performing a read operation on the + schema path."; + uses counters; + } + container writes { + description + "The counter were collected while + performing a write operation on the + schema path."; + uses counters; + } + } + } + } + } + + grouping grpc-server-gnmi-pathz-policy-state { + description + "gNMI server OpenConfig-path-based authorization policy + freshness-related data."; + + leaf gnmi-pathz-policy-version { + type version; + description + "The version of the OpenConfig-path-based authorization policy + that is used by this gNMI server."; + } + leaf gnmi-pathz-policy-created-on { + type created-on; + description + "The timestamp of the moment when the OpenConfig-path-based + authorization policy that is currently used by this gNMI server + was created."; + } + } + + grouping gnmi-pathz-policy-state { + description + "Operational state data for a gNMI OpenConfig-path-based + authorization policy."; + leaf instance { + type enumeration { + enum ACTIVE { + value 1; + description + "The policy that is currently used by the gNMI service + to authorize access."; + } + enum SANDBOX { + value 2; + description + "The most recent policy that has been uploaded during + the Rotation() RPC. If there is no Rotate() RPC in + progress, then referring to this instance of the policy + will result in an error."; + } + } + description + "The instance identifier of the gNMI OpenConfig-path-based + authorization policy."; + } + leaf version { + type version; + description + "The version of the gNMI OpenConfig-path-based authorization + policy."; + } + leaf created-on { + type created-on; + description + "The timestamp of the moment when the policy was + created."; + } + } + + grouping gnmi-pathz-policies { + description + "Collection of OpenConfig-path-based authorization policies that + have been installed on the device using the gNSI OpenConfig-path- + based authorization policy management service. + Each OpenConfig-path-based authorization policy listed here is + identified by its status (either ACTIVE or SANDBOX) and has its + version and creation date/time listed."; + + container policies { + config false; + description + "Information about freshness of an OpenConfig-path-based + authorization policy that have been installed + on the device using the gNSI OpenConfig-path-based + authorization policy management service."; + + list policy { + key "instance"; + ordered-by system; + description + "Information about the OpenConfig-path-based authorization + policy that is identified by the `instance`."; + leaf instance { + type leafref { + path "../state/instance"; + } + description + "The ID of the OpenConfig-path-based authorization + policy."; + } + container state { + description + "Operational state data for an OpenConfig-path-based + authorization policies."; + + uses gnmi-pathz-policy-state; + } + } + } + } + + grouping system-gnmi-pathz-policies { + description + "Collection of OpenConfig-path-based authorization policies that + have been installed on the device using the gNSI OpenConfig-path- + based authorization policy management service. + Each policy listed here is identified by its status (either ACTIVE + or SANDBOX) and has its version and creation date/time listed."; + + container gnmi-pathz-policies { + config false; + description + "Collection of OpenConfig-path-based authorization policies that + have been installed on the device using the gNSI OpenConfig- + path-based authorization policy management service. + Each policy listed here is identified by its status (either + ACTIVE or SANDBOX) and has its version and creation date/time + listed."; + + uses gnmi-pathz-policies; + } + } + + // Augments section. + + augment "/oc-sys:system" { + when "oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server" + + "/oc-sys-grpc:config[contains(oc-sys-grpc:services, 'oc-gnsi:GNSI')]" + + "/oc-sys-grpc:enable = 'true'"; + description + "Collection of OpenConfig-path-based authorization policies that + have been installed on the device using the gNSI OpenConfig-path- + based authorization policy management service. + Each policy listed here is identified by its status (either ACTIVE + or SANDBOX) and has its version and creation date/time listed."; + + uses system-gnmi-pathz-policies; + } + augment "/oc-sys:system/oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server" + + "/oc-sys-grpc:state" { + when "../config[contains(services, 'oc-gnsi:GNSI')]/enable = 'true'"; + description + "A gNMI server OpenConfig-path-based authorization policy freshness + information."; + + uses grpc-server-gnmi-pathz-policy-state; + } + augment "/oc-sys:system/oc-sys-grpc:grpc-servers/oc-sys-grpc:grpc-server" { + when "oc-sys-grpc:config[contains(oc-sys-grpc:services, 'oc-gnsi:GNSI')]" + + "/oc-sys-grpc:enable = 'true'"; + description + "A gNMI server OpenConfig-path-based authorization policy + success/failure counters."; + + uses gnmi-pathz-policy-success-failure-counters; + } +} diff --git a/release/models/gnsi/openconfig-gnsi.yang b/release/models/gnsi/openconfig-gnsi.yang new file mode 100644 index 000000000..0c10a2a0b --- /dev/null +++ b/release/models/gnsi/openconfig-gnsi.yang @@ -0,0 +1,40 @@ +module openconfig-gnsi { + yang-version "1"; + + prefix "oc-gnsi"; + + namespace "http://openconfig.net/yang/gnsi"; + + import openconfig-extensions { prefix oc-ext; } + import openconfig-system-grpc { prefix oc-grpc; } + + organization + "OpenConfig Working Group"; + + contact + "OpenConfig working group + netopenconfig@googlegroups.com"; + + description + "This module defines a set of extensions that provide gNSI (the gRPC + Network Security Interface) specific extensions to the OpenConfig data models. + Specifically, the parameters for the configuration of the service, and + configuration and state are added. + + The gNSI protobufs and documentation are published at + https://github.com/openconfig/gnsi."; + + oc-ext:openconfig-version "0.1.0"; + + revision 2024-02-13 { + description + "Initial revision."; + reference "0.1.0"; + } + + identity GNSI { + base "oc-grpc:GRPC_SERVICE"; + description + "gNSI: gRPC Network Security Interface"; + } +} diff --git a/release/models/grpc/.spec.yml b/release/models/grpc/.spec.yml new file mode 100644 index 000000000..5e9761d03 --- /dev/null +++ b/release/models/grpc/.spec.yml @@ -0,0 +1,6 @@ +- name: openconfig-grpc + docs: + - yang/grpc/openconfig-grpc-types.yang + build: + - yang/grpc/openconfig-grpc-types.yang + run-ci: false diff --git a/release/models/grpc/openconfig-grpc-types.yang b/release/models/grpc/openconfig-grpc-types.yang new file mode 100644 index 000000000..d9944070b --- /dev/null +++ b/release/models/grpc/openconfig-grpc-types.yang @@ -0,0 +1,36 @@ +module openconfig-grpc-types { + yang-version "1"; + namespace "http://openconfig.net/yang/grpc/types"; + prefix "oc-grpct"; + + import openconfig-extensions { + prefix oc-ext; + } + + organization + "OpenConfig working group"; + contact + "www.openconfig.net"; + + description + "This module adds gRPC server type relating to gRPC services running on + a network device. + The GRPC_SERVICE identity is used to create an extensible list of services + that can be instantiated, with a base set defined in this module. New + services can extend the identity to be included in the list."; + + oc-ext:openconfig-version "0.1.0"; + oc-ext:catalog-organization "openconfig"; + oc-ext:origin "openconfig"; + + revision "2024-05-29" { + description + "Initial revision."; + reference "0.1.0"; + } + + identity GRPC_SERVICE { + description + "Base identity for a gRPC-based service."; + } +} diff --git a/release/models/interfaces/.spec.yml b/release/models/interfaces/.spec.yml index 9535719e6..2e66f339e 100644 --- a/release/models/interfaces/.spec.yml +++ b/release/models/interfaces/.spec.yml @@ -8,6 +8,7 @@ - yang/interfaces/openconfig-if-poe.yang - yang/interfaces/openconfig-if-ip-ext.yang - yang/interfaces/openconfig-if-8021x.yang + - yang/interfaces/openconfig-if-rates.yang - yang/vlan/openconfig-vlan.yang - yang/interfaces/openconfig-if-tunnel.yang - yang/platform/openconfig-platform-port.yang @@ -26,6 +27,7 @@ - yang/interfaces/openconfig-if-poe.yang - yang/interfaces/openconfig-if-ip-ext.yang - yang/interfaces/openconfig-if-8021x.yang + - yang/interfaces/openconfig-if-rates.yang - yang/vlan/openconfig-vlan.yang - yang/interfaces/openconfig-if-tunnel.yang - yang/platform/openconfig-platform-port.yang diff --git a/release/models/interfaces/openconfig-if-ip.yang b/release/models/interfaces/openconfig-if-ip.yang index a0b74fee9..8aebaaa06 100644 --- a/release/models/interfaces/openconfig-if-ip.yang +++ b/release/models/interfaces/openconfig-if-ip.yang @@ -44,7 +44,26 @@ module openconfig-if-ip { Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info)."; - oc-ext:openconfig-version "3.3.0"; + oc-ext:openconfig-version "3.5.1"; + + revision "2024-03-13" { + description + "Update in-pkts and out-pkts descriptions."; + reference "3.5.1"; + } + + revision "2023-08-14" { + description + "Add multicast counters for IPv4, IPv6."; + reference "3.5.0"; + } + +revision "2023-06-30" { + description + "Deprecate IPv6 router advertisment config suppress leaf and add config + mode leaf."; + reference "3.4.0"; + } revision "2023-04-12" { description @@ -54,7 +73,7 @@ module openconfig-if-ip { revision "2023-02-06" { description - "Add ipv6 link-local configuration."; + "Add IPv6 link-local configuration."; reference "3.2.0"; } @@ -228,7 +247,8 @@ module openconfig-if-ip { type oc-yang:counter64; description "The total number of IP packets received for the specified - address family, including those received in error"; + address family, including all IP unicast, multicast, + broadcast and error packets."; reference "RFC 4293 - Management Information Base for the Internet Protocol (IP)"; @@ -245,6 +265,31 @@ module openconfig-if-ip { Internet Protocol (IP)"; } + leaf in-multicast-pkts { + type oc-yang:counter64; + description + "The number of IP packets received for the specified + address family that are multicast packets. + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 4293: Management Information Base for the Internet + Protocol (IP) - ipSystemStatsHCInMcastPkts"; + } + + leaf in-multicast-octets { + type oc-yang:counter64; + description + "The total number of octets received in input IP + multicast packets for the specified address + family, including those received in error."; + reference + "RFC 4293: Management Information Base for the Internet + Protocol (IP) - ipSystemStatsHCInMcastOctets"; + } + leaf in-error-pkts { // TODO: this counter combines several error conditions -- // could consider breaking them out to separate leaf nodes @@ -303,7 +348,8 @@ module openconfig-if-ip { specified address family that the device supplied to the lower layers for transmission. This includes packets generated locally and those forwarded by the - device."; + device as well as unicast, multicast and broadcast + packets."; reference "RFC 4293 - Management Information Base for the Internet Protocol (IP)"; @@ -322,6 +368,32 @@ module openconfig-if-ip { Internet Protocol (IP)"; } + leaf out-multicast-pkts { + type oc-yang:counter64; + description + "The total number of IP multicast packets transmitted. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 4293 - Management Information Base for the + Internet Protocol (IP) + - ipSystemStatsHCOutMcastPkts"; + } + + leaf out-multicast-octets { + type oc-yang:counter64; + description + "The total number of IP multicast octets transmitted. This + includes packets generated locally and those forwarded by + the device."; + reference + "RFC 4293 - Management Information Base for the + Internet Protocol (IP)"; + } + leaf out-error-pkts { // TODO: this counter combines several error conditions -- // could consider breaking them out to separate leaf nodes @@ -939,6 +1011,15 @@ module openconfig-if-ip { description "Configuration parameters for IPv6 router advertisements."; + leaf enable { + type boolean; + default true; + description + "If set to false, all IPv6 router advertisement functions are + disabled. The local system will not transmit router advertisement + messages and will not respond to router solicitation messages."; + } + leaf interval { type uint32; units seconds; @@ -957,6 +1038,7 @@ module openconfig-if-ip { } leaf suppress { + status deprecated; type boolean; default false; description @@ -964,6 +1046,27 @@ module openconfig-if-ip { messages are not transmitted on this interface."; } + leaf mode { + type enumeration { + enum ALL { + description + "The system will transmit unsolicited router advertisement + messages and respond to router solicitation requests."; + } + enum DISABLE_UNSOLICITED_RA { + description + "Unsolicted router advertisement messages are not transmitted on + this interface. Responses to router solicitation messages will + be transmitted."; + } + } + default "ALL"; + description + "Mode controls which set of behaviors the local system should perform + to support IPv6 router advertisements."; + reference "RFC4861: Neighbor Discovery for IP version 6 (IPv6)"; + } + leaf managed { type boolean; default false; diff --git a/release/models/interfaces/openconfig-if-rates.yang b/release/models/interfaces/openconfig-if-rates.yang new file mode 100644 index 000000000..78d972e14 --- /dev/null +++ b/release/models/interfaces/openconfig-if-rates.yang @@ -0,0 +1,114 @@ +module openconfig-if-rates { + + yang-version "1"; + + namespace "http://openconfig.net/yang/interfaces/rates"; + + prefix "oc-if-rates"; + + import openconfig-extensions { prefix oc-ext; } + import openconfig-interfaces { prefix "oc-if"; } + + organization + "OpenConfig working group"; + + contact + "www.openconfig.net"; + + description + "This module adds configuration and operational state for interface rates."; + + oc-ext:openconfig-version "0.1.0"; + + revision 2024-04-02 { + description + "Augment of /interfaces/interface to include interface rates."; + reference + "0.1.0"; + } + + grouping interface-rates-config { + description + "Grouping of interface rates related configuration"; + + leaf load-interval { + type uint16 { + range "1..600"; + } + units "seconds"; + default 300; + description + "The interval of interface rates calculation in seconds"; + } + } + + grouping interface-rates-state { + description + "Grouping of interface rates with different direction and units"; + + leaf load-interval { + type uint16; + units "seconds"; + description + "The interval of interface rates calculation in seconds"; + } + + leaf out-bits-rate { + type uint64; + units "bps"; + description + "The calculated transmitted rate of the interface, measured in bits + per second."; + } + + leaf in-bits-rate { + type uint64; + units "bps"; + description + "The calculated received rate of the interface, measured in bits + per second."; + } + + leaf out-pkts-rate { + type uint64; + units "pps"; + description + "The calculated transmitted rate of the interface, measured in packets + per second."; + } + + leaf in-pkts-rate { + type uint64; + units "pps"; + description + "The calculated received rate of the interface, measured in packets + per second."; + } + } + + augment "/oc-if:interfaces/oc-if:interface" { + description + "Adds interface rates."; + + container rates { + description + "Enclosing container for interface rates."; + + container config { + description + "Enclosing container for interface rates related configuration"; + + uses interface-rates-config; + } + + container state { + config false; + description + "Enclosing container for operational state representing + interface rates."; + + uses interface-rates-state; + } + } + } +} diff --git a/release/models/interfaces/openconfig-if-sdn-ext.yang b/release/models/interfaces/openconfig-if-sdn-ext.yang index fb4cfeef0..a96e1b823 100644 --- a/release/models/interfaces/openconfig-if-sdn-ext.yang +++ b/release/models/interfaces/openconfig-if-sdn-ext.yang @@ -21,7 +21,13 @@ module openconfig-if-sdn-ext { oc-ext:catalog-organization "openconfig"; oc-ext:origin "openconfig"; - oc-ext:openconfig-version "0.1.0"; + oc-ext:openconfig-version "0.2.0"; + + revision 2024-02-21 { + description + "Initial revision."; + reference "0.2.0"; + } revision 2021-03-30 { description @@ -47,11 +53,42 @@ module openconfig-if-sdn-ext { This is used by an external programming entity to disable an interface (usually part of an aggregate) for the purposes of forwarding traffic. This allows a logical aggregate to continue to be - used with partial capacity, for example. Note that setting - `forwarding-viable = false` is not equivalent to - administratively disabling the interface -- in particular, the - interface is expected to participate in L2 protocols such as - LLDP or LACP even if it blocked from forwarding traffic."; + used with partial capacity. Setting `forwarding-viable = false` is not + equivalent to administratively disabling the interface. + Some rules to follow when an interface or aggregate interface is set for + Forwarding-viable=False: + 1. Aggregate interface '/interfaces/interface/aggregation/state/min-links' + checks should be evaluated based on + `/interfaces/interface/state/oper-status`. 'min-links' should not be + affected by the use of forwarding viable. + + 2. L2 protocols like LLDP and LACP must be processed normally on + transmit and receive on such ports/bundles. IS-IS PDUs should be + handled as per the requirements for L3 packets below. + + 3. L3 packets must not be transmitted on the interface. + + 4. Received L3 packets must be processed normally. Received data-plane + traffic will continue to forwarded to its destination post FIB lookup. + Received control-plane traffic must also be processed normally. + + 5. It is possible that the dead-interval or hold-down timer of L3 + protocols like IS-IS/BGP on the peer router may expire taking down the + adjacency or peering on that connection. However, the peer may still + continue to transmit packets which are received by the local device. + These received packet should continue to be processed normally as + per rule #4 above. + + For example, if the peer's forwarding table is programmed using gRIBI + by an external controller, the local device will continue to receive + packets. + + 6. An implementation should follow rule #3 even when the subject + interface on the local device is the last resort of communication for a + given destination. For example, the only nexthop for a destination is + an aggregate interface which has all member interfaces set to + forwarding-viable = false. In this scenario all L3 packets for that + destination will be dropped."; } } diff --git a/release/models/interfaces/openconfig-interfaces.yang b/release/models/interfaces/openconfig-interfaces.yang index 7d349a07c..2cf2bdc84 100644 --- a/release/models/interfaces/openconfig-interfaces.yang +++ b/release/models/interfaces/openconfig-interfaces.yang @@ -51,9 +51,37 @@ module openconfig-interfaces { Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info)."; - oc-ext:openconfig-version "3.0.2"; + oc-ext:openconfig-version "3.7.1"; -revision "2023-02-06" { + revision "2024-04-04" { + description + "Use single quotes in descriptions."; + reference + "3.7.1"; + } + + revision "2023-11-06" { + description + "Clarify description for admin-status TESTING."; + reference + "3.7.0"; + } + + revision "2023-08-29" { + description + "Add augment for penalty-based additive-increase, exponential-decrease link damping algorithm."; + reference + "3.6.0"; + } + + revision "2023-07-14" { + description + "Move counters which apply to both interfaces and subinterfaces to + a common grouping. Deprecate physical counters from subinterface"; + reference "3.5.0"; + } + + revision "2023-02-06" { description "Add further specification to interface-ref type to clarify that the interface and subinterface leaves @@ -490,6 +518,75 @@ revision "2023-02-06" { } } + grouping interface-link-damping-config { + description + "Configuration data for interface link damping settings."; + + leaf max-suppress-time { + type uint32; + units milliseconds; + default 0; + description + "Maximum time an interface can remain damped since the last link down event no matter how unstable it has been prior to this period of stability. In a damped state, the interface's state change will not be advertised."; + } + + leaf decay-half-life { + type uint32; + units milliseconds; + default 0; + description + "The amount of time after which an interface's penalty is decreased by half. Decay-half-time should not be more than max-suppress-time."; + } + + leaf suppress-threshold { + type uint32; + default 0; + description + "The accumulated penalty that triggers the damping of an interface. A value of 0 indicates config is disabled."; + } + + leaf reuse-threshold { + type uint32; + default 0; + description + "When the accumulated penalty decreases to this reuse threshold, the interface is not damped anymore. Interface state changes are advertised to applications. A value of 0 indicates config is disabled."; + } + + leaf flap-penalty { + type uint32; + default 0; + description + "A penalty that each down event costs. A value of 0 indicates the config is disabled."; + } + } + grouping interface-link-damping-state { + description + "Operational state data for interface link damping settings."; + } + grouping link-damping-top { + description + "Top level grouping for link damping parameters."; + + container penalty-based-aied { + description + "Top level container to suppress UP->DOWN link events using a penalty based additive-increase, exponential-decrease algorithm."; + + container config { + description + "Configuration data for link damping settings."; + uses interface-link-damping-config; + } + + container state { + config false; + description + "Operational state data for link damping settings."; + uses interface-link-damping-config; + uses interface-link-damping-state; + } + } + } + grouping interface-common-state { description "Operational state data (in addition to intended configuration) @@ -518,11 +615,16 @@ revision "2023-02-06" { "Not ready to pass packets and not in some test mode."; } enum TESTING { - //TODO: This is generally not supported as a configured - //admin state, though it's in the standard interfaces MIB. - //Consider removing it. description - "In some test mode."; + "The interface should be treated as if in admin-down state for + control plane protocols. In addition, while in TESTING state the + device should remove the interface from aggregate interfaces. + An interface transition to the TESTING state based on a qualification + workflow, or internal device triggered action - such as the gNOI Link + Qualification service"; + reference + "gNOI Link Qualification Service + https://github.com/openconfig/gnoi/blob/main/packet_link_qualification/index.md"; } } //TODO:consider converting to an identity to have the @@ -554,7 +656,7 @@ revision "2023-02-06" { enum TESTING { value 3; description - "In some test mode. No operational packets can + "In test mode. No operational packets can be passed."; } enum UNKNOWN { @@ -637,300 +739,376 @@ revision "2023-02-06" { } } - - grouping interface-counters-state { + grouping interface-common-counters-state { description - "Operational state representing interface counters - and statistics."; + "Operational state representing interface counters and statistics + applicable to (physical) interfaces and (logical) subinterfaces."; - //TODO: we may need to break this list of counters into those - //that would appear for physical vs. subinterface or logical - //interfaces. For now, just replicating the full stats - //grouping to both interface and subinterface. + leaf in-octets { + type oc-yang:counter64; + description + "The total number of octets received on the interface, + including framing characters. - oc-ext:operational; + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInOctets. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - container counters { + leaf in-pkts { + type oc-yang:counter64; description - "A collection of interface-related statistics objects."; + "The total number of packets received on the interface, + including all unicast, multicast, broadcast and bad packets + etc."; + reference + "RFC 2819: Remote Network Monitoring Management Information Base. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf in-octets { - type oc-yang:counter64; - description - "The total number of octets received on the interface, - including framing characters. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - ifHCInOctets"; - } + leaf in-unicast-pkts { + type oc-yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were not addressed to a + multicast or broadcast address at this sub-layer. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf in-pkts { - type oc-yang:counter64; - description - "The total number of packets received on the interface, - including all unicast, multicast, broadcast and bad packets - etc."; - reference - "RFC 2819: Remote Network Monitoring Management Information - Base"; - } + leaf in-broadcast-pkts { + type oc-yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were addressed to a broadcast + address at this sub-layer. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInBroadcastPkts. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf in-unicast-pkts { - type oc-yang:counter64; - description - "The number of packets, delivered by this sub-layer to a - higher (sub-)layer, that were not addressed to a - multicast or broadcast address at this sub-layer. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts"; - } + leaf in-multicast-pkts { + type oc-yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were addressed to a multicast + address at this sub-layer. For a MAC-layer protocol, + this includes both Group and Functional addresses. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInMulticastPkts. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf in-broadcast-pkts { - type oc-yang:counter64; - description - "The number of packets, delivered by this sub-layer to a - higher (sub-)layer, that were addressed to a broadcast - address at this sub-layer. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - - ifHCInBroadcastPkts"; - } + leaf in-errors { + type oc-yang:counter64; + description + "For packet-oriented interfaces, the number of inbound + packets that contained errors preventing them from being + deliverable to a higher-layer protocol. For character- + oriented or fixed-length interfaces, the number of + inbound transmission units that contained errors + preventing them from being deliverable to a higher-layer + protocol. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInErrors. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf in-multicast-pkts { - type oc-yang:counter64; - description - "The number of packets, delivered by this sub-layer to a - higher (sub-)layer, that were addressed to a multicast - address at this sub-layer. For a MAC-layer protocol, - this includes both Group and Functional addresses. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - - ifHCInMulticastPkts"; - } + leaf in-discards { + type oc-yang:counter64; + description + "The number of inbound packets that were chosen to be + discarded even though no errors had been detected to + prevent their being deliverable to a higher-layer + protocol. One possible reason for discarding such a + packet could be to free up buffer space. - leaf in-discards { - type oc-yang:counter64; - description - "The number of inbound packets that were chosen to be - discarded even though no errors had been detected to - prevent their being deliverable to a higher-layer - protocol. One possible reason for discarding such a - packet could be to free up buffer space. + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInDiscards. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - reference - "RFC 2863: The Interfaces Group MIB - ifInDiscards"; - } + leaf out-octets { + type oc-yang:counter64; + description + "The total number of octets transmitted out of the + interface, including framing characters. - leaf in-errors { - type oc-yang:counter64; - description - "For packet-oriented interfaces, the number of inbound - packets that contained errors preventing them from being - deliverable to a higher-layer protocol. For character- - oriented or fixed-length interfaces, the number of - inbound transmission units that contained errors - preventing them from being deliverable to a higher-layer - protocol. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - ifInErrors"; - } + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutOctets. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf in-unknown-protos { - type oc-yang:counter64; - description - "For packet-oriented interfaces, the number of packets - received via the interface that were discarded because - of an unknown or unsupported protocol. For - character-oriented or fixed-length interfaces that - support protocol multiplexing, the number of - transmission units received via the interface that were - discarded because of an unknown or unsupported protocol. - For any interface that does not support protocol - multiplexing, this counter is not present. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos"; - } + leaf out-pkts { + type oc-yang:counter64; + description + "The total number of packets transmitted out of the + interface, including all unicast, multicast, broadcast, + and bad packets etc."; + reference + "RFC 2819: Remote Network Monitoring Management Information Base. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf in-fcs-errors { - type oc-yang:counter64; - description - "Number of received packets which had errors in the - frame check sequence (FCS), i.e., framing errors. + leaf out-unicast-pkts { + type oc-yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted, and that were not addressed + to a multicast or broadcast address at this sub-layer, + including those that were discarded or not sent. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - Discontinuities in the value of this counter can occur - when the device is re-initialization as indicated by the - value of 'last-clear'."; - } + leaf out-broadcast-pkts { + type oc-yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted, and that were addressed to a + broadcast address at this sub-layer, including those + that were discarded or not sent. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutBroadcastPkts. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf out-octets { - type oc-yang:counter64; - description - "The total number of octets transmitted out of the - interface, including framing characters. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - ifHCOutOctets"; - } + leaf out-multicast-pkts { + type oc-yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted, and that were addressed to a + multicast address at this sub-layer, including those + that were discarded or not sent. For a MAC-layer + protocol, this includes both Group and Functional + addresses. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutMulticastPkts. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf out-pkts { - type oc-yang:counter64; - description - "The total number of packets transmitted out of the - interface, including all unicast, multicast, broadcast, - and bad packets etc."; - reference - "RFC 2819: Remote Network Monitoring Management Information - Base"; - } + leaf out-discards { + type oc-yang:counter64; + description + "The number of outbound packets that were chosen to be + discarded even though no errors had been detected to + prevent their being transmitted. One possible reason + for discarding such a packet could be to free up buffer + space. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifOutDiscards. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf out-unicast-pkts { - type oc-yang:counter64; - description - "The total number of packets that higher-level protocols - requested be transmitted, and that were not addressed - to a multicast or broadcast address at this sub-layer, - including those that were discarded or not sent. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts"; - } + leaf out-errors { + type oc-yang:counter64; + description + "For packet-oriented interfaces, the number of outbound + packets that could not be transmitted because of errors. + For character-oriented or fixed-length interfaces, the + number of outbound transmission units that could not be + transmitted because of errors. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifOutErrors. + RFC 4293: Management Information Base for the + Internet Protocol (IP)."; + } - leaf out-broadcast-pkts { - type oc-yang:counter64; - description - "The total number of packets that higher-level protocols - requested be transmitted, and that were addressed to a - broadcast address at this sub-layer, including those - that were discarded or not sent. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - - ifHCOutBroadcastPkts"; - } + leaf last-clear { + type oc-types:timeticks64; + description + "Timestamp of the last time the interface counters were + cleared. + The value is the timestamp in nanoseconds relative to + the Unix Epoch (Jan 1, 1970 00:00:00 UTC)."; + oc-ext:telemetry-on-change; + } + } - leaf out-multicast-pkts { - type oc-yang:counter64; - description - "The total number of packets that higher-level protocols - requested be transmitted, and that were addressed to a - multicast address at this sub-layer, including those - that were discarded or not sent. For a MAC-layer - protocol, this includes both Group and Functional - addresses. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - - ifHCOutMulticastPkts"; - } + grouping interface-counters-state { + description + "Operational state representing interface counters + and statistics."; - leaf out-discards { - type oc-yang:counter64; - description - "The number of outbound packets that were chosen to be - discarded even though no errors had been detected to - prevent their being transmitted. One possible reason - for discarding such a packet could be to free up buffer - space. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - ifOutDiscards"; - } + oc-ext:operational; - leaf out-errors { - type oc-yang:counter64; - description - "For packet-oriented interfaces, the number of outbound - packets that could not be transmitted because of errors. - For character-oriented or fixed-length interfaces, the - number of outbound transmission units that could not be - transmitted because of errors. - - Discontinuities in the value of this counter can occur - at re-initialization of the management system, and at - other times as indicated by the value of - 'last-clear'."; - reference - "RFC 2863: The Interfaces Group MIB - ifOutErrors"; - } + leaf in-unknown-protos { + type oc-yang:counter64; + description + "For packet-oriented interfaces, the number of packets + received via the interface that were discarded because + of an unknown or unsupported protocol. For + character-oriented or fixed-length interfaces that + support protocol multiplexing, the number of + transmission units received via the interface that were + discarded because of an unknown or unsupported protocol. + For any interface that does not support protocol + multiplexing, this counter is not present. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos"; + } - leaf carrier-transitions { - type oc-yang:counter64; - description - "Number of times the interface state has transitioned - between up and down since the time the device restarted - or the last-clear time, whichever is most recent."; - oc-ext:telemetry-on-change; - } + leaf in-fcs-errors { + type oc-yang:counter64; + description + "Number of received packets which had errors in the + frame check sequence (FCS), i.e., framing errors. - leaf last-clear { - type oc-types:timeticks64; - description - "Timestamp of the last time the interface counters were - cleared. + Discontinuities in the value of this counter can occur + when the device is re-initialization as indicated by the + value of 'last-clear'."; + } + + leaf carrier-transitions { + type oc-yang:counter64; + description + "Number of times the interface state has transitioned + between up and down since the time the device restarted + or the last-clear time, whichever is most recent."; + oc-ext:telemetry-on-change; + } + + leaf resets { + type oc-yang:counter64; + description + "Number of times the interface hardware has been reset. The + triggers and effects of this event are hardware-specifc."; + oc-ext:telemetry-on-change; - The value is the timestamp in nanoseconds relative to - the Unix Epoch (Jan 1, 1970 00:00:00 UTC)."; - oc-ext:telemetry-on-change; - } } } + grouping subinterfaces-counters-state { + description + "Operational state representing counters unique to subinterfaces"; + + oc-ext:operational; + leaf in-unknown-protos { + type oc-yang:counter64; + status deprecated; + description + "For packet-oriented interfaces, the number of packets + received via the interface that were discarded because + of an unknown or unsupported protocol. For + character-oriented or fixed-length interfaces that + support protocol multiplexing, the number of + transmission units received via the interface that were + discarded because of an unknown or unsupported protocol. + For any interface that does not support protocol + multiplexing, this counter is not present. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'last-clear'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos"; + } + + leaf in-fcs-errors { + type oc-yang:counter64; + status deprecated; + description + "Number of received packets which had errors in the + frame check sequence (FCS), i.e., framing errors. + + Discontinuities in the value of this counter can occur + when the device is re-initialization as indicated by the + value of 'last-clear'."; + } + + leaf carrier-transitions { + type oc-yang:counter64; + status deprecated; + description + "Number of times the interface state has transitioned + between up and down since the time the device restarted + or the last-clear time, whichever is most recent."; + oc-ext:telemetry-on-change; + } + + } + // data definition statements grouping sub-unnumbered-config { @@ -1020,7 +1198,15 @@ revision "2023-02-06" { } uses interface-common-state; - uses interface-counters-state; + + container counters { + description + "A collection of interface specific statistics entitites which are + not common to subinterfaces."; + + uses interface-common-counters-state; + uses subinterfaces-counters-state; + } } grouping subinterfaces-top { @@ -1119,10 +1305,27 @@ revision "2023-02-06" { uses interface-phys-config; uses interface-common-state; - uses interface-counters-state; + + container counters { + description + "A collection of interface specific statistics entitites which are + not common to subinterfaces."; + + uses interface-common-counters-state; + uses interface-counters-state; + } } - uses interface-phys-holdtime-top; + uses interface-phys-holdtime-top { + when "./penalty-based-aied/config/suppress-threshold = 0 + or ./penalty-based-aied/config/reuse-threshold = 0 + or ./penalty-based-aied/config/flap-penalty = 0" { + description + "Hold time and penalty-based-aied are two algorithms to suppress + link transitions and must be mutually exclusive."; + } + } + uses link-damping-top; uses subinterfaces-top; } } diff --git a/release/models/isis/openconfig-isis-lsp.yang b/release/models/isis/openconfig-isis-lsp.yang index a8415a632..707a8706e 100644 --- a/release/models/isis/openconfig-isis-lsp.yang +++ b/release/models/isis/openconfig-isis-lsp.yang @@ -34,7 +34,26 @@ submodule openconfig-isis-lsp { Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info)."; - oc-ext:openconfig-version "1.6.0"; + oc-ext:openconfig-version "1.7.0"; + + revision "2024-02-28" { + description + "ISIS graceful-restart timers and per-level configuration."; + reference "1.7.0"; + } + + revision "2024-02-20" { + description + "Fix typo in RFC reference for adjacency-state."; + reference "1.6.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "1.6.1"; + } revision "2023-05-01" { description diff --git a/release/models/isis/openconfig-isis-policy.yang b/release/models/isis/openconfig-isis-policy.yang index 21ee06eb7..caa4c1278 100644 --- a/release/models/isis/openconfig-isis-policy.yang +++ b/release/models/isis/openconfig-isis-policy.yang @@ -26,7 +26,13 @@ module openconfig-isis-policy { It augments the base routing-policy module with BGP-specific options for conditions and actions."; - oc-ext:openconfig-version "0.7.0"; + oc-ext:openconfig-version "0.8.0"; + + revision "2023-11-02" { + description + "Fixing metric type leafs for action and condition branches."; + reference "0.8.0"; + } revision "2023-04-28" { description @@ -151,10 +157,10 @@ module openconfig-isis-policy { within it"; } - leaf set-metric-type { + leaf match-metric-type { type isis-types:metric-type; description - "Set the type of the route to redistribute to INTERNAL or EXTERNAL"; + "Matches the type of the route to redistribute to INTERNAL or EXTERNAL"; } } @@ -195,20 +201,16 @@ module openconfig-isis-policy { } leaf set-metric-type { - type isis-types:level-number; - status deprecated; + type isis-types:metric-type; description - "Formerly this leaf sets the type of metric that is to be specified - when the set-metric leaf is specified. This leaf is DEPRECATED - due to being assigned the wrong type. Use set-metric-style-type - instead."; + "This leaf sets the type of metric that is to be specified + when the set-metric leaf is specified"; } leaf set-metric-style-type { type isis-types:metric-style; description - "Set the type of metric that is to be specified when the - set metric leaf is specified"; + "Set the style of the metric"; } leaf set-metric { diff --git a/release/models/isis/openconfig-isis-routing.yang b/release/models/isis/openconfig-isis-routing.yang index df8af637b..80a3154ff 100644 --- a/release/models/isis/openconfig-isis-routing.yang +++ b/release/models/isis/openconfig-isis-routing.yang @@ -20,7 +20,26 @@ submodule openconfig-isis-routing { description "This module describes YANG model for ISIS Routing"; - oc-ext:openconfig-version "1.6.0"; + oc-ext:openconfig-version "1.7.0"; + + revision "2024-02-28" { + description + "ISIS graceful-restart timers and per-level configuration."; + reference "1.7.0"; + } + + revision "2024-02-20" { + description + "Fix typo in RFC reference for adjacency-state."; + reference "1.6.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "1.6.1"; + } revision "2023-05-01" { description diff --git a/release/models/isis/openconfig-isis.yang b/release/models/isis/openconfig-isis.yang index a27a82f76..fcad2fb68 100644 --- a/release/models/isis/openconfig-isis.yang +++ b/release/models/isis/openconfig-isis.yang @@ -54,7 +54,26 @@ module openconfig-isis { +-> { levels config } +-> { level adjacencies }"; - oc-ext:openconfig-version "1.6.0"; + oc-ext:openconfig-version "1.7.0"; + + revision "2024-02-28" { + description + "ISIS graceful-restart timers and per-level configuration."; + reference "1.7.0"; + } + + revision "2024-02-20" { + description + "Fix typo in RFC reference for adjacency-state."; + reference "1.6.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "1.6.1"; + } revision "2023-05-01" { description @@ -912,7 +931,60 @@ module openconfig-isis { graceful restart procedures during its own restart, but supports retaining forwarding information during a remote speaker's restart."; } - reference "RFC 5306: Restart Signaling for IS-IS."; + + leaf non-planned-only { + type boolean; + description + "When this leaf is set to TRUE, planned restart procedures as + described in RFC 8706 are not used."; + reference + "RFC 5706: Restart Signaling for IS-IS"; + } + + reference + "RFC 5306: Restart Signaling for IS-IS; RFC 5706: Restart Signaling + for IS-IS"; + } + + grouping isis-graceful-restart-level-config { + description + "This grouping defines ISIS graceful restart configuration relevant + for ISIS level/LSDB"; + + leaf restart-time { + type uint16; + default 30; + description + "Value of RFC5306/RFC8706 T2 timer"; + } + + reference + "RFC 5306: Restart Signaling for IS-IS; RFC 5706: Restart Signaling + for IS-IS"; + } + + grouping isis-graceful-restart-interface-config { + description + "This grouping defines ISIS graceful restart configuration relevant + for ISIS interface/adjacency"; + + leaf interface-timer { + type uint16; + description + "Value of RFC5306/RFC8706 T1 timer"; + } + + leaf interface-time-expirations { + type int64; + description + "Number of times T1 expires before IIH without Restart TLV's RR flag + set is sent. That is GR helper is not supported by adjacents + Inermediate System"; + } + + reference + "RFC 5306: Restart Signaling for IS-IS; RFC 5706: Restart Signaling + for IS-IS"; } // configuration context containers @@ -978,6 +1050,7 @@ module openconfig-isis { "Policy governing the propagation of prefixes between levels."; uses oc-rpol:apply-policy-import-config; + uses oc-rpol:default-policy-import-config; } grouping isis-mpls-config { @@ -1113,6 +1186,8 @@ module openconfig-isis { uses admin-config; uses isis-graceful-restart-config; + uses isis-graceful-restart-level-config; + uses isis-graceful-restart-interface-config; } container state { @@ -1122,6 +1197,8 @@ module openconfig-isis { uses admin-config; uses isis-graceful-restart-config; + uses isis-graceful-restart-level-config; + uses isis-graceful-restart-interface-config; } } @@ -1387,6 +1464,25 @@ module openconfig-isis { uses isis-bfd-config; } } + container graceful-restart { + description + "This container defines ISIS Graceful Restart for interface"; + + container config { + description + "This container defines interface config parameters for ISIS + graceful-restart."; + + uses isis-graceful-restart-interface-config; + } + container state { + config false; + description + "This container defines information for ISIS graceful-restart."; + + uses isis-graceful-restart-interface-config; + } + } } grouping isis-bfd-config { @@ -1480,6 +1576,28 @@ module openconfig-isis { uses isis-authentication-check-config; } + container graceful-restart { + description + "This container defines ISIS Graceful Restart."; + + container config { + description + "This container defines ISIS graceful-restart configuration."; + + uses admin-config; + uses isis-graceful-restart-level-config; + } + + container state { + config false; + description + "This container defines state information for ISIS graceful-restart."; + + uses admin-config; + uses isis-graceful-restart-level-config; + } + } + container system-level-counters { description "This container defines ISIS system level counters."; @@ -1819,7 +1937,7 @@ module openconfig-isis { type oc-isis-types:isis-interface-adj-state; description "P2P 3-way ISIS adjacency state(up, down, init, failed)."; - reference "RFC4303. TLV 240."; + reference "RFC5303: TLV 240."; } leaf up-timestamp { diff --git a/release/models/keychain/openconfig-keychain-types.yang b/release/models/keychain/openconfig-keychain-types.yang index d84b1f54c..3a49c6857 100644 --- a/release/models/keychain/openconfig-keychain-types.yang +++ b/release/models/keychain/openconfig-keychain-types.yang @@ -21,7 +21,25 @@ module openconfig-keychain-types { "This module contains general data definitions for use in keychain-based authentication."; - oc-ext:openconfig-version "0.2.0"; + oc-ext:openconfig-version "0.3.1"; + + revision "2024-08-27" { + description + "fix typo on AES_128_CMAC"; + reference "0.3.1"; + } + + revision "2024-08-27" { + description + "Added AES_128_CMAC and AES_256_CMAC"; + reference "0.3.0"; + } + + revision "2024-08-27" { + description + "Fix typo in identity AES_128_CMAC_96"; + reference "0.2.1"; + } revision "2022-03-01" { description @@ -129,7 +147,7 @@ module openconfig-keychain-types { HMAC and HKDF)"; } - identity AES_28_CMAC_96 { + identity AES_128_CMAC_96 { base CRYPTO_TYPE; description "AES-128-CMAC-96 keyed hash function based on a AES-128 block @@ -137,4 +155,22 @@ module openconfig-keychain-types { reference "RFC 4494 - The AES-CMAC-96 Algorithm and Its Use with IPsec"; } + + identity AES_128_CMAC { + base CRYPTO_TYPE; + description + "AES-128-CMAC keyed hash function based on a AES-128 block + cipher."; + reference + "RFC 4493 - The AES-CMAC Algorithm and Its Use with IPsec"; + } + + identity AES_256_CMAC { + base CRYPTO_TYPE; + description + "AES-256-CMAC keyed hash function based on a AES-256 block + cipher."; + reference + "RFC 4493 - The AES-CMAC Algorithm and Its Use with IPsec"; + } } diff --git a/release/models/keychain/openconfig-keychain.yang b/release/models/keychain/openconfig-keychain.yang index adf35eaad..d073f13a1 100644 --- a/release/models/keychain/openconfig-keychain.yang +++ b/release/models/keychain/openconfig-keychain.yang @@ -33,7 +33,13 @@ module openconfig-keychain { which may be then referenced by other models such as routing protocol management."; - oc-ext:openconfig-version "0.4.0"; + oc-ext:openconfig-version "0.5.0"; + +revision "2024-05-30" { + description + "Update key-id to a union of hex-string-prefixed and uint64."; + reference "0.5.0"; + } revision "2022-11-05" { description @@ -194,13 +200,16 @@ module openconfig-keychain { leaf key-id { type union { - type oc-yang:hex-string { - length "1..64"; + type oc-yang:hex-string-prefixed { + length "3..66"; } type uint64; } description - "Identifier for the key within the keychain."; + "Identifier for the key within the keychain. Note that the + hex-string type is deprecated and will be removed from a future + version of this model. Implementations should transition to using + the hex-string-prefixed type."; } leaf secret-key { diff --git a/release/models/lacp/openconfig-lacp.yang b/release/models/lacp/openconfig-lacp.yang index 078a6ef3b..f69f15f71 100644 --- a/release/models/lacp/openconfig-lacp.yang +++ b/release/models/lacp/openconfig-lacp.yang @@ -26,7 +26,20 @@ module openconfig-lacp { managing aggregate interfaces. It works in conjunction with the OpenConfig interfaces and aggregate interfaces models."; - oc-ext:openconfig-version "1.2.0"; + oc-ext:openconfig-version "2.1.0"; + + revision "2024-09-24" { + description + "Add LACP fallback leaf under both config and state."; + reference "2.1.0"; + } + + revision "2023-12-11" { + description + "Add config container for aggregation member and port-priority leaf under + both config and state"; + reference "2.0.0"; + } revision "2021-07-20" { description @@ -138,20 +151,23 @@ module openconfig-lacp { description "Configuration data for lacp member interfaces"; - //currently a placeholder -- the list of member interfaces - //and their status is considered opstate only - } - - grouping aggregation-lacp-members-state { - description - "Operational status data for the member interfaces"; - leaf interface { type oc-if:base-interface-ref; description "Reference to interface member of the LACP aggregate"; } + leaf port-priority { + type uint16; + description + "Member interface's priority in its aggregate interface."; + } + } + + grouping aggregation-lacp-members-state { + description + "Operational status data for the member interfaces"; + leaf activity { type lacp-activity-type; description "Indicates participant is active or passive"; @@ -234,6 +250,12 @@ module openconfig-lacp { port"; } + leaf partner-port-priority { + type uint16; + description + "Member interface partner's priority in its aggregate interface."; + } + leaf last-change { type oc-types:timeticks64; description @@ -310,28 +332,31 @@ grouping aggregation-lacp-members-statistics { "Top-level grouping for aggregate members list"; container members { - config false; description - "Enclosing container for the list of members interfaces of - the aggregate. This list is considered operational state - only so is labeled config false and has no config container"; + "Configuration and operational state of the aggregate member + interfaces"; list member { key "interface"; description "List of member interfaces and their associated status for - a LACP-controlled aggregate interface. Member list is not - configurable here -- each interface indicates items - its participation in the LAG."; + a LACP-controlled aggregate interface"; leaf interface { type leafref { - path "../state/interface"; + path "../config/interface"; } description "Reference to aggregate member interface"; } + container config { + description + "Operational state data for aggregate members"; + + uses aggregation-lacp-members-config; + } + container state { @@ -340,6 +365,7 @@ grouping aggregation-lacp-members-statistics { description "Operational state data for aggregate members"; + uses aggregation-lacp-members-config; uses aggregation-lacp-members-state; uses aggregation-lacp-members-statistics; } @@ -387,6 +413,15 @@ grouping aggregation-lacp-members-statistics { system-id"; } + leaf fallback { + type boolean; + description + "If the fallback is set to true, current LACP interface is + able to establish a Link Aggregation (LAG) before it receives + LACP PDUs from its peer, and fallback to a single port active + after the expiry of the timeout period."; + } + uses aggregation-lacp-global-config; } diff --git a/release/models/macsec/openconfig-macsec.yang b/release/models/macsec/openconfig-macsec.yang index 5554f695f..2b2d4e51e 100644 --- a/release/models/macsec/openconfig-macsec.yang +++ b/release/models/macsec/openconfig-macsec.yang @@ -18,12 +18,18 @@ module openconfig-macsec { "This module defines configuration and state data for MACsec IEEE Std 802.1AE-2018."; - oc-ext:openconfig-version "1.1.0"; + oc-ext:openconfig-version "1.1.1"; oc-ext:regexp-posix; oc-ext:catalog-organization "openconfig"; oc-ext:origin "openconfig"; - revision "2023-06-08" { + revision "2023-08-03" { + description + "Clarify in-cak and out-cak leaf descriptions."; + reference "1.1.1"; + } + +revision "2023-06-08" { description "Support rx-late-pkts leaf."; reference "1.1.0"; @@ -190,7 +196,9 @@ module openconfig-macsec { leaf in-cak-mkpdu { type oc-yang:counter64; description - "Validated MKPDU received CAK count"; + "Count of validated MKPDU connectivity association key (CAK) pdus + received. This counter is related to the group-cak feature in the + 802.1X-2010 standard."; } leaf out-mkpdu { @@ -208,7 +216,9 @@ module openconfig-macsec { leaf out-cak-mkpdu { type oc-yang:counter64; description - "MKPDU CAK sent count"; + "Count of MKPDU connectivity association key (CAK) pdu's sent. + This counter is related to the group-cak feature in the + 802.1X-2010 standard."; } } diff --git a/release/models/mpls/openconfig-mpls-igp.yang b/release/models/mpls/openconfig-mpls-igp.yang index 157d443b8..c88eb0807 100644 --- a/release/models/mpls/openconfig-mpls-igp.yang +++ b/release/models/mpls/openconfig-mpls-igp.yang @@ -21,7 +21,29 @@ submodule openconfig-mpls-igp { "Configuration generic configuration parameters for IGP-congruent LSPs"; - oc-ext:openconfig-version "3.3.2"; + oc-ext:openconfig-version "3.6.0"; + + revision "2024-06-19" { + description + "Added support with backward compatibility to configure ECMP + of next-hops for the same LSP name. Also marked attributes + push-label, next-hop and interface as deprecated under egress, + transit and ingress config"; + reference "3.6.0"; + } + + revision "2023-12-14" { + description + "Added additional attributes oc-if:interface-ref + and metric attributes to static lsp"; + reference "3.5.0"; + } + + revision "2023-07-25" { + description + "Added record-route-enabled to MPLS p2p tunnel config"; + reference "3.4.0"; + } revision "2023-04-28" { description diff --git a/release/models/mpls/openconfig-mpls-static.yang b/release/models/mpls/openconfig-mpls-static.yang index 268d643a5..a8e7c2faf 100644 --- a/release/models/mpls/openconfig-mpls-static.yang +++ b/release/models/mpls/openconfig-mpls-static.yang @@ -10,6 +10,7 @@ submodule openconfig-mpls-static { import openconfig-mpls-types {prefix oc-mplst; } import openconfig-inet-types { prefix inet; } import openconfig-extensions { prefix oc-ext; } + import openconfig-interfaces { prefix oc-if; } // meta @@ -23,7 +24,29 @@ submodule openconfig-mpls-static { "Defines static LSP configuration"; - oc-ext:openconfig-version "3.3.2"; + oc-ext:openconfig-version "3.6.0"; + + revision "2024-06-19" { + description + "Added support with backward compatibility to configure ECMP + of next-hops for the same LSP name. Also marked attributes + push-label, next-hop and interface as deprecated under egress, + transit and ingress config"; + reference "3.6.0"; + } + + revision "2023-12-14" { + description + "Added additional attributes oc-if:interface-ref + and metric attributes to static lsp"; + reference "3.5.0"; + } + + revision "2023-07-25" { + description + "Added record-route-enabled to MPLS p2p tunnel config"; + reference "3.4.0"; + } revision "2023-04-28" { description @@ -142,28 +165,127 @@ submodule openconfig-mpls-static { // grouping statements - grouping static-lsp-common-config { + grouping static-lsp-nexthop-index { description - "common definitions for static LSPs"; + "Next hop index definition for static LSPs"; - leaf next-hop { + leaf index { + type uint32; + description + "An user-specified identifier utilised to uniquely reference + the next-hop entry in the next-hop list. The value of this + index has no semantic meaning other than for referencing + the entry."; + } + } + + grouping static-lsp-nexthop-common-config { + description + "Common definition of next hop configuration for static LSPs"; + + leaf ip-address { type inet:ip-address; description - "next hop IP address for the LSP"; + "Next hop IP address for the LSP"; + } + + leaf push-label { + type oc-mplst:mpls-label; + description + "Label value to push at the current hop for the + LSP"; } + // interface-ref + uses oc-if:interface-ref-common; + } + + grouping static-lsp-common-config { + description + "Common definitions for static LSPs"; + leaf incoming-label { type oc-mplst:mpls-label; description - "label value on the incoming packet"; + "Label value on the incoming packet"; + } + + leaf next-hop { + type inet:ip-address; + status deprecated; + description + "Next hop IP address for the LSP"; } leaf push-label { type oc-mplst:mpls-label; + status deprecated; description - "label value to push at the current hop for the + "Label value to push at the current hop for the LSP"; } + + // interface-ref + uses oc-if:interface-ref-common { + status deprecated; + } + + leaf metric { + type uint8; + description + "Specifies metric value used for the MPLS route."; + } + } + + grouping static-lsp-nexthops-common { + description + "MPLS Static LSP next-hops configuration"; + + container lsp-next-hops { + description + "Configuration and state parameters relating to the + next-hops that are to be utilised for the MPLS static + route being specified"; + + list lsp-next-hop { + key "index"; + + description + "A list of next-hops to be utilised for the MPLS + static route being specified."; + + leaf index { + type leafref { + path "../config/index"; + } + description + "A reference to the index of the current next-hop. + The index is intended to be a user-specified value + which can be used to reference the next-hop in + question, without any other semantics being + assigned to it."; + } + + container config { + description + "Configuration parameters relating to the next-hop + entry"; + + uses static-lsp-nexthop-index; + uses static-lsp-nexthop-common-config; + } + + container state { + config false; + description + "Operational state parameters relating to the + next-hop entry"; + + uses static-lsp-nexthop-index; + uses static-lsp-nexthop-common-config; + } + } + } } grouping static-lsp-ingress-config { @@ -204,6 +326,8 @@ submodule openconfig-mpls-static { uses static-lsp-ingress-config; uses static-lsp-ingress-state; } + + uses static-lsp-nexthops-common; } } @@ -245,6 +369,8 @@ submodule openconfig-mpls-static { uses static-lsp-transit-config; uses static-lsp-transit-state; } + + uses static-lsp-nexthops-common; } } @@ -286,6 +412,8 @@ submodule openconfig-mpls-static { uses static-lsp-egress-config; uses static-lsp-egress-state; } + + uses static-lsp-nexthops-common; } } diff --git a/release/models/mpls/openconfig-mpls-te.yang b/release/models/mpls/openconfig-mpls-te.yang index 9553b7d86..647325357 100644 --- a/release/models/mpls/openconfig-mpls-te.yang +++ b/release/models/mpls/openconfig-mpls-te.yang @@ -30,7 +30,29 @@ submodule openconfig-mpls-te { signaling protocol or mechanism (see related submodules for signaling protocol-specific configuration)."; - oc-ext:openconfig-version "3.3.2"; + oc-ext:openconfig-version "3.6.0"; + + revision "2024-06-19" { + description + "Added support with backward compatibility to configure ECMP + of next-hops for the same LSP name. Also marked attributes + push-label, next-hop and interface as deprecated under egress, + transit and ingress config"; + reference "3.6.0"; + } + + revision "2023-12-14" { + description + "Added additional attributes oc-if:interface-ref + and metric attributes to static lsp"; + reference "3.5.0"; + } + + revision "2023-07-25" { + description + "Added record-route-enabled to MPLS p2p tunnel config"; + reference "3.4.0"; + } revision "2023-04-28" { description @@ -804,6 +826,11 @@ submodule openconfig-mpls-te { description "P2P tunnel destination address"; } + leaf record-route-enabled { + type boolean; + description + "Enables recording a path on an LSP using the record route object (RRO)"; + } } grouping p2p-path-state { diff --git a/release/models/mpls/openconfig-mpls-types.yang b/release/models/mpls/openconfig-mpls-types.yang index 1df30b3b9..765e467cf 100644 --- a/release/models/mpls/openconfig-mpls-types.yang +++ b/release/models/mpls/openconfig-mpls-types.yang @@ -19,7 +19,14 @@ module openconfig-mpls-types { description "General types for MPLS / TE data model"; - oc-ext:openconfig-version "3.4.0"; + oc-ext:openconfig-version "3.5.0"; + + revision "2023-12-14" { + description + "Added additional attributes oc-if:interface-ref + and metric attributes to static lsp"; + reference "3.5.0"; + } revision "2021-12-01" { description diff --git a/release/models/mpls/openconfig-mpls.yang b/release/models/mpls/openconfig-mpls.yang index 85ca939dd..693d67e4c 100644 --- a/release/models/mpls/openconfig-mpls.yang +++ b/release/models/mpls/openconfig-mpls.yang @@ -70,8 +70,29 @@ module openconfig-mpls { +------+ |ROUTING| +-----+ +-------+ "; + oc-ext:openconfig-version "3.6.0"; - oc-ext:openconfig-version "3.3.2"; + revision "2024-06-19" { + description + "Added support with backward compatibility to configure ECMP + of next-hops for the same LSP name. Also marked attributes + push-label, next-hop and interface as deprecated under egress, + transit and ingress config"; + reference "3.6.0"; + } + + revision "2023-12-14" { + description + "Added additional attributes oc-if:interface-ref + and metric attributes to static lsp"; + reference "3.5.0"; + } + + revision "2023-07-25" { + description + "Added record-route-enabled to MPLS p2p tunnel config"; + reference "3.4.0"; + } revision "2023-04-28" { description 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 { diff --git a/release/models/network-instance/.spec.yml b/release/models/network-instance/.spec.yml index 9874ec073..992b4a491 100644 --- a/release/models/network-instance/.spec.yml +++ b/release/models/network-instance/.spec.yml @@ -1,20 +1,21 @@ - name: openconfig-network-instance docs: - - yang/network-instance/openconfig-network-instance-types.yang - - yang/network-instance/openconfig-network-instance.yang + - yang/aft/openconfig-aft-network-instance.yang + - yang/aft/openconfig-aft-summary.yang - yang/network-instance/openconfig-evpn-types.yang - yang/network-instance/openconfig-evpn.yang + - yang/network-instance/openconfig-network-instance-types.yang + - yang/network-instance/openconfig-network-instance.yang - yang/network-instance/openconfig-programming-errors.yang - - yang/network-instance/openconfig-route-summary.yang - - yang/aft/openconfig-aft-network-instance.yang - yang/segment-routing/openconfig-rsvp-sr-ext.yang - yang/segment-routing/openconfig-segment-routing.yang - yang/rib/openconfig-rib-bgp-ext.yang + build: + - yang/aft/openconfig-aft-network-instance.yang + - yang/aft/openconfig-aft-summary.yang - yang/network-instance/openconfig-network-instance.yang - yang/network-instance/openconfig-programming-errors.yang - - yang/network-instance/openconfig-route-summary.yang - - yang/aft/openconfig-aft-network-instance.yang - yang/segment-routing/openconfig-rsvp-sr-ext.yang run-ci: true - name: openconfig-network-instance-bgp-rib-augment diff --git a/release/models/network-instance/openconfig-evpn.yang b/release/models/network-instance/openconfig-evpn.yang index a2fbdd7f8..a3fd800e3 100644 --- a/release/models/network-instance/openconfig-evpn.yang +++ b/release/models/network-instance/openconfig-evpn.yang @@ -40,7 +40,46 @@ module openconfig-evpn { domains, this is not currently supported and requires an extension of the model."; - oc-ext:openconfig-version "0.5.0"; + oc-ext:openconfig-version "0.11.0"; + + revision "2024-08-14" { + description + "Add new local-endpoint-vnis config container to Vxlan connection point to allow + configuration of local VNI-to-VLAN and VNI-to-VRF maps"; + reference "0.11.0"; + } + + revision "2024-06-07" { + description + "Add new vni-list leaf list to EVI config to support VLAN-aware-bundle + MACVRFs. Make existing vni leaf conditional on MACVRF type being VLAN-based"; + reference "0.10.0"; + } + + revision "2024-05-14" { + description + "Add configuration of VPWS identifier + for EVPN Virtual Private Wire Services (RFC 8214)"; + reference "0.9.0"; + } + + revision "2024-04-03" { + description + "Add vni-peer-groups container"; + reference "0.8.0"; + } + + revision "2024-02-01" { + description + "Add counters under endpoint-peer and endpoint-vni"; + reference "0.7.0"; + } + + revision "2023-07-12" { + description + "Removed ethernet segment"; + reference "0.6.0"; + } revision "2023-03-08" { description @@ -161,218 +200,7 @@ module openconfig-evpn { } } - grouping evpn-ethernet-segment-df-config { - description - "Configuration parameters for the Designated forwarding - Election"; - - leaf df-election-method { - type enumeration { - enum DEFAULT { - value 0; - description - "The default Designated Forwarder Election election method"; - } - enum HIGHEST_RANDOM_WEIGHT { - value 1; - description - "The highest random weight (HRW) method"; - reference - "RFC8584: Framework for Ethernet VPN Designated Forwarder - Election Extensibility"; - } - enum PREFERENCE { - value 2; - description - "The preference based method"; - reference - "RFC8584: Framework for Ethernet VPN Designated Forwarder - Election Extensibility"; - } - } - description - "Select the Designated Forwarder Election (DF) election method"; - reference - "RFC 7432: BGP MPLS-Based Ethernet VPN. - RFC 8584:Framework for Ethernet VPN Designated Forwarder - Election Extensibility"; - } - - leaf preference { - when "../df-election-method = 'PREFERENCE'" { - description - "The preference value is only applicable - to the preference based method"; - } - type uint16; - description - "Defines a 2-octet value that indicates the PE - preference to become the DF in the Ethernet-Segment."; - reference - "RFC8584: Framework for Ethernet VPN Designated Forwarder - Election Extensibility"; - } - - leaf revertive { - when "../df-election-method = 'PREFERENCE'" { - description - "The revertive value is only applicable - to the preference method"; - } - type boolean; - default true; - description - "The 'preempt' or 'revertive' behavior. This option will allow a - non-revertive behavior in the DF election."; - reference - "RFC8584: Framework for Ethernet VPN Designated Forwarder - Election Extensibility"; - } - - leaf election-wait-time { - when "../df-election-method = 'PREFERENCE'" { - description - "The Designated Forwarder Election wait-time is only applicable - to the preference method"; - } - type uint32; - description - "Designated Forwarder Election wait-time. When the DF timer expires, - the PE device selects the DF based on the highest preference value"; - reference - "RFC8584: Framework for Ethernet VPN Designated Forwarder - Election Extensibility"; - } - } - - grouping evpn-ethernet-segment-df-top { - description - "Top grouping for the configuration and state parameters - for the Designated forwarding Election"; - - container df-election { - description - "Top container for the configuration and state parameters - for the Designated forwarding Election"; - - container config { - description - "Configuration parameters for the Designated forwarding Election"; - - uses evpn-ethernet-segment-df-config; - } - - container state { - description - "Configuration parameters for the Designated forwarding Election"; - config false; - - uses evpn-ethernet-segment-df-config; - } - } - } - - grouping evpn-ethernet-segment-config { - description - "Configuration attributes for the Ethernet - Segment."; - - leaf name { - type string; - description - "Ethernet Segment name"; - } - leaf esi-type { - type oc-evpn-types:esi-type; - default "TYPE_0_OPERATOR_CONFIGURED"; - description - "ESI Type is a 1-octet field (most significant octet) that - specifies the format of the remaining 9 octets (ESI Value)."; - reference - "RFC 7432: BGP MPLS-Based Ethernet VPN page-16"; - } - - leaf esi { - type union { - type oc-evpn-types:esi; - type enumeration { - enum AUTO { - description - "This ESI type indicates an auto-generated ESI value."; - reference - "RFC 7432: BGP MPLS-Based Ethernet VPN"; - } - } - } - description - "Ethernet Segment Identifier (ESI) value. - For ESI Type 0: The esi leaf value is directly configured by the operator. - For ESI Type 1: The AUTO enum must be used. - For ESI Type 2: The AUTO enum must be used. - For ESI Type 3: The directly configured or AUTO enum must be used. - For ESI Type 4: The directly configured or AUTO enum must be used. - For ESI Type 5: The directly configured or AUTO enum must be used."; - reference - "RFC 7432: BGP MPLS-Based Ethernet VPN."; - } - - leaf redundancy-mode { - type identityref { - base oc-evpn-types:EVPN_REDUNDANCY_MODE; - } - description - "Multihoming options for load balancing of - traffic in the Ethernet Segment."; - reference - "RFC 7432: BGP MPLS-Based Ethernet VPN"; - } - - uses oc-if:interface-ref-common; - } - - grouping evpn-ethernet-segment-top { - description - "Top-level grouping for ethernet segments. An Ethernet Segment - is referenced by a name and an ESI"; - - container ethernet-segments { - description - "Top-level container for ethernet segments. An Ethernet Segment - is referenced by a name and an ESI"; - - list ethernet-segment { - key "name"; - description - "List of Ethernet Segments."; - - leaf name { - type leafref { - path '../config/name'; - } - description - "Ethernet Segment Name "; - } - - container config { - description - "Configuration data for the Ethernet Segments."; - - uses evpn-ethernet-segment-config; - } - - container state { - config false; - description - "Operational state data for the Ethernet Segments."; - - uses evpn-ethernet-segment-config; - } - - uses evpn-ethernet-segment-df-top; - } - } - } /* Groupings related to the Layer 2 forwarding (aka MAC-VRF)*/ @@ -748,6 +576,30 @@ module openconfig-evpn { draft-ietf-bess-rfc7432bis-05 BGP MPLS-Based Ethernet VPN"; } + + leaf local-vpws-service-id { + type uint32 { + range "1..16777215"; + } + description + "Indicates the local VPWS identifier assigned + to the Attachment Circuit (AC)."; + reference + "RFC8214 Virtual Private Wire Service Support + in Ethernet VPN."; + } + + leaf remote-vpws-service-id { + type uint32 { + range "1..16777215"; + } + description + "Indicates the remote VPWS identifier assigned + to the Attachment Circuit (AC)."; + reference + "RFC8214 Virtual Private Wire Service Support + in Ethernet VPN."; + } } grouping evpn-import-export-config { @@ -838,12 +690,27 @@ module openconfig-evpn { Using Ethernet VPN"; leaf vni { + when "../../../config/service-type = 'oc-evpn-types:VLAN_BASED' or + ../../../config/service-type = 'oc-evpn-types:VLAN_BUNDLE'" { + description + "For VLAN-based and VLAN-bundle EVIs, use a single VNI"; + } type oc-evpn-types:vni-id; description "Virtual Network Identifier (VNI) associated to the EVI. This VNI is used for ingress and egress in the VXLAN domain."; } + leaf-list vni-list { + when "../../../config/service-type = 'oc-evpn-types:VLAN_AWARE'" { + description + "For VLAN-aware-bundle EVIs, use a list of VNIs"; + } + type oc-evpn-types:vni-id; + description + "List of VNIs participating in a VLAN-aware-bundle EVI"; + } + leaf overlay-endpoint-network-instance { type leafref { path "/network-instances/network-instance/name"; @@ -1115,6 +982,50 @@ module openconfig-evpn { description "Container for state parameters related to this VTEP peer"; uses evpn-endpoint-peer-state; + uses evpn-endpoint-counters; + } + container vni-peer-groups { + config false; + description + "Container for associating ingress and egress VNIs to router MACs"; + list vni-peer-group { + key "cp-vni egress-vni"; + description + "List of VNI peer groups"; + leaf cp-vni { + type leafref { + path "../state/cp-vni"; + } + description + "A reference to the control-plane VNI for the VNI peer group"; + } + leaf egress-vni { + type leafref { + path "../state/egress-vni"; + } + description + "A reference to the egress VNI for the VNI peer group"; + } + + container state { + description "State container for the VNI peer group"; + config false; + + leaf cp-vni { + type oc-evpn-types:vni-id; + description + "The control-plane VNI discovered behind this peer VTEP"; + } + leaf egress-vni { + type oc-evpn-types:vni-id; + description "Egress VNI associated with the remote VTEP"; + } + leaf router-mac { + type oc-yang:mac-address; + description "MAC address of the remote VTEP"; + } + } + } } } } @@ -1142,8 +1053,45 @@ module openconfig-evpn { config false; description "Container for state parameters related to this L2VNI or L3VNI"; + uses evpn-endpoint-vni-config; uses evpn-endpoint-vni-state; } + + uses ipv4-top; + uses ipv6-top; + } + } + + container local-endpoint-vnis { + description + "Top level container for local configuration related to Layer 2 virtual + network identifiers (L2VNIs) and Layer 3 virtual network identifiers + (L3VNIs) in the default network instance"; + + list local-endpoint-vni { + key "vni"; + description "List of L2VNIs and L3VNIs configured on the local VTEP"; + + leaf vni { + type leafref { + path '../config/vni'; + } + description "L2VNI or L3VNI Identifier"; + } + + container config { + description + "Container for configuration parameters related to this local L2VNI or + L3VNI"; + uses evpn-endpoint-vni-config; + } + + container state { + config false; + description + "Container for state parameters related to this local L2VNI or L3VNI"; + uses evpn-endpoint-vni-config; + } } } } @@ -1183,6 +1131,7 @@ module openconfig-evpn { leaf-list control-plane-vnis { type oc-evpn-types:vni-id; + status deprecated; description "The control-plane VNIs are all of the VNIs that are discovered by the control-plane behind this peer VTEP"; @@ -1190,20 +1139,151 @@ module openconfig-evpn { leaf router-mac { type oc-yang:mac-address; + status deprecated; description "MAC address of the remote VTEP"; } } - grouping evpn-endpoint-vni-state { + grouping evpn-endpoint-counters { description - "Grouping for L2VNI and L3VNI state information learned on the - local VXLAN Tunnel End Point from remote VTEPs"; + "Grouping for Operational state regarding encapsulated traffic."; + container counters { + description + "Operational state regarding encapsulated traffic."; + leaf total-encap-pkts { + type oc-yang:counter64; + description + "The total number of encapsulated packets."; + } + leaf total-encap-bytes { + type oc-yang:counter64; + description + "The total number of encapsulated bytes."; + } + leaf bum-encap-pkts { + type oc-yang:counter64; + description + "The total number of encapsulated BUM packets."; + } + leaf total-decap-pkts { + type oc-yang:counter64; + description + "The total number of decapsulated packets."; + } + leaf total-decap-bytes { + type oc-yang:counter64; + description + "The total number of decapsulated bytes."; + } + leaf unicast-decap-pkts { + type oc-yang:counter64; + description + "The total number of decapsulated unicast packets."; + } + leaf bum-decap-pkts { + type oc-yang:counter64; + description + "The total number of decapsulated BUM packets."; + } + leaf bum-decap-multicast-pkts { + type oc-yang:counter64; + description + "The number of decapsulated BUM packets received via underlay multicast."; + } + leaf bum-decap-ir-pkts { + type oc-yang:counter64; + description + "The number of decapsulated BUM packets received via underlay ingress replication."; + } + leaf drop-decap-pkts { + type oc-yang:counter64; + description + "The total number of decapsulated packets that have been dropped locally."; + } + leaf except-decap-pkts { + type oc-yang:counter64; + description + "The total number of decapsulated packets that hit an exceptional condition."; + } + } + } + + grouping ipv4-top { + description + "Grouping for Operational state of IPv4 address family."; + container ipv4 { + description + "Parameters for the IPv4 address family."; + container state { + config false; + description + "Top level IPv4 operational state data."; + uses evpn-endpoint-counters; + } + } + } + + grouping ipv6-top { + description + "Grouping for Operational state of IPv6 address family."; + container ipv6 { + description + "Parameters for the IPv6 address family."; + container state { + config false; + description + "Top level IPv6 operational state data."; + uses evpn-endpoint-counters; + } + } + } + + grouping evpn-endpoint-vni-config { + description + "Grouping for L2VNI and L3VNI configuration parameters"; leaf vni { type oc-evpn-types:evi-id; description "L2VNI or L3VNI Identifier"; } + leaf vni-type { + type enumeration { + enum L2 { + description + "This is a Layer 2 service virtual network identifier (L2VNI) + that is used for communication within the same subnet or + broadcast domain"; + } + enum L3 { + description + "This is a Layer 3 service virtual network identifier (L3VNI) + or VRF VNI that is used for communication between subnets"; + } + } + description "The type of virtual network identfier"; + } + + leaf bridge-domain { + type uint32; + description + "This reflects the configured VLAN or Bridge Domain that maps to this + L2VNI in the VXLAN fabric"; + } + + leaf l3-vrf-name { + type string; + description + "This refects the configured VRF instance that maps to this L3VNI + that is used for routing between subnets in the VXLAN fabric"; + } + } + + grouping evpn-endpoint-vni-state { + description + "Grouping for L2VNI and L3VNI state information learned on the + local VXLAN Tunnel End Point from remote VTEPs"; + leaf multidestination-traffic { type union { type oc-inet:ip-address; @@ -1237,23 +1317,6 @@ module openconfig-evpn { control-plane or data-plane"; } - leaf vni-type { - type enumeration { - enum L2 { - description - "This is a Layer 2 service virtual network identifier (L2VNI) - that is used for communication within the same subnet or - broadcast domain"; - } - enum L3 { - description - "This is a Layer 3 service virtual network identifier (L3VNI) - or VRF VNI that is used for communication between subnets"; - } - } - description "The type of virtual network identfier"; - } - leaf vni-state { type enumeration { enum UP { @@ -1287,20 +1350,5 @@ module openconfig-evpn { "Operational status of the SVI mapped to the L3VNI that is used for routing between subnets in the VXLAN fabric"; } - - leaf bridge-domain { - type uint32; - description - "This reflects the configured VLAN or Bridge Domain that maps to this - L2VNI in the VXLAN fabric"; - } - - leaf l3-vrf-name { - type string; - description - "This refects the configured VRF instance that maps to this L3VNI - that is used for routing between subnets in the VXLAN fabric"; - } - } } diff --git a/release/models/network-instance/openconfig-network-instance-l2.yang b/release/models/network-instance/openconfig-network-instance-l2.yang index 3c422d96f..fb8b515d3 100644 --- a/release/models/network-instance/openconfig-network-instance-l2.yang +++ b/release/models/network-instance/openconfig-network-instance-l2.yang @@ -24,7 +24,59 @@ submodule openconfig-network-instance-l2 { Layer 2 network instance configuration and operational state parameters."; - oc-ext:openconfig-version "4.0.3"; + oc-ext:openconfig-version "4.4.1"; + + revision "2024-02-27" { + description + "Clarify that tables are created only by the system and not + users."; + reference "4.4.1"; + } + + revision "2024-02-27" { + description + "Clarify metric to be used for route redistribution when + disable-metric-propagation is set to true."; + reference "4.4.0"; + } + + revision "2023-12-13" { + description + "Expand when statement for connection-points endpoints"; + reference "4.3.0"; + } + + revision "2023-11-03" { + description + "Add reference URL for Route Redistribution rules"; + reference "4.2.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "4.2.1"; + } + + revision "2023-09-07" { + description + "Add L2RIB Per Producer Next-Hop Capability"; + reference "4.2.0"; + } + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "4.1.1"; + } + + revision "2023-07-12" { + description + "Moved ethernet-segments to top level + container."; + reference "4.1.0"; + } revision "2023-04-25" { description @@ -532,6 +584,7 @@ submodule openconfig-network-instance-l2 { } } } + uses l2ni-l2rib-common-next-hop-group-state; uses l2ni-l2rib-common-next-hop-state; } @@ -593,6 +646,7 @@ submodule openconfig-network-instance-l2 { } } } + uses l2ni-l2rib-common-next-hop-group-state; uses l2ni-l2rib-common-next-hop-state; } } @@ -695,7 +749,10 @@ submodule openconfig-network-instance-l2 { leaf esi { type oc-evpn-types:esi; - description "Ethernet Segment Identifier for local and remote routes"; + description + "Ethernet Segment Identifier (ESI) for local and remote routes. + ESI is used to resolve the next-hop-group. All mac-addresses + learned with the same ESI should point to the same next-hop-group"; } leaf sticky { @@ -708,8 +765,16 @@ submodule openconfig-network-instance-l2 { type leafref { path "../../../../../../next-hops/next-hop/index"; } + status deprecated; description "Leafref next-hop for the MAC-IP table entry"; } + + leaf-list next-hop-group { + type leafref { + path "../../../../../../next-hop-groups/next-hop-group/id"; + } + description "Leafref next-hop-group for the MAC-IP table entry"; + } } grouping l2ni-l2rib-common-next-hop-state { @@ -744,11 +809,115 @@ submodule openconfig-network-instance-l2 { type oc-evpn-types:evi-id; description "Next hop label representing the l2vni for the route"; } + leaf esi { + type oc-evpn-types:esi; + description "Ethernet Segment Identifier (ESI)"; + reference "RFC7432: BGP MPLS-Based Ethernet VPN"; + } + leaf resolved { + type boolean; + description + "Indicates if the path is eligible for forwarding as per evpn mass + withdraw procedures as defined in RFC 7432"; + } uses oc-if:interface-ref-common; } } } } + + grouping l2ni-l2rib-common-next-hop-group-state { + description "L2RIB Common Next Hop Group Attributes Operational State Data Grouping"; + + container next-hop-groups { + description "Surrounding container for groups of L2RIB next-hops."; + list next-hop-group { + key "id"; + description + "An individual set of next-hops grouped into a common group. + Each entry within an L2RIB can optionally point to a + next-hop-group."; + + leaf id { + type leafref { + path "../state/id"; + } + description + "A reference to a unique identifier for the next-hop-group."; + } + container state { + description "State container for common next-hop-group attributes"; + config false; + leaf id { + type uint64; + description + "A unique identifier for the next-hop-group. This index is not + expected to be consistent across reboots, or reprogramming of + the next-hop-group. When updating a next-hop-group, if the group + is removed by the system or assigned an alternate identifier, the + system should send telemetry notifications deleting the previous + identifier. If the identifier of the next-hop-group is changed, + all L2RIB entries that reference it must also be updated."; + } + leaf esi { + type oc-evpn-types:esi; + description "Ethernet Segment Identifier (ESI)"; + reference "RFC7432: BGP MPLS-Based Ethernet VPN"; + } + leaf type { + type enumeration { + enum ESI { + description + "Per ESI pathlist next-hop-group used for evpn mass withdraw procedures as defined in RFC 7432"; + } + enum ESI_EVI { + description + "Per ESI,EVI pathlist next-hop-group used for evpn aliasing procedures as defined in RFC 7432"; + } + enum BASE_ECMP { + description + "Base ECMP next-hop-group used in absence of evpn aliasing"; + } + } + description "Type of next-hop-group"; + } + } + container next-hops { + description + "Surrounding container for the list of next-hops within the next-hop-group."; + list next-hop { + key "index"; + description + "An individual next-hop within the next-hop-group. Each next-hop is a + reference to an entry within the next-hop list."; + + leaf index { + type leafref { + path "../state/index"; + } + description + "A reference to the index for the next-hop within the the next-hop-group."; + } + container state { + description + "Operational state parameters related to a next-hop within the next-hop-group."; + config false; + leaf index { + type leafref { + path "../../../../../../next-hops/next-hop/index"; + } + description + "A reference to the identifier for the next-hop to which the entry in the + next-hop group corresponds."; + } + } + } + } + + } + } + } + grouping l2ni-l2rib-mac-table-producer-state { description "L2RIB MAC Table Operational State Data Grouping"; diff --git a/release/models/network-instance/openconfig-network-instance-policy.yang b/release/models/network-instance/openconfig-network-instance-policy.yang index a2897dcbd..d72e8f008 100644 --- a/release/models/network-instance/openconfig-network-instance-policy.yang +++ b/release/models/network-instance/openconfig-network-instance-policy.yang @@ -25,9 +25,16 @@ module openconfig-network-instance-policy { actions) for the network instance model. These statements are generally added to the routing policy model."; - oc-ext:openconfig-version "0.1.1"; + oc-ext:openconfig-version "0.1.2"; - revision "2018-11-21" { + revision "2023-07-25" { + description + "Expand description of + match-protocol-instance/protocol-name."; + reference "0.1.2"; + } + +revision "2018-11-21" { description "Add OpenConfig module metadata extensions."; reference "0.1.1"; @@ -64,7 +71,11 @@ module openconfig-network-instance-policy { type string; description "The name of the protocol instance to match - on in the local network instance"; + on in the local network instance. The string + must match one of /network-instances/ + network-instance/protocols/ + protocol/identifier in the local network + instance."; } } diff --git a/release/models/network-instance/openconfig-network-instance.yang b/release/models/network-instance/openconfig-network-instance.yang index e1710f31e..574caa1ab 100644 --- a/release/models/network-instance/openconfig-network-instance.yang +++ b/release/models/network-instance/openconfig-network-instance.yang @@ -48,7 +48,59 @@ module openconfig-network-instance { virtual switch instance (VSI). Mixed Layer 2 and Layer 3 instances are also supported."; - oc-ext:openconfig-version "4.0.3"; + oc-ext:openconfig-version "4.4.1"; + + revision "2024-02-27" { + description + "Clarify that tables are created only by the system and not + users."; + reference "4.4.1"; + } + + revision "2024-02-27" { + description + "Clarify metric to be used for route redistribution when + disable-metric-propagation is set to true."; + reference "4.4.0"; + } + + revision "2023-12-13" { + description + "Expand when statement for connection-points endpoints"; + reference "4.3.0"; + } + + revision "2023-11-03" { + description + "Add reference URL for Route Redistribution rules"; + reference "4.2.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "4.2.1"; + } + + revision "2023-09-07" { + description + "Add L2RIB Per Producer Next-Hop Capability"; + reference "4.2.0"; + } + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "4.1.1"; + } + + revision "2023-07-12" { + description + "Moved ethernet-segments to top-level + container."; + reference "4.1.0"; + } revision "2023-04-25" { description @@ -385,7 +437,6 @@ module openconfig-network-instance { "Configuration of parameters for EVPN related bridge domains (MAC VRFs) and layer3 VRFs (IP VRFs)"; uses oc-evpn:evpn-config-top; - uses oc-evpn:evpn-ethernet-segment-top; } container encapsulation { @@ -462,6 +513,10 @@ module openconfig-network-instance { for the connection are available for the destination protocol to advertise, or match within its policies."; + reference + "Route Redistribution in OpenConfig Network Instance: + https://github.com/openconfig/public/blob/master/doc/network_instance_redistribution.md#interconnection-of-protocol-ribs"; + leaf src-protocol { type leafref { path "../config/src-protocol"; @@ -560,7 +615,8 @@ module openconfig-network-instance { container tables { description "The routing tables that are managed by this network - instance"; + instance. Tables are created and removed by the system. + Users do not create tables."; list table { key "protocol address-family"; @@ -585,7 +641,10 @@ module openconfig-network-instance { address families enabled, the protocol=BGP, address-family=IPv4 table is created by the system. The removal of the table should not require additional or - explicit configurations"; + explicit configurations. + + Users cannot create or delete tables. Instead a user may + configure table-connections which reference these tables."; leaf protocol { type leafref { @@ -664,7 +723,8 @@ module openconfig-network-instance { container endpoints { when "../../../config/type = 'oc-ni-types:L2P2P' " + - "or ../../../config/type = 'oc-ni-types:L2VSI'" { + "or ../../../config/type = 'oc-ni-types:L2VSI'" + + "or ../../../config/type = 'oc-ni-types:DEFAULT_INSTANCE'" { description "Configuration parameters to associate interfaces into a common group for use in Layer 2 network @@ -766,15 +826,10 @@ module openconfig-network-instance { } } container vxlan { - when "../config/type = 'oc-ni-types:VXLAN'" { - description - "Only include the vxlan configuration when - the endpoint is specified to be vxlan"; - } - description - "Configuration and operational state parameters - relating to a VXLAN tunnel end-point interface"; - uses oc-evpn:evpn-overlays-grp-top; + description + "Configuration and operational state parameters + relating to a VXLAN tunnel end-point interface"; + uses oc-evpn:evpn-overlays-grp-top; } } } @@ -1091,7 +1146,7 @@ module openconfig-network-instance { with the network instance"; leaf id { - type string; + type oc-if:interface-id; description "A unique identifier for this interface - this is expressed as a free-text string"; @@ -1200,11 +1255,12 @@ module openconfig-network-instance { - IS-IS metric may be reflected in BGP MED (and vice versa) - OSPF metric may be reflected in the BGP MED (and vice versa) When this leaf is set to true, this reflection behaviour MUST be - disabled, and rather the metric must be set to the default value, - or explicitly set by policy."; + disabled, and rather the metric must be set to '0' or explicitly + set by policy."; } uses oc-rpol:apply-policy-import-config; + uses oc-rpol:default-policy-import-config; } grouping network-instance-config { diff --git a/release/models/network-instance/openconfig-route-summary.yang b/release/models/network-instance/openconfig-route-summary.yang deleted file mode 100644 index 169894b32..000000000 --- a/release/models/network-instance/openconfig-route-summary.yang +++ /dev/null @@ -1,112 +0,0 @@ -module openconfig-route-summary { - yang-version "1"; - - namespace "http://openconfig.net/yang/route-summary"; - - prefix "oc-rtsummary"; - - import openconfig-extensions { prefix "oc-ext"; } - import openconfig-yang-types { prefix "oc-yang-types"; } - import openconfig-policy-types { prefix "oc-pol-types"; } - import openconfig-network-instance { prefix "oc-ni"; } - - organization - "OpenConfig working group"; - - contact - "OpenConfig working group - www.openconfig.net"; - - description - "This module provides summary of route counts per route type for each network - instance."; - - oc-ext:openconfig-version "1.0.0"; - - revision "2022-12-21" { - description - "Initial version."; - reference "1.0.0"; - } - - grouping route-counter { - description - "Route type counter item."; - - leaf origin-protocol { - description - "Route type that keys the route count list."; - - type identityref { - base "oc-pol-types:INSTALL_PROTOCOL_TYPE"; - } - } - - container total-count { - description - "A collection of route counts."; - uses total-count; - } - } - - grouping total-count { - description - "A collection of route counts."; - - leaf fib-count { - description - "Total number of routes in the FIB."; - type oc-yang-types:counter64; - } - } - - grouping route-summary { - description - "A summary of route count by route type."; - - list route-count { - key "origin-protocol"; - - description - "Route types that keys the route count list."; - - leaf origin-protocol { - type leafref { - path "../state/origin-protocol"; - } - description - "Reference to the source of the route."; - } - - container state { - description - "State parameters for the route summary list entry."; - uses route-counter; - } - } - } - - augment "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:afts/oc-ni:ipv6-unicast" { - description - "Augment the network-instance model with the route summary container for - IPv4."; - - container summary { - uses route-summary; - description - "IPv4 route summary for the network instance."; - } - } - - augment "/oc-ni:network-instances/oc-ni:network-instance/oc-ni:afts/oc-ni:ipv4-unicast" { - description - "Augment the network-instance model with the route summary container for - IPv6."; - - container summary { - uses route-summary; - description - "IPv6 route summary for the network instance."; - } - } -} diff --git a/release/models/optical-transport/openconfig-channel-monitor.yang b/release/models/optical-transport/openconfig-channel-monitor.yang index fff223b55..3623681c6 100644 --- a/release/models/optical-transport/openconfig-channel-monitor.yang +++ b/release/models/optical-transport/openconfig-channel-monitor.yang @@ -26,7 +26,13 @@ module openconfig-channel-monitor { channel monitor (OCM) for optical transport line system elements such as wavelength routers (ROADMs) and amplifiers."; - oc-ext:openconfig-version "0.4.0"; + oc-ext:openconfig-version "0.5.0"; + + revision "2024-04-04" { + description + "Add new leaf media-channel target-power."; + reference "0.5.0"; + } revision "2019-10-24" { description @@ -168,8 +174,16 @@ module openconfig-channel-monitor { description "Average measured optical power over the specified spectrum"; } - } + leaf target-power { + type decimal64 { + fraction-digits 2; + } + units dBm; + description + "Target optical power over the specified spectrum"; + } + } grouping media-channel-spectrum-power-top { description diff --git a/release/models/optical-transport/openconfig-optical-attenuator.yang b/release/models/optical-transport/openconfig-optical-attenuator.yang index 94b3d71bf..cffe56a5a 100644 --- a/release/models/optical-transport/openconfig-optical-attenuator.yang +++ b/release/models/optical-transport/openconfig-optical-attenuator.yang @@ -24,7 +24,13 @@ module openconfig-optical-attenuator { for variable optical attenuators, deployed as part of a transport line system."; - oc-ext:openconfig-version "0.1.0"; + oc-ext:openconfig-version "0.2.0"; + + revision "2024-07-10" { + description + "Adding SYSTEM_CONTROLLED mode with accompanying leaves"; + reference "0.2.0"; + } revision "2019-07-19" { description @@ -62,6 +68,12 @@ module openconfig-optical-attenuator { "Constant attenuation mode"; } + identity SYSTEM_CONTROLLED { + base OPTICAL_ATTENUATOR_MODE; + description + "System controls the attenuation value."; + } + // grouping statements @@ -112,6 +124,28 @@ module openconfig-optical-attenuator { maintain constant output power. When false, the attenuator is set max attenuation or blocked."; } + + leaf max-output-power { + type decimal64 { + fraction-digits 2; + } + units dBm; + description + "The max power level allowed on the output of attenuator. This leaf + is optional when in SYSTEM_CONTROLLED mode."; + } + + leaf max-output-power-threshold { + type decimal64 { + fraction-digits 2; + } + units dB; + description + "If the system-derived-target-output-power is equal to or greater than + 'max-output-power + max-output-power-threshold', a device alarm will + be raised within /system/alarms. This leaf is only relevant when + in SYSTEM_CONTROLLED mode."; + } } grouping optical-attenuator-state { @@ -150,6 +184,15 @@ module openconfig-optical-attenuator { port. This leaf is only valid for ports of type EGRESS."; } + leaf system-derived-target-output-power { + type decimal64 { + fraction-digits 2; + } + units dBm; + description + "The target output power as determined by the device. + This leaf is only relevant when in SYSTEM_CONTROLLED mode."; + } container actual-attenuation { description diff --git a/release/models/optical-transport/openconfig-terminal-device.yang b/release/models/optical-transport/openconfig-terminal-device.yang index bf17ed39c..8001cfb60 100644 --- a/release/models/optical-transport/openconfig-terminal-device.yang +++ b/release/models/optical-transport/openconfig-terminal-device.yang @@ -77,7 +77,21 @@ module openconfig-terminal-device { ports per linecard, separate linecards for client and line ports, etc.)."; - oc-ext:openconfig-version "1.9.0"; + oc-ext:openconfig-version "1.9.2"; + + revision "2024-06-12" { + description + "Add a state leaf to optical channels to reference their logical + channel assignment."; + reference "1.9.2"; + } + + revision "2023-12-13" { + description + "Add reference to the terminal-device-properties-guide.md doc for + operational-mode."; + reference "1.9.1"; + } revision "2021-07-29" { description @@ -1289,6 +1303,8 @@ module openconfig-terminal-device { // Ideally, this leaf should be a leafref to the supported // operational modes, but YANG 1.0 does not allow a r/w // leaf to be a leafref to a r/o leaf. + reference + "https://github.com/openconfig/public/blob/master/doc/terminal-device-properties-guide.md"; } leaf line-port { @@ -1316,6 +1332,18 @@ module openconfig-terminal-device { to the same value across related optical channels."; } + leaf logical-channel-assignment { + type leafref { + path "/oc-opt-term:terminal-device/oc-opt-term:logical-channels" + + "/oc-opt-term:channel/oc-opt-term:index"; + } + description + "Reference to the logical channel that is directly assigned + to this optical channel if it is assigned to a logical channel. + The logical channel must also reference this optical channel at + logical-channel-assignments/assignment/state/optical-channel"; + } + uses oc-transceiver:optical-power-state; container chromatic-dispersion { diff --git a/release/models/optical-transport/openconfig-transport-types.yang b/release/models/optical-transport/openconfig-transport-types.yang index 494c67216..7c3c6a481 100644 --- a/release/models/optical-transport/openconfig-transport-types.yang +++ b/release/models/optical-transport/openconfig-transport-types.yang @@ -22,7 +22,68 @@ module openconfig-transport-types { "This module contains general type definitions and identities for optical transport models."; - oc-ext:openconfig-version "0.18.1"; + oc-ext:openconfig-version "1.0.0"; + + revision "2024-07-24" { + description + "Corrected description for FACILITY and TERMINAL loopback-mode-type + enums."; + reference "1.0.0"; + } + + revision "2024-06-28" { + description + "Add ETH_25GBASE_LR and ETH_25GBASE_SR PMD types."; + reference "0.25.0"; + } + + revision "2024-05-13" { + description + "Fix the QSFP56_DD description as it is meant to be generic."; + reference "0.24.1"; + } + + revision "2024-03-20" { + description + "FlexO support, 800G trib protocol, and OSFP + description update for 800G."; + reference "0.24.0"; + } + + revision "2024-03-12" { + description + "Add TRIBUTARY_RATE_CLASS_TYPE's up to 3200G to support + mating of two 1600G line rates."; + reference "0.23.0"; + } + + revision "2024-01-17" { + description + "Update loopback-mode types."; + reference "0.22.0"; + } + + revision "2024-01-16" { + description + "Added form factors QSFP28_DD and CSFP. + Added new PMDs: ETH_100GBASE_ER4L (MSA 100GBASE-ER4 Lite), + ETH_1GBASE_LX10. + Added References for 100GBASE-CR4 and 40GGBASE-CR4 for DACs"; + reference "0.21.0"; + } + + revision "2023-08-03" { + description + "Add QSFP56 and QSFP56_DD form factor identities and + deprecated QSFP56_DD_TYPE1 and QSFP56_DD_TYPE2 form factor identities."; + reference "0.20.0"; + } + + revision "2023-07-24" { + description + "Add SFP_DD and DSFP form factor identities."; + reference "0.19.0"; + } revision "2023-02-08" { description @@ -168,15 +229,41 @@ module openconfig-transport-types { } enum FACILITY { description - "A loopback which directs traffic normally transmitted - on the port back to the device as if received on the same - port from an external source."; + "A port external loopback at ASIC level. The loopback which + directs traffic received from an external source on the port + back out the transmit side of the same port. Note this mode is + used when external loopback does NOT specify MAC or PHY"; } enum TERMINAL { description - "A loopback which directs traffic received from an external - source on the port back out the transmit side of the same - port."; + "A port internal loopback at ASIC level. The loopback directs + traffic normally transmitted on the port back to the device as + if received on the same port from an external source. Note this + mode is used when internal loopback does NOT specify MAC or PHY."; + } + enum ASIC_PHY_LOCAL { + description + "A port internal loopback at PHY module. The loopback directs + traffic normally transmitted on the port back to the device as + if received on the same port from an external source."; + } + enum ASIC_PHY_REMOTE { + description + "A port external loopback at PHY module. The loopback which + directs traffic received from an external source on the port + back out the transmit side of the same port."; + } + enum ASIC_MAC_LOCAL { + description + "A port internal loopback at MAC module. The loopback directs + traffic normally transmitted on the port back to the device as + if received on the same port from an external source."; + } + enum ASIC_MAC_REMOTE { + description + "A port external loopback at MAC module. The loopback which + directs traffic received from an external source on the port + back out the transmit side of the same port."; } } default NONE; @@ -747,6 +834,11 @@ module openconfig-transport-types { description "400G Ethernet protocol"; } + identity PROT_800GE { + base TRIBUTARY_PROTOCOL_TYPE; + description "800G Ethernet protocol"; + } + identity PROT_OTSIG { base TRIBUTARY_PROTOCOL_TYPE; description "Optical tributary signal group protocol"; @@ -757,6 +849,12 @@ module openconfig-transport-types { description "ODU Flex with CBR protocol"; } + identity PROT_FLEXO { + base TRIBUTARY_PROTOCOL_TYPE; + description + "FlexO protocol as defined in ITU-T G.709.1 and ITU-T G.709.3"; + } + identity PROT_ODUFLEX_GFP { base TRIBUTARY_PROTOCOL_TYPE; description "ODU Flex with GFP protocol"; @@ -818,8 +916,32 @@ module openconfig-transport-types { channels"; } + identity QSFP28_DD { + base TRANSCEIVER_FORM_FACTOR_TYPE; + description + "QSFP-DD with electrical interfaces consisting of 8 lanes that operate at up to + 25 Gbps with NRZ modulation"; + reference "http://qsfp-dd.com"; + } + + identity QSFP56 { + base TRANSCEIVER_FORM_FACTOR_TYPE; + description + "QSFP pluggable optic with support for up to 4x56G physical + channels"; + } + + identity QSFP56_DD { + base TRANSCEIVER_FORM_FACTOR_TYPE; + description + "QSFP-DD quad small form factor pluggable double density + optic providing an 8 lane electrical interface"; + reference "http://qsfp-dd.com"; + } + identity QSFP56_DD_TYPE1 { base TRANSCEIVER_FORM_FACTOR_TYPE; + status deprecated; description "QSFP DD pluggable optic with support for up to 8x56G physical channels. Type 1 uses eight optical and electrical signals."; @@ -827,6 +949,7 @@ module openconfig-transport-types { identity QSFP56_DD_TYPE2 { base TRANSCEIVER_FORM_FACTOR_TYPE; + status deprecated; description "QSFP DD pluggable optic with support for up to 4x112G physical channels. Type 2 uses four optical and eight electrical @@ -853,6 +976,16 @@ module openconfig-transport-types { up to 16 Gb/s signals, including 10 GbE and OTU2"; } + identity CSFP { + base TRANSCEIVER_FORM_FACTOR_TYPE; + description + "Compact Small form-factor pluggable transceiver. It is a version + of SFP with the same mechanical form factor allowing two independent + bidirectional channels per port."; + } + + + identity SFP28 { base TRANSCEIVER_FORM_FACTOR_TYPE; description @@ -867,6 +1000,22 @@ module openconfig-transport-types { 50 Gb/s signal"; } + identity SFP_DD { + base TRANSCEIVER_FORM_FACTOR_TYPE; + description + "SFP-DD electrical interfaces will employ 2 lanes that operate up to + 25 Gbps NRZ modulation or 56 Gbps PAM4 modulation, providing + solutions up to 50 Gbps or 112 Gbps PAM4 aggregate"; + reference "http://sfp-dd.com"; + } + + identity DSFP { + base TRANSCEIVER_FORM_FACTOR_TYPE; + description + "A transceiver implementing the DSFP Transceiver specification"; + reference "https://dsfpmsa.org/"; + } + identity XFP { base TRANSCEIVER_FORM_FACTOR_TYPE; description @@ -885,7 +1034,7 @@ module openconfig-transport-types { base TRANSCEIVER_FORM_FACTOR_TYPE; description "Octal small form factor pluggable transceiver supporting - 400 Gb/s."; + 400 Gb/s or 800 Gb/s."; } identity NON_PLUGGABLE { @@ -942,6 +1091,12 @@ module openconfig-transport-types { "Ethernet compliance codes (PMD) supported by transceivers"; } + identity ETH_1000BASE_LX10 { + base ETHERNET_PMD_TYPE; + description "Ethernet compliance code: ETH_1000BASE_LX10"; + reference "802.3ah-2004(CL59)"; + } + identity ETH_10GBASE_LRM { base ETHERNET_PMD_TYPE; description "Ethernet compliance code: 10GBASE_LRM"; @@ -967,9 +1122,24 @@ module openconfig-transport-types { description "Ethernet compliance code: 10GBASE_SR"; } + identity ETH_25GBASE_LR { + base ETHERNET_PMD_TYPE; + description "Ethernet compliance code: 25GBASE_LR"; + reference "IEEE 802.3cc-2022 (CL114)"; + } + + identity ETH_25GBASE_SR { + base ETHERNET_PMD_TYPE; + description "Ethernet compliance code: 25GBASE_SR"; + reference "IEEE 802.3by-2022 (CL112)"; + } + identity ETH_40GBASE_CR4 { base ETHERNET_PMD_TYPE; - description "Ethernet compliance code: 40GBASE_CR4"; + description "Ethernet compliance code: 40GBASE_CR4. + This PMD is used in Direct Attach Cables (DAC) + and Active Optical Cables (AOC)"; + reference "IEEE 802.3ba 40GBASE-CR4"; } identity ETH_40GBASE_SR4 { @@ -1027,6 +1197,11 @@ module openconfig-transport-types { description "Ethernet compliance code: 100GBASE_LR4"; } + identity ETH_100GBASE_ER4L { + base ETHERNET_PMD_TYPE; + description "Ethernet compliance code: 100GBASE_ER4L"; + } + identity ETH_100GBASE_ER4 { base ETHERNET_PMD_TYPE; description "Ethernet compliance code: 100GBASE_ER4"; @@ -1049,7 +1224,10 @@ module openconfig-transport-types { identity ETH_100GBASE_CR4 { base ETHERNET_PMD_TYPE; - description "Ethernet compliance code: 100GBASE_CR4"; + description "Ethernet compliance code: 100GBASE_CR4. + This PMD is used in Direct Attach Cables (DAC) + and Active Optical Cables (AOC)"; + reference "IEEE 802.3bj 100GBASE-CR4"; } identity ETH_100GBASE_FR { @@ -1371,6 +1549,198 @@ module openconfig-transport-types { "1600G tributary signal rate"; } + identity TRIB_RATE_1650G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "1650G tributary signal rate"; + } + + identity TRIB_RATE_1700G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "1700G tributary signal rate"; + } + + identity TRIB_RATE_1750G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "1750G tributary signal rate"; + } + + identity TRIB_RATE_1800G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "1800G tributary signal rate"; + } + + identity TRIB_RATE_1850G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "1850G tributary signal rate"; + } + + identity TRIB_RATE_1900G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "1900G tributary signal rate"; + } + + identity TRIB_RATE_1950G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "1950G tributary signal rate"; + } + + identity TRIB_RATE_2000G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2000G tributary signal rate"; + } + + identity TRIB_RATE_2050G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2050G tributary signal rate"; + } + + identity TRIB_RATE_2100G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2100G tributary signal rate"; + } + + identity TRIB_RATE_2150G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2150G tributary signal rate"; + } + + identity TRIB_RATE_2200G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2200G tributary signal rate"; + } + + identity TRIB_RATE_2250G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2250G tributary signal rate"; + } + + identity TRIB_RATE_2300G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2300G tributary signal rate"; + } + + identity TRIB_RATE_2350G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2350G tributary signal rate"; + } + + identity TRIB_RATE_2400G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2400G tributary signal rate"; + } + + identity TRIB_RATE_2450G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2450G tributary signal rate"; + } + + identity TRIB_RATE_2500G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2500G tributary signal rate"; + } + + identity TRIB_RATE_2550G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2550G tributary signal rate"; + } + + identity TRIB_RATE_2600G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2600G tributary signal rate"; + } + + identity TRIB_RATE_2650G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2650G tributary signal rate"; + } + + identity TRIB_RATE_2700G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2700G tributary signal rate"; + } + + identity TRIB_RATE_2750G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2750G tributary signal rate"; + } + + identity TRIB_RATE_2800G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2800G tributary signal rate"; + } + + identity TRIB_RATE_2850G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2850G tributary signal rate"; + } + + identity TRIB_RATE_2900G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2900G tributary signal rate"; + } + + identity TRIB_RATE_2950G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "2950G tributary signal rate"; + } + + identity TRIB_RATE_3000G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "3000G tributary signal rate"; + } + + identity TRIB_RATE_3050G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "3050G tributary signal rate"; + } + + identity TRIB_RATE_3100G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "3100G tributary signal rate"; + } + + identity TRIB_RATE_3150G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "3150G tributary signal rate"; + } + + identity TRIB_RATE_3200G { + base TRIBUTARY_RATE_CLASS_TYPE; + description + "3200G tributary signal rate"; + } + identity LOGICAL_ELEMENT_PROTOCOL_TYPE { description "Type of protocol framing used on the logical channel or diff --git a/release/models/optical-transport/openconfig-wavelength-router.yang b/release/models/optical-transport/openconfig-wavelength-router.yang index eded5e217..2684521ee 100644 --- a/release/models/optical-transport/openconfig-wavelength-router.yang +++ b/release/models/optical-transport/openconfig-wavelength-router.yang @@ -41,7 +41,13 @@ module openconfig-wavelength-router { target spectrum power profile over the full spectrum instead of individual media channels."; - oc-ext:openconfig-version "1.1.0"; + oc-ext:openconfig-version "1.2.0"; + + revision "2024-04-08" { + description + "Add attenuation-control-range to media channel config"; + reference "1.2.0"; + } revision "2021-07-26" { description @@ -168,6 +174,29 @@ module openconfig-wavelength-router { within the order of minutes"; } + // identity statements + identity ATTENUATION_CONTROL_RANGE { + description + "The definition for different types of modes to specify + attenuation control range settings on a media channel"; + } + + identity CONTROL_RANGE_FULL { + base ATTENUATION_CONTROL_RANGE; + description + "Media channel power compensation range is not constrained, + and is limited by available WSS dynamic range. Operator does not + explicitly set the undershoot and overshoot compensation range"; + } + + identity CONTROL_RANGE_LIMITED { + base ATTENUATION_CONTROL_RANGE; + description + "Media channel undershoot and overshoot compensation ranges + are defined by max-undershoot-compensation and + max-overshoot-compensation"; + } + identity ASE_CONTROL_MODE { description "The definition for different types of ASE control modes @@ -554,6 +583,19 @@ module openconfig-wavelength-router { is configured"; } + leaf media-channel-injection-offset { + type decimal64 { + fraction-digits 2; + } + units dB; + description + "Defines the optical power offset value relative to the + ASE injection threshold at which point ASE should be removed + and the media-channel should be injected. Requires + ase-injection-delta or ase-injection-threshold to be + configured"; + } + leaf attenuation-control-mode { type identityref { base ATTENUATION_CONTROL_MODE; @@ -563,6 +605,46 @@ module openconfig-wavelength-router { The control mode defines the behavior of how the attenuation across a media channel is set"; } + + leaf attenuation-control-range { + type identityref { + base ATTENUATION_CONTROL_RANGE; + } + description + "Sets the attenuation control range for the media channel. + The control range defines the amount of media channel + undershoot and overshoot compensation that will be applied + when performing power targeting to meet the defined output + port spectrum power profile"; + } + + leaf max-undershoot-compensation { + type decimal64 { + fraction-digits 2; + } + when "../attenuation-control-range = 'CONTROL_RANGE_LIMITED'"; + units dB; + description + "Defines the maximum allowable WSS attenuation adjustment + the system will use to compensate a channel with input power + lower than the defined target power at the input. This value + is measured relative to the baseline WSS attenuation + established for an individual media-channel"; + } + + leaf max-overshoot-compensation { + type decimal64 { + fraction-digits 2; + } + when "../attenuation-control-range = 'CONTROL_RANGE_LIMITED'"; + units dB; + description + "Defines the maximum allowable WSS attenuation adjustment + the system will use to compensate a channel with input power + higher than the defined target power at the input. This + value is measured relative to the baseline WSS attenuation + established for an individual media-channel"; + } } grouping media-channel-state { diff --git a/release/models/ospf/openconfig-ospfv2-area-interface.yang b/release/models/ospf/openconfig-ospfv2-area-interface.yang index 52d560bad..7fa65cee0 100644 --- a/release/models/ospf/openconfig-ospfv2-area-interface.yang +++ b/release/models/ospf/openconfig-ospfv2-area-interface.yang @@ -25,7 +25,32 @@ submodule openconfig-ospfv2-area-interface { "This submodule provides OSPFv2 configuration and operational state parameters that are specific to the area context"; - oc-ext:openconfig-version "0.4.2"; + oc-ext:openconfig-version "0.5.2"; + + revision "2024-06-17" { + description + "Correct ROUTER_INFORMATION_LSA to ROUTER_INFORMATION."; + reference "0.5.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "0.5.1"; + } + + revision "2023-08-25" { + description + "Add leaf metric to lsdb-summary-lsa-state."; + reference "0.5.0"; + } + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "0.4.3"; + } revision "2023-07-05" { description @@ -110,7 +135,7 @@ submodule openconfig-ospfv2-area-interface { "Configuration parameters for an OSPF interface"; leaf id { - type string; + type oc-if:interface-id; description "An operator-specified string utilised to uniquely reference this interface"; diff --git a/release/models/ospf/openconfig-ospfv2-area.yang b/release/models/ospf/openconfig-ospfv2-area.yang index 1cc2a9520..f65f58979 100644 --- a/release/models/ospf/openconfig-ospfv2-area.yang +++ b/release/models/ospf/openconfig-ospfv2-area.yang @@ -23,7 +23,32 @@ submodule openconfig-ospfv2-area { "This submodule provides OSPFv2 configuration and operational state parameters that are specific to the area context"; - oc-ext:openconfig-version "0.4.2"; + oc-ext:openconfig-version "0.5.2"; + + revision "2024-06-17" { + description + "Correct ROUTER_INFORMATION_LSA to ROUTER_INFORMATION."; + reference "0.5.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "0.5.1"; + } + + revision "2023-08-25" { + description + "Add leaf metric to lsdb-summary-lsa-state."; + reference "0.5.0"; +} + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "0.4.3"; + } revision "2023-07-05" { description diff --git a/release/models/ospf/openconfig-ospfv2-common.yang b/release/models/ospf/openconfig-ospfv2-common.yang index d5c2fd945..34f9c3b23 100644 --- a/release/models/ospf/openconfig-ospfv2-common.yang +++ b/release/models/ospf/openconfig-ospfv2-common.yang @@ -17,7 +17,32 @@ submodule openconfig-ospfv2-common { "This submodule provides OSPFv2 configuration and operational state parameters that are shared across multiple contexts"; - oc-ext:openconfig-version "0.4.2"; + oc-ext:openconfig-version "0.5.2"; + + revision "2024-06-17" { + description + "Correct ROUTER_INFORMATION_LSA to ROUTER_INFORMATION."; + reference "0.5.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "0.5.1"; + } + + revision "2023-08-25" { + description + "Add leaf metric to lsdb-summary-lsa-state."; + reference "0.5.0"; +} + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "0.4.3"; + } revision "2023-07-05" { description diff --git a/release/models/ospf/openconfig-ospfv2-global.yang b/release/models/ospf/openconfig-ospfv2-global.yang index 832bf1103..96504073c 100644 --- a/release/models/ospf/openconfig-ospfv2-global.yang +++ b/release/models/ospf/openconfig-ospfv2-global.yang @@ -23,7 +23,32 @@ submodule openconfig-ospfv2-global { "This submodule provides OSPFv2 configuration and operational state parameters that are global to a particular OSPF instance"; - oc-ext:openconfig-version "0.4.2"; + oc-ext:openconfig-version "0.5.2"; + + revision "2024-06-17" { + description + "Correct ROUTER_INFORMATION_LSA to ROUTER_INFORMATION."; + reference "0.5.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "0.5.1"; + } + + revision "2023-08-25" { + description + "Add leaf metric to lsdb-summary-lsa-state."; + reference "0.5.0"; + } + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "0.4.3"; + } revision "2023-07-05" { description @@ -305,6 +330,7 @@ submodule openconfig-ospfv2-global { } uses oc-rpol:apply-policy-import-config; + uses oc-rpol:default-policy-import-config; } grouping ospfv2-global-max-metric-config { diff --git a/release/models/ospf/openconfig-ospfv2-lsdb.yang b/release/models/ospf/openconfig-ospfv2-lsdb.yang index 5a39769fb..113d31630 100644 --- a/release/models/ospf/openconfig-ospfv2-lsdb.yang +++ b/release/models/ospf/openconfig-ospfv2-lsdb.yang @@ -22,7 +22,31 @@ submodule openconfig-ospfv2-lsdb { "An OpenConfig model for the Open Shortest Path First (OSPF) version 2 link-state database (LSDB)"; - oc-ext:openconfig-version "0.4.2"; + oc-ext:openconfig-version "0.5.2"; + + revision "2024-06-17" { + description + "Correct ROUTER_INFORMATION_LSA to ROUTER_INFORMATION."; + reference "0.5.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "0.5.1"; + } + + revision "2023-08-25" { + description + "Add leaf metric to lsdb-summary-lsa-state."; + reference "0.5.0"; +} + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "0.4.3"; + } revision "2023-07-05" { description @@ -731,7 +755,7 @@ submodule openconfig-ospfv2-lsdb { } // grace LSA container router-information { - when "../state/type = 'oc-ospf-types:ROUTER_INFORMATION_LSA'" { + when "../state/type = 'oc-ospf-types:ROUTER_INFORMATION'" { description "Include the router-information container when the opaque LSA type is specified to be an RI LSA"; @@ -1212,6 +1236,13 @@ submodule openconfig-ospfv2-lsdb { "The mask of the network described by the Summary LSA represented as a CIDR mask."; } + + leaf metric { + type oc-ospf-types:ospf-metric; + description + "The cost of utilising the summary link specified independent of TOS."; + } + } grouping ospfv2-lsdb-asexternal-lsa-common-parameters { diff --git a/release/models/ospf/openconfig-ospfv2.yang b/release/models/ospf/openconfig-ospfv2.yang index f75a207bd..f909bdd85 100644 --- a/release/models/ospf/openconfig-ospfv2.yang +++ b/release/models/ospf/openconfig-ospfv2.yang @@ -34,7 +34,32 @@ module openconfig-ospfv2 { "An OpenConfig model for Open Shortest Path First (OSPF) version 2"; - oc-ext:openconfig-version "0.4.2"; + oc-ext:openconfig-version "0.5.2"; + + revision "2024-06-17" { + description + "Correct ROUTER_INFORMATION_LSA to ROUTER_INFORMATION."; + reference "0.5.2"; + } + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "0.5.1"; + } + + revision "2023-08-25" { + description + "Add leaf metric to lsdb-summary-lsa-state."; + reference "0.5.0"; + } + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "0.4.3"; + } revision "2023-07-05" { description diff --git a/release/models/p4rt/openconfig-p4rt.yang b/release/models/p4rt/openconfig-p4rt.yang index c6f615445..cc17fa66a 100644 --- a/release/models/p4rt/openconfig-p4rt.yang +++ b/release/models/p4rt/openconfig-p4rt.yang @@ -26,7 +26,13 @@ module openconfig-p4rt { The P4RT protocol specification is linked from https://p4.org/specs/ under the P4Runtime heading."; - oc-ext:openconfig-version "0.4.0"; + oc-ext:openconfig-version "1.0.0"; + + revision 2023-12-13 { + description + "Remove unused chassis id"; + reference "1.0.0"; + } revision 2022-08-19 { description @@ -104,18 +110,6 @@ module openconfig-p4rt { } } - grouping p4rt-chassis-config { - description - "Config regarding P4RT use cases which corresponds to the global device hardware package"; - - leaf id { - type uint32; - description - "An identifier used for the root of oc-p4rt:node-id. It is used to - indicate which oc-p4rt:node-id's belong to the same device"; - } - } - grouping p4rt-ic-config { description "Integrated-circuit specific configuration that is applicable to devices @@ -176,20 +170,6 @@ module openconfig-p4rt { uses p4rt-ic-config; } - augment "/oc-platform:components/oc-platform:component/" + - "oc-platform:chassis/oc-platform:config" { - description - "Add P4RT chassis config to platform chassis component."; - uses p4rt-chassis-config; - } - - augment "/oc-platform:components/oc-platform:component/" + - "oc-platform:chassis/oc-platform:state" { - description - "Add P4RT chassis state to platform chassis component."; - uses p4rt-chassis-config; - } - } // rpc statements diff --git a/release/models/platform/.spec.yml b/release/models/platform/.spec.yml index 59ffb1c76..8dfd9472c 100644 --- a/release/models/platform/.spec.yml +++ b/release/models/platform/.spec.yml @@ -11,6 +11,7 @@ - yang/platform/openconfig-platform-cpu.yang - yang/platform/openconfig-platform-ext.yang - yang/platform/openconfig-platform-software.yang + - yang/platform/openconfig-platform-storage.yang - yang/platform/openconfig-platform-fabric.yang - yang/platform/openconfig-platform-pipeline-counters.yang - yang/platform/openconfig-platform-integrated-circuit.yang @@ -31,6 +32,7 @@ - yang/platform/openconfig-platform-ext.yang - yang/platform/openconfig-platform-cpu.yang - yang/platform/openconfig-platform-software.yang + - yang/platform/openconfig-platform-storage.yang - yang/platform/openconfig-platform-fabric.yang - yang/platform/openconfig-platform-pipeline-counters.yang - yang/platform/openconfig-platform-integrated-circuit.yang diff --git a/release/models/platform/openconfig-platform-common.yang b/release/models/platform/openconfig-platform-common.yang index d0195804b..b0fcb1757 100644 --- a/release/models/platform/openconfig-platform-common.yang +++ b/release/models/platform/openconfig-platform-common.yang @@ -20,7 +20,50 @@ submodule openconfig-platform-common { "This modules contains common groupings that are used in multiple components within the platform module."; - oc-ext:openconfig-version "0.23.0"; + oc-ext:openconfig-version "0.30.0"; + + revision "2024-10-13" { + description + "Add storage state io-errors."; + reference "0.30.0"; + } + + revision "2024-10-13" { + description + "Deprecate component id leaf"; + reference "0.29.0"; + } + + revision "2024-08-08" { + description + "Update description of model-name leaf."; + reference "0.28.0"; + } + + revision "2024-05-29" { + description + "Change install-position from leaf-ref to string."; + reference "0.27.0"; + } + + revision "2024-04-12" { + description + "Add install-position, install-component and deprecate location and + slot-id."; + reference "0.26.0"; + } + + revision "2024-01-30" { + description + "Updated description for component-power-type"; + reference "0.25.0"; + } + + revision "2023-11-28" { + description + "Add model-name"; + reference "0.24.0"; + } revision "2023-02-13" { description @@ -226,7 +269,11 @@ submodule openconfig-platform-common { type oc-platform-types:component-power-type; default POWER_ENABLED; description - "Enable or disable power to the component"; + "When set to POWER_DISABLED, the component should be shut down by removing + electrical power. This is intended to be used to prevent the component + from becoming active even after a reboot of the system. A component + (if controller-card) may not honor power-admin-state depending on rules + defined in the description of the component config container."; } } diff --git a/release/models/platform/openconfig-platform-controller-card.yang b/release/models/platform/openconfig-platform-controller-card.yang index 1bea20fe3..4ed5156c7 100644 --- a/release/models/platform/openconfig-platform-controller-card.yang +++ b/release/models/platform/openconfig-platform-controller-card.yang @@ -22,7 +22,13 @@ module openconfig-platform-controller-card { "This module defines data related to CONTROLLER_CARD components in the openconfig-platform model"; - oc-ext:openconfig-version "0.1.0"; + oc-ext:openconfig-version "0.2.0"; + + revision "2024-04-10" { + description + "Added details on power-admin-state leaf"; + reference "0.2.0"; + } revision "2022-07-28" { description @@ -58,8 +64,14 @@ module openconfig-platform-controller-card { augment "/oc-platform:components/oc-platform:component/" + "oc-platform:controller-card/oc-platform:config" { description - "Adding controller card data to physical inventory. This subtree - is only valid when the type of the component is CONTROLLER_CARD."; + "Configuration data for controller card components. + A controller-card can be configured for persistent powered-off + mode using the config/power-admin-state leaf. The reference + path below defines rules for such a configuration."; + + reference + "Rules around power-off configuration in controller-cards: + https://github.com/openconfig/public/blob/master/doc/controller-card_poweroff.md"; uses controller-card-config; } diff --git a/release/models/platform/openconfig-platform-linecard.yang b/release/models/platform/openconfig-platform-linecard.yang index 46c5d2ccd..d0429b640 100644 --- a/release/models/platform/openconfig-platform-linecard.yang +++ b/release/models/platform/openconfig-platform-linecard.yang @@ -22,7 +22,14 @@ module openconfig-platform-linecard { "This module defines data related to LINECARD components in the openconfig-platform model"; - oc-ext:openconfig-version "1.1.0"; +oc-ext:openconfig-version "1.2.0"; + + revision "2024-04-12" { + description + "Add install-position, install-component and deprecate location and + slot-id."; + reference "1.2.0"; + } revision "2023-02-13" { description @@ -89,10 +96,15 @@ module openconfig-platform-linecard { "Operational state data for linecard components"; leaf slot-id { + status deprecated; type string; description "Identifier for the slot or chassis position in which the - linecard is installed"; + linecard is installed. + + This leaf is deprecated and will be replaced by install-position + and install-component leaves in a future major revision of this + model."; } } diff --git a/release/models/platform/openconfig-platform-pipeline-counters.yang b/release/models/platform/openconfig-platform-pipeline-counters.yang index e4bad82a6..9a28d28c2 100644 --- a/release/models/platform/openconfig-platform-pipeline-counters.yang +++ b/release/models/platform/openconfig-platform-pipeline-counters.yang @@ -65,10 +65,22 @@ module openconfig-platform-pipeline-counters { 5 blocks, is to have the abililty to receive all drop counters from all 5 blocks, for example, with one request."; - oc-ext:openconfig-version "0.4.0"; + oc-ext:openconfig-version "0.5.1"; oc-ext:catalog-organization "openconfig"; oc-ext:origin "openconfig"; + revision "2023-10-08" { + description + "More detail description of pipe-line aggregated drop counters"; + reference "0.5.1"; + } + + revision "2023-09-26" { + description + "Add no-route aggregate drop counter."; + reference "0.5.0"; + } + revision "2023-02-03" { description "Add vendor-specific control-plane traffic queue counters"; @@ -1087,7 +1099,18 @@ module openconfig-platform-pipeline-counters { "This captures the aggregation of all counters where the switch is unexpectedly dropping packets. Occurrence of these drops on a stable (no recent hardware or config changes) and otherwise healthy - switch needs further investigation."; + switch needs further investigation. + This leaf counts packet discarded as result of corrupted + programming state in an INTEGRATED_CIRCUIT or corrupted data + structures of packet descriptors. + + Note: corrupted packets received on ingress interfaces should be counted + in `/interfaces/interface/state/counters/in-errors` and NOT counted as + adverse-aggregate. This is because incoming corrupted packets are NOT + a signal of adverse state of an INTEGRATED_CIRCUIT but rather of an + entity adjacent to the Interface, such as a cable or transceiver). Therefore + such drops SHOULD NOT be counted as adverse-aggregate to preserve + a clean signal of INTEGRATED_CIRCUIT adverse state."; } leaf congestion-aggregate { @@ -1096,7 +1119,31 @@ module openconfig-platform-pipeline-counters { "This tracks the aggregation of all counters where the expected conditions of packet drops due to internal congestion in some block of the hardware that may not be visible in through other congestion - indicators like interface discards or queue drop counters."; + indicators like interface discards or queue drop counters. + + This leaf counts packet discarded as result of exceeding + performance limits of an INTEGRATED_CIRCUT, when it processes + non-corrupted packets using legitimate, non-corrupted programming + state of the INTEGRATED_CIRCUIT. + + The typical example is overloading given IC with higher packet rate (pps) + then given chip can handle. For example, let's assume chip X can process + 3.6Bpps of incoming traffic and 2000 Mpps. However if average incoming + packet size is 150B, at full ingress rate this become 3000Mpps. Hence + 1/3 of packets would be cropped and should be counted against + congestion-aggregate. + + Another example is the case when some INTEGRATED_CIRCUIT internal data bus is + too narrow/slow for handling traffic. For example let's assume chip X needs to send + 3Tbps of traffic to an external buffer memory which has only 2Tbps access I/O. In + this case packets would be discarded, because of congestion of memory I/O bus + which is part of the INTEGRATED_CIRCUIT. Depending on the design of the + INTEGRATED_CIRCUIT, packets could be discarded even if interface queues are + not full, hence this scenario is NOT treated as QoS queue tail-drops nor WRED drops. + + Yet another example is the case where extremely large and long + ACL/filter requires more cycles to process than the INTEGRATED_CIRCUIT + has budgeted. "; } leaf packet-processing-aggregate { @@ -1104,7 +1151,25 @@ module openconfig-platform-pipeline-counters { description "This aggregation of counters represents the conditions in which packets are dropped due to legitimate forwarding decisions (ACL drops, - No Route etc.)"; + No Route etc.) + This counter counts packet discarded as result of processing + non-corrupted packet against legitimate, non-corrupted state + of INTEGRATED_CIRCUIT program (FIB content, ACL content, rate-limiting token-buckets) + which mandate packet drop. The examples of this class of discard are: + - dropping packets which destination address to no match any FIB entry + - dropping packets which destination address matches FIB entry pointing + to discard next-hop (e.g. route to null0) + - dropping packts due to ACL/packet filter decission + - dropping packets due to its TTL = 1 + - dropping packets due to its size exceeds egress interface MTU and + packet can't be fragmented (IPv6 or do not fragment bit is set) + - dropping packets due to uRPF rules (note: packet is counted here and + in separate, urpf-aggregate counter simultaneously) + - etc + + Note:The INTEGRATED_CIRCUIT is doing exactly what it is programmed + to do, and the packet is parsable. + "; } leaf urpf-aggregate { @@ -1113,7 +1178,22 @@ module openconfig-platform-pipeline-counters { "This aggregation of counters represents the conditions in which packets are dropped due to failing uRPF lookup check. This counter and the packet-processing-aggregate counter should be incremented - for each uRPF packet drop."; + for each uRPF packet drop. + This counter counts packet discarded as result of Unicast Reverse + Path Forwarding verification."; + reference + "RFC2827: Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing + RFC3704: Ingress Filtering for Multihomed Networks"; + } + + leaf no-route { + type oc-yang:counter64; + description + "This aggregation of counters represents the conditions in which + packets are dropped due to no FIB entry for this ipv4 or ipv6 lookup. + + This counter and the packet-processing-aggregate counter should be + incremented for each no-route packet drop."; } } diff --git a/release/models/platform/openconfig-platform-storage.yang b/release/models/platform/openconfig-platform-storage.yang new file mode 100644 index 000000000..230d03e07 --- /dev/null +++ b/release/models/platform/openconfig-platform-storage.yang @@ -0,0 +1,164 @@ +module openconfig-platform-storage { + +yang-version "1"; + +// namespace +namespace "http://openconfig.net/yang/platform/storage"; + +prefix "oc-storage"; + +import openconfig-platform { + prefix oc-platform; +} +import openconfig-extensions { + prefix oc-ext; +} +import openconfig-yang-types { + prefix oc-yang; +} + +// meta +organization + "OpenConfig working group"; + +contact + "OpenConfig working group + www.openconfig.net"; + +description + "This module defines data related to STORAGE components in the + OpenConfig platform model. + + Portions of this code were derived from the following copyright holders. + References to each copyright holder are mentioned where related content + is used. + + NVM Express Base Specification Revision 2.0a + https://nvmexpress.org/wp-content/uploads/NVMe-NVM-Express-2.0a-2021.07.26-Ratified.pdf + (c) Copyright 2007 to 2021 NVM Express, Inc. ALL RIGHTS RESERVED. + This NVM Express Base Specification, revision 2.0a is proprietary to the + NVM Express, Inc. (also referred to as “Company”) and/or its successors + and assigns. + + S.M.A.R.T. Attribute: Reallocated Sectors Count | Knowledge Base + http://kb.acronis.com."; + +oc-ext:openconfig-version "0.1.0"; + +revision "2024-08-26" { + description + "Initial revision."; + reference + "0.1.0"; +} + +// OpenConfig specific extensions for module metadata. +oc-ext:regexp-posix; +oc-ext:catalog-organization "openconfig"; +oc-ext:origin "openconfig"; + +// identity statements +// typedef statements +// grouping statements + grouping storage-counters-state { + description + "Operational state for storage component statistics. These leaves + are derived from a list of commonly supported S.M.A.R.T. counters. + Note that while common, these attributes may not be supported by + all storage device vendors and media types."; + + leaf soft-read-error-rate { + type oc-yang:counter64; + description + "Uncorrected read errors reported to the operating system. SMART ID + 201."; + reference + "S.M.A.R.T. Attribute: Soft Read Error Rate / Off Track Errors (Maxtor) + | Knowledge Base. kb.acronis.com."; + } + + leaf reallocated-sectors { + type oc-yang:counter64; + description + "Count of reallocated sectors. The raw value represents a count of + the bad sectors that have been found and remapped. SMART ID 5."; + reference + "S.M.A.R.T. Attribute: Reallocated Sectors Count | Knowledge Base - + kb.acronis.com"; + } + + leaf end-to-end-error { + type oc-yang:counter64; + description + "Count of parity errors which occur in the data path to the media. + SMART ID 184."; + reference + "Acronis Drive Monitor: Disk Health Calculation Knowledge Base - + kb.acronis.com"; + } + + leaf offline-uncorrectable-sectors-count { + type oc-yang:counter64; + description + "The total count of uncorrectable errors when reading/writing a + sector. SMART ID 198."; + reference + "Acronis Drive Monitor: Disk Health Calculation Knowledge Base - + kb.acronis.com"; + } + + leaf life-left { + type uint8; + description + "Indicates the approximate SSD life left, in terms of program/erase + cycles or available reserved blocks. A normalized value of 100 + represents a new drive, with a threshold value at 10 indicating a need + for replacement. A value of 0 may mean that the drive is operating in + read-only mode to allow data recovery. SMART ID 231."; + reference + "SMART attribute details, + https://media.kingston.com/support/downloads/MKP_306_SMART_attribute.pdf"; + } + + leaf percentage-used { + type uint8; + description + "Contains a vendor specific estimate of the percentage of NVM + subsystem life used based on the actual usage and the manufacturer’s + prediction of NVM life. A value of 100 indicates that the estimated + endurance of the NVM in the NVM subsystem has been consumed, but may + not indicate an NVM subsystem failure. The value is allowed to exceed + 100. Percentages greater than 254 shall be represented as 255."; + reference + "NVM Express Base Specification Revision 2.0a + https://nvmexpress.org/wp-content/uploads/NVMe-NVM-Express-2.0a-2021.07.26-Ratified.pdf"; + } + } + grouping storage-state { + description + "Storage component state. These counters are derived from the + linux kernel block layer statistics in /sys/block//stat. + Implementations which do not use the linux kernel to access + storage should provide equivalent counters."; + reference + "https://www.kernel.org/doc/Documentation/block/stat.txt"; + + container counters { + description + "A collection of storage specific statistics entitites."; + + uses storage-counters-state; + } + } + + // data definition statements + // augment statements + augment "/oc-platform:components/oc-platform:component/" + + "oc-platform:storage/oc-platform:state" { + description + "Adding storage data to component model"; + + uses storage-state; + } +} + diff --git a/release/models/platform/openconfig-platform-transceiver.yang b/release/models/platform/openconfig-platform-transceiver.yang index 388953b49..e60220563 100644 --- a/release/models/platform/openconfig-platform-transceiver.yang +++ b/release/models/platform/openconfig-platform-transceiver.yang @@ -66,7 +66,31 @@ 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.11.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 + "Clarify transceiver module threshold for input-power."; + reference "0.14.0"; + } + +revision "2023-08-30" { + description + "Add transceiver module temperature thresholds"; + reference "0.13.0"; + } + + revision "2023-06-27" { + description + "Add tx bias and voltage thresholds"; + reference "0.12.0"; + } revision "2023-05-03" { description @@ -186,7 +210,11 @@ module openconfig-platform-transceiver { 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; } @@ -203,7 +231,12 @@ module openconfig-platform-transceiver { 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; } @@ -215,7 +248,11 @@ module openconfig-platform-transceiver { 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; } @@ -233,7 +270,11 @@ module openconfig-platform-transceiver { "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."; } } @@ -366,24 +407,6 @@ module openconfig-platform-transceiver { 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; } @@ -761,7 +784,9 @@ module openconfig-platform-transceiver { } units celsius; description - "The upper temperature threshold for the laser temperature sensor."; + "The upper temperature threshold for the laser temperature sensor. + This leaf value is compared to the instant value of + laser-temperature."; } leaf laser-temperature-lower { type decimal64 { @@ -769,7 +794,9 @@ module openconfig-platform-transceiver { } units celsius; description - "The lower temperature threshold for the laser temperature sensor."; + "The lower temperature threshold for the laser temperature sensor. + This leaf value is compared to the instant value of + laser-temperature."; } leaf output-power-upper{ type decimal64 { @@ -777,7 +804,10 @@ module openconfig-platform-transceiver { } units dBm; description - "The upper power threshold for the laser output power."; + "The upper power threshold for the laser output power. This threshold + applies to every physical-channel on the transceiver and does not + apply to the aggregate transceiver optical-output-power. This leaf + value is compared to the instant value of optical-output-power."; } leaf output-power-lower{ type decimal64 { @@ -785,7 +815,10 @@ module openconfig-platform-transceiver { } units dBm; description - "The lower power threshold for the laser output power."; + "The lower power threshold for the laser output power. This threshold + applies to every physical-channel on the transceiver and does not + apply to the aggregate transceiver optical-output-power. This leaf + value is compared to the instant value of optical-output-power."; } leaf input-power-upper{ type decimal64 { @@ -793,7 +826,10 @@ module openconfig-platform-transceiver { } units dBm; description - "The upper power threshold for the laser input power."; + "The upper power threshold for the laser input power. This threshold + applies to every physical-channel on the transceiver and does not + apply to the aggregate transceiver optical-input-power. This leaf + value is compared to the instant value of optical-input-power."; } leaf input-power-lower{ type decimal64 { @@ -801,7 +837,64 @@ module openconfig-platform-transceiver { } units dBm; description - "The lower power threshold for the laser input power."; + "The lower power threshold for the laser input power. This threshold + applies to every physical-channel on the transceiver and does not + apply to the aggregate transceiver optical-input-power. This leaf + value is compared to the instant value of optical-input-power."; + } + leaf laser-bias-current-upper{ + description + "The upper threshold for the laser bias current. This leaf value is + compared to the instant value of last-bias-current."; + type decimal64 { + fraction-digits 2; + } + units mA; + } + leaf laser-bias-current-lower{ + description + "The lower threshold for the laser bias current. This leaf value is + compared to the instant value of last-bias-current."; + type decimal64 { + fraction-digits 2; + } + units mA; + } + leaf supply-voltage-upper{ + description + "The upper threshold for the transceiver supply voltage. This leaf + value is compared to the instant value of supply-voltage."; + type decimal64 { + fraction-digits 2; + } + units volts; + } + leaf supply-voltage-lower{ + description + "The lower threshold for the transceiver supply voltage. This leaf + value is compared to the instant value of supply-voltage."; + type decimal64 { + fraction-digits 2; + } + units volts; + } + leaf module-temperature-lower { + type decimal64 { + fraction-digits 1; + } + units celsius; + description + "The lower temperature threshold for the transceiver module. This + leaf value is compared to the instant value of module-temperature."; + } + leaf module-temperature-upper { + type decimal64 { + fraction-digits 1; + } + units celsius; + description + "The upper temperature threshold for the transceiver module. This + leaf value is compared to the instant value of module-temperature."; } } diff --git a/release/models/platform/openconfig-platform-types.yang b/release/models/platform/openconfig-platform-types.yang index d28881f9e..88b0ef521 100644 --- a/release/models/platform/openconfig-platform-types.yang +++ b/release/models/platform/openconfig-platform-types.yang @@ -22,7 +22,20 @@ module openconfig-platform-types { "This module defines data types (e.g., YANG identities) to support the OpenConfig component inventory model."; - oc-ext:openconfig-version "1.6.0"; + oc-ext:openconfig-version "1.8.0"; + + + revision "2024-04-30" { + description + "Add FAN_TRAY"; + reference "1.8.0"; + } + + revision "2024-01-30" { + description + "Add component-last-poweroff-reason grouping"; + reference "1.7.0"; + } revision "2023-06-27" { description @@ -218,6 +231,34 @@ module openconfig-platform-types { uses oc-types:min-max-time; } + grouping component-last-poweroff-reason { + description + "Common grouping for recording the reason of a component's + power-off state"; + + leaf trigger { + type component-last-poweroff-reason-trigger; + description + "Records the generic triggers for the last poweroff + event. Component power-off can be triggered + in various ways, + - USER_INITIATED + - SYSTEM_INITIATED + - POWER_FAILURE + This field is not updated during reboots; those are + tracked in the 'last-reboot-reason' leaf."; + } + + leaf details { + type string; + description + "Provides a detailed reason for component power-off. + For system-initiated power-offs, this field can include + specific causes (e.g., critical errors resulting in a + controller-card bootloop)."; + } + } + grouping component-redundant-role-switchover-reason { description "Common grouping for recording the reason of a component's @@ -292,6 +333,12 @@ module openconfig-platform-types { "Cooling fan, or could be some other heat-reduction component"; } + identity FAN_TRAY { + base OPENCONFIG_HARDWARE_COMPONENT; + description + "Contains multiple fans that work in unison to cool the router components."; + } + identity SENSOR { base OPENCONFIG_HARDWARE_COMPONENT; description @@ -538,4 +585,24 @@ module openconfig-platform-types { description "Records how the role switchover is triggered."; } + + typedef component-last-poweroff-reason-trigger { + type enumeration { + enum USER_INITIATED { + description + "User initiated the power-off, e.g. via command line."; + } + enum SYSTEM_INITIATED { + description + "The system initiated the power-off, e.g. due to + critical errors in the component of the primary role."; + } + enum POWER_FAILURE { + description + "The last power-off was due to power failure."; + } + } + description + "Records how the last power-off was triggered."; + } } diff --git a/release/models/platform/openconfig-platform.yang b/release/models/platform/openconfig-platform.yang index 7a1488ba4..742c3e8af 100644 --- a/release/models/platform/openconfig-platform.yang +++ b/release/models/platform/openconfig-platform.yang @@ -65,7 +65,50 @@ module openconfig-platform { (presence or absence of a component) and state (physical attributes or status)."; - oc-ext:openconfig-version "0.23.0"; + oc-ext:openconfig-version "0.30.0"; + + revision "2024-10-13" { + description + "Add storage state io-errors."; + reference "0.30.0"; + } + + revision "2024-10-13" { + description + "Deprecate component id leaf"; + reference "0.29.0"; + } + + revision "2024-08-08" { + description + "Update description of model-name leaf."; + reference "0.28.0"; + } + + revision "2024-05-29" { + description + "Change install-position from leaf-ref to string."; + reference "0.27.0"; + } + + revision "2024-04-12" { + description + "Add install-position, install-component and deprecate location and + slot-id."; + reference "0.26.0"; + } + + revision "2024-01-30" { + description + "Updated description for component-power-type"; + reference "0.25.0"; + } + + revision "2023-11-28" { + description + "Add model-name"; + reference "0.24.0"; + } revision "2023-02-13" { description @@ -390,6 +433,7 @@ module openconfig-platform { leaf id { type string; + status deprecated; description "Unique identifier assigned by the system for the component"; @@ -397,12 +441,61 @@ module openconfig-platform { leaf location { type string; + status deprecated; 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."; + system should populate the more specific slot-id. + + This leaf is deprecated and replaced by install-position and + install-component."; + } + + leaf install-position { + type string; + description + "System-supplied index to a position where this component is + installed. The position may be referred in device documenation + as a port, slot, bay, socket, etc. This string must only + indicate the name of the position, and not any indication of + the name of the parent component within the system. Instead, + parent component name should be present in the 'parent' leaf. + + Typically the install-position is a number, but it is observed + that some devices may use letters or alphanumerics. The + position name should be the same name used to physically + identify the position in documentation or printed on the + device. + + Any component which is removable is expected to have + an install-position and an install-component which points to + an ancestor component where the connection occurs. + + For component types that have an explicit slot-id attribute, + such as LINECARD, the system should populate slot-id, + install-position and install-component. This will facilitate a + transition to deprecate slot-id."; + } + + leaf install-component { + type leafref { + path "../name"; + } + description + "This leaf contains the name of the ancestor component which + contains the 'install-position'. This creates a distinct + mapping between a removable component and the target component + it is installed into. Note there may be zero or more + intermediate components between the removable component and + the install-component. + + For example, consider the component tree + PORT ['eth1/2']-> INTEGRATED_CIRCUIT ['npu1']-> LINECARD ['lc1']. + The PORT has an install-position of '2' and install-component named + 'lc1'. The intermediate INTEGRATED-CIRCUIT component is not + present in either install-position or install-component leaves."; } leaf description { @@ -463,6 +556,16 @@ module openconfig-platform { (field replaceable unit)"; } + leaf model-name { + when "../removable = 'true' or ../type = 'oc-platform-types:CHASSIS'"; + mandatory true; + type string; + description + "Model name that would be found in a catalog of stock keeping + units (SKU) and should be the orderable name of the + component."; + } + leaf clei-code { type string; description @@ -517,6 +620,27 @@ module openconfig-platform { this reports the role of the component."; } + container last-poweroff-reason { + description + "Records last power-off reason for a component."; + + uses oc-platform-types:component-last-poweroff-reason; + } + + leaf last-poweroff-time { + type oc-types:timeticks64; + units "nanoseconds"; + description + "This records the last time a component was directly powered + down. The value is a Unix Epoch timestamp (nanoseconds since + Jan 1, 1970 00:00:00 UTC). Component power-off can be: + - USER_INITIATED + - SYSTEM_INITIATED + - POWER_FAILURE + This field is not updated during reboots; those are tracked + in the 'last-reboot-time' leaf."; + } + container last-switchover-reason { description "For components that have redundant roles (e.g. two @@ -553,7 +677,8 @@ module openconfig-platform { description "This reports the time of the last reboot of the component. The value is the timestamp in nanoseconds relative to the Unix Epoch - (Jan 1, 1970 00:00:00 UTC)."; + (Jan 1, 1970 00:00:00 UTC). This timer is not updated during + power shutdowns; those are tracked in 'last-poweroff-time' leaf."; } leaf switchover-ready { @@ -1128,9 +1253,7 @@ module openconfig-platform { container config { description - "Configuration data for controller card components. Note that disabling - power to the primary supervisor should be rejected, and the operator is - required to perform a switchover first."; + "Configuration data for controller card components."; } container state { diff --git a/release/models/policy/openconfig-policy-types.yang b/release/models/policy/openconfig-policy-types.yang index d33dfe28d..dea5bf0fa 100644 --- a/release/models/policy/openconfig-policy-types.yang +++ b/release/models/policy/openconfig-policy-types.yang @@ -10,6 +10,7 @@ module openconfig-policy-types { // import some basic types import ietf-yang-types { prefix yang; } import openconfig-extensions { prefix oc-ext; } + import openconfig-yang-types { prefix oc-yang; } // meta organization @@ -24,9 +25,15 @@ module openconfig-policy-types { policy. It can be imported by modules that contain protocol- specific policy conditions and actions."; - oc-ext:openconfig-version "3.2.3"; + oc-ext:openconfig-version "3.3.0"; - revision "2022-11-08" { + revision "2024-05-14" { + description + "Add hex-string-prefixed to typedef tag-type."; + reference "3.3.0"; + } + +revision "2022-11-08" { description "Add INSTALL_PROTOCOL_TYPE local."; reference "3.2.3"; @@ -165,14 +172,18 @@ module openconfig-policy-types { type union { type uint32; type yang:hex-string; + type oc-yang:hex-string-prefixed { + length "3..18"; + } } - description "type for expressing route tags on a local system, - including IS-IS and OSPF; may be expressed as either decimal or - hexidecimal integer"; + description + "Type for expressing route tags on a local system, including IS-IS + and OSPF; This may be expressed as either decimal or hexidecimal + integer."; reference - "RFC 2178 OSPF Version 2 + "RFC 2178 OSPF Version 2 specifies a 32 bit value RFC 5130 A Policy Control Mechanism in IS-IS Using - Administrative Tags"; + Administrative Tags specifies 32 bit and 64 bit values."; } identity INSTALL_PROTOCOL_TYPE { diff --git a/release/models/policy/openconfig-routing-policy.yang b/release/models/policy/openconfig-routing-policy.yang index bf419b779..8a61d8be0 100644 --- a/release/models/policy/openconfig-routing-policy.yang +++ b/release/models/policy/openconfig-routing-policy.yang @@ -52,9 +52,14 @@ module openconfig-routing-policy { corresponding individual policy statements in order. When a condition statement in a policy statement is satisfied, the corresponding action statement is executed. If the action - statement has either accept-route or reject-route actions, policy - evaluation of the current policy definition stops, and no further - policy definitions in the chain are evaluated. + statement has a final disposition configured as policy result, either + accept-route or reject-route, evaluation of the current policy definition + stops, and no further policy statements are evaluated. In case there is a + policy chain, no further policy definitions in the chain are evaluated. + + If the action statement has the NEXT_STATEMENT policy result, all the + defined actions are executed and policy evaluation proceeds to the next + statement. The NEXT_STATEMENT is the default policy result action. If the condition is not satisfied, then evaluation proceeds to the next policy statement. If none of the policy statement @@ -75,9 +80,34 @@ module openconfig-routing-policy { policy. Similarly, a reject-route action returns false. If the subroutine returns true, the calling policy continues to evaluate the remaining conditions (using a modified route if the - subroutine performed any changes to the route)."; + subroutine performed any changes to the route). + + If a routing protocol is defined and the related + apply-policy/default-(import|export)-policy leaf is not set, the + default value for the default-(import|export)-policy leaf must be + applied. See RFC6020 7.6.1 which applies to this model."; + + oc-ext:openconfig-version "3.4.2"; + + revision "2023-11-01" { + description + "Refactor apply policy to separate default policy in it's own common + set of groupings"; + reference "3.4.2"; + } + + revision "2023-10-24" { + description + "Clarify the use of default-(import|export)-policy when no policy + is applied to a protocol."; + reference "3.4.1"; + } - oc-ext:openconfig-version "3.3.0"; + revision "2023-10-11" { + description + "Add NEXT_STATEMENT policy-result-type enum value."; + reference "3.4.0"; + } revision "2022-05-24" { description @@ -162,12 +192,19 @@ module openconfig-routing-policy { typedef policy-result-type { type enumeration { enum ACCEPT_ROUTE { - description "Policy accepts the route"; + description "Policy accepts the route and evaluation of the + current policy definition stops."; } enum REJECT_ROUTE { - description "Policy rejects the route"; + description "Policy rejects the route and evaluation of the + current policy definition stops."; + } + enum NEXT_STATEMENT { + description "Any modifications of the route are preserved and the evaluation of the policy will continue to the + next statement."; } } + default NEXT_STATEMENT; description "Type used to specify route disposition in a policy chain"; @@ -1181,6 +1218,11 @@ module openconfig-routing-policy { for the current peer group, neighbor, address family, etc."; } + } + + grouping default-policy-import-config { + description + "Configuration data for default import policy"; leaf default-import-policy { type default-policy-type; @@ -1189,7 +1231,6 @@ module openconfig-routing-policy { "explicitly set a default policy if no policy definition in the import policy chain is satisfied."; } - } grouping apply-policy-export-config { @@ -1211,6 +1252,11 @@ module openconfig-routing-policy { for the current peer group, neighbor, address family, etc."; } + } + + grouping default-policy-export-config { + description + "Configuration data for default export policy"; leaf default-export-policy { type default-policy-type; @@ -1221,22 +1267,37 @@ module openconfig-routing-policy { } } - grouping apply-policy-config { description "Configuration data for routing policies"; uses apply-policy-import-config; uses apply-policy-export-config; - + uses default-policy-config; } + grouping default-policy-config { + description + "Configuration data for default routing policies"; + uses default-policy-import-config; + uses default-policy-export-config; + } grouping apply-policy-state { description "Operational state associated with routing policy"; + uses default-policy-state; + + //TODO: identify additional state data beyond the intended + //policy configuration. + } + + grouping default-policy-state { + description + "Operational state associated with routing policy"; + //TODO: identify additional state data beyond the intended //policy configuration. } @@ -1273,6 +1334,35 @@ module openconfig-routing-policy { } } + grouping default-policy-group { + description + "Top level container for default routing policy applications."; + + container apply-policy { + description + "Anchor point for routing policies in the model. + Import and export policies are with respect to the local + routing table, i.e., export (send) and import (receive), + depending on the context."; + + container config { + description + "Policy configuration data."; + + uses default-policy-config; + } + + container state { + config false; + description + "Operational state for routing policy"; + + uses default-policy-config; + uses default-policy-state; + } + } + } + uses routing-policy-top; } 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; +} diff --git a/release/models/qos/openconfig-qos-elements.yang b/release/models/qos/openconfig-qos-elements.yang index e679f6fe6..6aee18d72 100644 --- a/release/models/qos/openconfig-qos-elements.yang +++ b/release/models/qos/openconfig-qos-elements.yang @@ -35,7 +35,32 @@ submodule openconfig-qos-elements { packets for transmission, including policer and shaper functions"; - oc-ext:openconfig-version "0.9.1"; + oc-ext:openconfig-version "0.11.2"; + + revision "2023-10-13" { + description + "Fix revision statement date"; + reference "0.11.2"; + } + + revision "2023-10-08" { + description + "Clarification on WRED weight in case it is not present"; + reference "0.11.1"; + } + + revision "2023-09-15" { + description + "Add support for ECN counters"; + reference "0.11.0"; + } + + revision "2023-07-26" { + description + "Add buffer management parameters in time unts (microseconds). + Make profiles reusable across LAGs and PHY of different speed"; + reference "0.10.0"; + } revision "2023-04-25" { description diff --git a/release/models/qos/openconfig-qos-interfaces.yang b/release/models/qos/openconfig-qos-interfaces.yang index eca7a5e21..c45c0974b 100644 --- a/release/models/qos/openconfig-qos-interfaces.yang +++ b/release/models/qos/openconfig-qos-interfaces.yang @@ -25,7 +25,32 @@ submodule openconfig-qos-interfaces { configuration and operational state associated with interfaces."; - oc-ext:openconfig-version "0.9.1"; + oc-ext:openconfig-version "0.11.2"; + + revision "2023-10-13" { + description + "Fix revision statement date"; + reference "0.11.2"; + } + + revision "2023-10-08" { + description + "Clarification on WRED weight in case it is not present"; + reference "0.11.1"; + } + + revision "2023-09-15" { + description + "Add support for ECN counters"; + reference "0.11.0"; + } + + revision "2023-07-26" { + description + "Add buffer management parameters in time unts (microseconds). + Make profiles reusable across LAGs and PHY of different speed"; + reference "0.10.0"; + } revision "2023-04-25" { description @@ -362,13 +387,53 @@ submodule openconfig-qos-interfaces { leaf dropped-pkts { type oc-yang:counter64; description - "Number of packets dropped by the queue due to overrun"; + "Number of packets dropped by the queue due to overrun, that is tail-drop + or AMQ (RED, WRED, etc) induced drops as indicated by the attached + queue-management-profile"; } leaf dropped-octets { type oc-yang:counter64; description - "Number of octets dropped by the queue due to overrun"; + "Number of octets dropped by the queue due to overrun, that is tail-drop + or AMQ (RED, WRED, etc) induced drops as indicated by the attached + queue-management-profile"; + } + + leaf ecn-marked-pkts { + type oc-yang:counter64; + description + "number of packets for which ECN codepoint has been changed from ECT to CE"; + } + + leaf ecn-marked-octets { + type oc-yang:counter64; + description + "Number of octets for which ECN codepoint has been changed from ECT to CE"; + } + + leaf ecn-selected-pkts { + type oc-yang:counter64; + description + "Number of packets selected by AQM + + For RED/WRED AQM this counter counts: + - all packets enqueued while queue utilization was greater then max-threshold + - packs enqueued while queue utilization was between min-threshold and max-threshold, with probability derived from RED/WRED slope + + Packets are counted regardless of its ECN codepoint"; + } + + leaf ecn-selected-octets { + type oc-yang:counter64; + description + "Number of octets of packets selected by AQM + + For RED/WRED AQM this counter counts: + - all octets enqueued while queue utilization was greater then max-threshold + - octets enqueued while queue utilization was between min-threshold and max-threshold, with probability derived from RED/WRED slope + + Octets are counted regardless of its ECN codepoint"; } } diff --git a/release/models/qos/openconfig-qos-mem-mgmt.yang b/release/models/qos/openconfig-qos-mem-mgmt.yang index ef7b324f6..34c373d58 100644 --- a/release/models/qos/openconfig-qos-mem-mgmt.yang +++ b/release/models/qos/openconfig-qos-mem-mgmt.yang @@ -29,7 +29,32 @@ submodule openconfig-qos-mem-mgmt { per-queue basis, and determine how packets are marked/dropped within the queue instantiation."; - oc-ext:openconfig-version "0.9.1"; + oc-ext:openconfig-version "0.11.2"; + + revision "2023-10-13" { + description + "Fix revision statement date"; + reference "0.11.2"; + } + + revision "2023-10-08" { + description + "Clarification on WRED weight in case it is not present"; + reference "0.11.1"; + } + + revision "2023-09-15" { + description + "Add support for ECN counters"; + reference "0.11.0"; + } + +revision "2023-07-26" { + description + "Add buffer management parameters in time unts (microseconds). + Make profiles reusable across LAGs and PHY of different speed"; + reference "0.10.0"; + } revision "2023-04-25" { description @@ -221,7 +246,20 @@ submodule openconfig-qos-mem-mgmt { units bytes; description "This is the dedicated buffer that is carved for the queue, this is the minimum - number of bytes reserved for this queue."; + number of bytes reserved for this queue. + This leaf is mutualy exclusive with dedicated-buffer-temporal leaf"; + } + + leaf dedicated-buffer-temporal { + type uint64; + units microseconds; + description + "This is the dedicated buffer that is carved for the queue. The the minimum + number of bytes reserved for this queue is calculated by multiplying by interface speed + queue is attached to and queues minimum, guarantaed transmit share (derived + form WRR schedulers weights). + This leaf shouldbot be used for strict priority scheduled queues. + This leaf is mutualy exclusive with dedicated-buffer leaf"; } leaf use-shared-buffer { @@ -246,7 +284,22 @@ submodule openconfig-qos-mem-mgmt { description "If the shared-buffer-limit-type is STATIC, then static-shared-buffer-limit is the maximum number of bytes that the queue is allowed to use from the shared - pool."; + pool. + This leaf is mutualy exclusive with static-shared-buffer-limit-temporal leaf."; + } + + leaf static-shared-buffer-limit-temporal { + type uint32; + units microseconds; + description + "If the shared-buffer-limit-type is STATIC, then static-shared-buffer-limit-temporal is + the maximum number of bytes that the queue is allowed to use from the shared + pool. + The the number of bytes is calculated by multiplying static-shared-buffer-limit-temporal + by interface speed the queue is attached to and queues minimum, guarantaed transmit share + (derived form WRR schedulers weights). + This leaf shouldbot be used for strict priority scheduled queues. + This leaf is mutualy exclusive with static-shared-buffer-limit leaf."; } leaf dynamic-limit-scaling-factor { @@ -362,7 +415,10 @@ submodule openconfig-qos-mem-mgmt { The previous average is more important for high values of n. Peaks and lows in queue size are smoothed by a high value. For low values - of n, the average queue size is close to the current queue size."; + of n, the average queue size is close to the current queue size. + + When this leaf is not present, implementation default value is + applied."; } leaf max-drop-probability-percent { diff --git a/release/models/qos/openconfig-qos.yang b/release/models/qos/openconfig-qos.yang index a01610cfe..9feb9b3ba 100644 --- a/release/models/qos/openconfig-qos.yang +++ b/release/models/qos/openconfig-qos.yang @@ -27,7 +27,32 @@ module openconfig-qos { "This module defines configuration and operational state data related to network quality-of-service."; - oc-ext:openconfig-version "0.9.1"; + oc-ext:openconfig-version "0.11.2"; + + revision "2023-10-13" { + description + "Fix revision statement date"; + reference "0.11.2"; + } + + revision "2023-10-08" { + description + "Clarification on WRED weight in case it is not present"; + reference "0.11.1"; + } + + revision "2023-09-15" { + description + "Add support for ECN counters"; + reference "0.11.0"; + } + +revision "2023-07-26" { + description + "Add buffer management parameters in time unts (microseconds). + Make profiles reusable across LAGs and PHY of different speed"; + reference "0.10.0"; + } revision "2023-04-25" { description diff --git a/release/models/segment-routing/openconfig-segment-routing.yang b/release/models/segment-routing/openconfig-segment-routing.yang index e40e57bda..a687f0bfb 100644 --- a/release/models/segment-routing/openconfig-segment-routing.yang +++ b/release/models/segment-routing/openconfig-segment-routing.yang @@ -14,6 +14,7 @@ module openconfig-segment-routing { import ietf-yang-types { prefix "yang"; } import openconfig-segment-routing-types { prefix "oc-srt"; } import openconfig-srte-policy { prefix "oc-srte"; } + import openconfig-isis-types { prefix "oc-isis-types"; } // meta organization "OpenConfig working group"; @@ -35,7 +36,19 @@ module openconfig-segment-routing { - SR SID advertisements - instantiated within the relevant IGP. - SR-specific counters - instantied within the relevant dataplane."; - oc-ext:openconfig-version "0.3.2"; + oc-ext:openconfig-version "0.4.1"; + + revision "2023-08-09" { + description + "Update interface key to use interface-id type"; + reference "0.4.1"; + } + + revision "2023-05-24" { + description + "Add flex-algo model"; + reference "0.4.0"; + } revision "2023-02-06" { description @@ -442,7 +455,7 @@ module openconfig-segment-routing { "MPLS-specific Segment Routing configuration for an interface"; leaf interface-id { - type string; + type oc-if:interface-id; description "A unique identifier for the interface."; } @@ -556,6 +569,36 @@ module openconfig-segment-routing { } } + grouping flex-algo-binding-attributes { + description + "Attributes for Flexible Algorithm bindings"; + leaf flex-algo-id { + type uint8 { + range "128..255"; + } + description + "Flexible Algorithm identifier"; + } + leaf isis-level { + type oc-isis-types:level-type; + default "LEVEL_1_2"; + description + "IS-IS Level associated with this Flex Algorithm"; + } + leaf advertised { + type boolean; + default "false"; + description + "Indicates if the Flex Algorithm definition is advertised by this node"; + } + leaf participate { + type boolean; + default "false"; + description + "Indicates if the node participates in this Flex Algorithm"; + } + } + grouping sr-igp-top { description "Per-instance configuration and state parameters for Segment Routing @@ -579,6 +622,34 @@ module openconfig-segment-routing { IGP instance."; uses sr-igp-config; } + + container flex-algorithm-bindings { + description + "Flex Algorithm bindings"; + list flex-algorithm-binding { + key "flex-algo-id"; + description + "Flex Algorithm binding"; + leaf flex-algo-id { + type leafref { + path "../config/flex-algo-id"; + } + description + "Flex Algorithm identifier used by IGP"; + } + container config { + description + "Attributes of a FAD binding"; + uses flex-algo-binding-attributes; + } + container state { + config false; + description + "Attributes of a FAD binding"; + uses flex-algo-binding-attributes; + } + } + } } } @@ -687,6 +758,32 @@ module openconfig-segment-routing { } } + grouping sr-igp-interface-flex-algo-prefix-sid-config { + description + "Configuration parameters relating to an IGP prefix SID advertisement for + Flexible Algorithms"; + leaf prefix { + type inet:ip-prefix; + description + "The IP prefix for which the IGP prefix SID should be advertised. The + value specified is a local prefix on the interface which is advertised + into the IGP."; + } + leaf flex-algo-id { + type uint8 { + range "128..255"; + } + description + "Flexible Algorithm identifier for the prefix segment."; + } + leaf sid-id { + type oc-srt:sr-sid-type; + description + "The Segment Identifier to be used when advertising the IGP Prefix SID for + the Flexible Algorithm."; + } + } + grouping sr-igp-interface-top { description "Per-interface configuration and operational state relating to an @@ -736,6 +833,50 @@ module openconfig-segment-routing { } } + container flex-algo-prefix-sids { + description + "Configuration and operational state parameters relating to segment + routing flexible algorithm for an interface within the IGP."; + + list flex-algo-prefix-sid { + key "prefix flex-algo-id"; + + description + "IGP prefix segments allocated for Flexible Algorithms"; + + leaf prefix { + type leafref { + path "../config/prefix"; + } + description + "Reference to the prefix for which Flexible Algorithm Prefix SID is to be + advertised."; + } + + leaf flex-algo-id { + type leafref { + path "../config/flex-algo-id"; + } + description + "Reference to the Flexible Algorithm for which Flexible Algorithm Prefix + SID is to be advertised."; + } + + container config { + description + "Configuration parameters for the IGP Flexible Algorithm Prefix SID."; + uses sr-igp-interface-flex-algo-prefix-sid-config; + } + + container state { + config false; + description + "Operational state parameters for the IGP Flexible Algorithm Prefix SID."; + uses sr-igp-interface-flex-algo-prefix-sid-config; + } + } + } + container adjacency-sids { description "Configuration and operational state parameters relating to diff --git a/release/models/system/.spec.yml b/release/models/system/.spec.yml index 9cd6c6222..92061e9bf 100644 --- a/release/models/system/.spec.yml +++ b/release/models/system/.spec.yml @@ -7,6 +7,7 @@ - yang/system/openconfig-aaa-types.yang - yang/system/openconfig-alarms.yang - yang/system/openconfig-alarm-types.yang + - yang/system/openconfig-hashing.yang - yang/system/openconfig-license.yang - yang/system/openconfig-procmon.yang - yang/system/openconfig-system.yang @@ -16,6 +17,11 @@ - yang/system/openconfig-system-logging.yang - yang/system/openconfig-system-terminal.yang - yang/system/openconfig-system-utilization.yang + - yang/gnsi/openconfig-gnsi-acctz.yang + - yang/gnsi/openconfig-gnsi-authz.yang + - yang/gnsi/openconfig-gnsi-certz.yang + - yang/gnsi/openconfig-gnsi-credentialz.yang + - yang/gnsi/openconfig-gnsi-pathz.yang build: - yang/system/openconfig-system.yang - yang/system/openconfig-system-utilization.yang @@ -32,3 +38,9 @@ - yang/system/openconfig-messages.yang build: - yang/system/openconfig-messages.yang +- name: openconfig-hashing + docs: + - yang/system/openconfig-hashing.yang + build: + - yang/system/openconfig-hashing.yang + run-ci: true diff --git a/release/models/system/openconfig-hashing.yang b/release/models/system/openconfig-hashing.yang new file mode 100644 index 000000000..e4480b22a --- /dev/null +++ b/release/models/system/openconfig-hashing.yang @@ -0,0 +1,366 @@ +module openconfig-hashing { + yang-version "1"; + + // namespace + namespace "http://openconfig.net/yang/hashing"; + + prefix "oc-hashing"; + + // import some basic types + import openconfig-extensions { prefix oc-ext; } + import openconfig-system {prefix oc-sys;} + import openconfig-interfaces {prefix oc-intf;} + + // meta + organization "OpenConfig working group"; + + contact + "OpenConfig working group + netopenconfig@googlegroups.com"; + + description + "Model for managing hashing policies that would be referenced by the + interfaces model."; + + + oc-ext:openconfig-version "0.1.0"; + + revision "2023-08-08" { + description "Initial hashing model."; + reference "0.1.0"; + } + + oc-ext:catalog-organization "openconfig"; + oc-ext:origin "openconfig"; + + grouping hashing-inputs { + description + "Top level container for inputs to be used for hashing policies."; + + leaf ingress-interface { + type boolean; + description + "Include the ingress subinterface identified in the + calculation of the hash."; + } + leaf ip-protocol-type { + type boolean; + description + "Include the IP protocol type in the calculation of the hash."; + } + } + + grouping ipv4-ipv6-inputs-top { + description + "The top level container for ipv4 and ipv6 header + fields used for the hash computation."; + + leaf src-addr { + type boolean; + description + "Use the source address in the calculation of the hash."; + } + + leaf dst-addr { + type boolean; + description + "Use the destination address in the calculation of the hash."; + } + + leaf src-port { + type boolean; + description + "Use the source port from the transport header in the calculation + of the hash."; + } + + leaf dst-port { + type boolean; + description + "Use the destination port from the transport header in the + calculation of the hash."; + } + } + + grouping ipv6-inputs-top { + description + "The top level container specifially for ipv6 header + fields used for the hash computation."; + + leaf flow-label { + type boolean; + description + "Use the flow label in the IPv6 header + to calculate the hash."; + } + } + + grouping hashing-policy-config { + description + "Configuration data for hashing policies."; + + leaf name { + type string; + description + "The name of the hashing policy. + When a configured user-controlled policy is created by the + system, it is instantiated with the same name in the + /system/hashing-policies/hashing-policy/name list."; + } + + leaf seed { + type uint64; + description + "The seed used to initialize the hash algorithm"; + } + + leaf algorithm { + type string; + description + "The name of hash algorithm. This algorithm MUST + be a supported algorithm"; + } + } + + grouping hashing-policy-top { + description + "Top level grouping for hashing configuration and operational state + data."; + + container hashing-policies { + description + "Top level container for hashing, including configuration and + state data."; + + list hashing-policy { + key "name"; + + description + "The list of named policies to be used on the device."; + + leaf name { + type leafref { + path "../config/name"; + } + description + "References the name of the hashing policy."; + } + container config { + description + "Configurable items at the global hash policy level."; + + uses hashing-policy-config; + } + container state { + config false; + description + "Operational state data at the global hash policy + level."; + + uses hashing-policy-config; + } + + container hash-field-modes { + description + "Container for specifying inputs to be used when + calculating the hash."; + + container config { + description + "Configurable items at the hashing inputs level."; + uses hashing-inputs; + } + container state { + config false; + description + "Operational state data at the hashing + inputs level."; + uses hashing-inputs; + } + + container ipv4 { + description + "The IPv4 fields that should be used to + compute the hash."; + container config { + description + "Configurable data at the hashing + inputs level for IPv4."; + uses ipv4-ipv6-inputs-top; + } + + container state { + config false; + description + "Operational state data at the hashing + inputs level for IPv4."; + uses ipv4-ipv6-inputs-top; + } + } + + container ipv6 { + description + "The IPv6 fields that should be used to + compute the hash."; + + container config { + description + "Configurable data at the hashing + inputs level for IPv6."; + + uses ipv4-ipv6-inputs-top; + uses ipv6-inputs-top; + } + + container state { + config false; + description + "Operational state data at the hashing + inputs level for IPv6."; + + uses ipv4-ipv6-inputs-top; + uses ipv6-inputs-top; + } + } + } + } + } + } + + grouping supported-algorithms-state { + description + "Top-level container for the supported algorithms."; + leaf name { + type string; + description + "Name of the supported algorithm."; + } + leaf description { + type string; + description + "Description of the supported algorithm."; + } + } + grouping supported-algorithms-top { + description + "Top-level container of the supported algorithms for supported + algorithms. The list of algorithms are expected to be defined by + the target device."; + container algorithms { + description + "Container for vendor supported hashing algorithms."; + uses vendor-hashing-algorithms; + } + } + + grouping hashing-algo-top { + description + "Top level container of the supported algorithms for supported + algorithms."; + container hashing-algorithms { + config false; + description + "Container of the supported algorithms for supported + algorithms."; + list hashing-algorithm { + key "name"; + + description + "List of the supported algorithms for supported + algorithms."; + + leaf name { + type leafref { + path ../state/name; + } + description + "Reference to the supported algorithm list key."; + } + + container state { + description + "Operational data for the supported algorithm."; + config false; + + leaf name { + type string; + description + "Name of the supported algorithm."; + } + + leaf description { + type string; + description + "Description of the supported algorithm."; + } + } + } + } + } + + grouping vendor-hashing-algorithms { + description + "Supported hashing algorithms per vender."; + container vendor { + description + "Specify the vendor. Each vendor should have its own set of + supported algorithms. For each supported algorithm, a name + and a description should be defined. An implementation must + augment this model using the schema described in the + vendor_counter_guide reference. + + e.g. + augment /system/hashing/vendor { + container { + container { + uses hashing-algo-top; + } + } + }"; + reference + "https://github.com/openconfig/public/tree/master/doc/vendor_counter_guide.md"; + } + } + + grouping hashing-top { + description + "Top-level container for Hashing algorithms and hashing policies"; + container hashing { + description + "Container for Hashing algorithms and hashing policies"; + uses supported-algorithms-top; + uses hashing-policy-top; + } + } + + augment "/oc-sys:system" { + description + "Augment for Hashing algorithms and hashing policies"; + + uses hashing-top; + } + + augment "/oc-intf:interfaces/oc-intf:interface/oc-intf:config" { + description + "Augment for configuration data hashing policy on the interface."; + leaf hashing-policy { + type leafref { + path "/oc-sys:system/hashing/hashing-policies/hashing-policy/name"; + } + description "The configuration data hashing policy to be used when + hashing packets coming in on the interface."; + } + } + + augment "/oc-intf:interfaces/oc-intf:interface/oc-intf:state" { + description + "Augment for operational data hashing policy on the iinterface."; + leaf hashing-policy { + type leafref { + path "/oc-sys:system/hashing/hashing-policies/hashing-policy/name"; + } + description "The operational data hashing policy to be used when + hashing packets coming in on the interface."; + } + } +} \ No newline at end of file diff --git a/release/models/system/openconfig-messages.yang b/release/models/system/openconfig-messages.yang index 894704479..bfed7afd2 100644 --- a/release/models/system/openconfig-messages.yang +++ b/release/models/system/openconfig-messages.yang @@ -32,12 +32,18 @@ module openconfig-messages { /yang/system/openconfig-system.yang model, rather it provies the Operator with an alternative method of consuming messages."; - oc-ext:openconfig-version "0.0.1"; + oc-ext:openconfig-version "0.1.0"; + + revision 2024-07-15 { + description + "Remove unused top-level messages container."; + reference "0.1.0"; + } revision "2018-08-13" { - description - "Initial draft."; - reference "0.0.1"; + description + "Initial draft."; + reference "0.0.1"; } // identity statements @@ -217,5 +223,4 @@ module openconfig-messages { uses debug-messages-top; } } - uses messages-top; } diff --git a/release/models/system/openconfig-system-grpc.yang b/release/models/system/openconfig-system-grpc.yang index fb16870a2..6560806c1 100644 --- a/release/models/system/openconfig-system-grpc.yang +++ b/release/models/system/openconfig-system-grpc.yang @@ -8,6 +8,7 @@ module openconfig-system-grpc { import openconfig-system { prefix oc-sys; } import openconfig-inet-types { prefix oc-inet; } import openconfig-network-instance { prefix oc-ni; } + import openconfig-yang-types { prefix oc-yang; } organization "OpenConfig working group"; @@ -22,10 +23,16 @@ module openconfig-system-grpc { to be included in the list."; - oc-ext:openconfig-version "1.0.0"; + oc-ext:openconfig-version "1.1.0"; oc-ext:catalog-organization "openconfig"; oc-ext:origin "openconfig"; + revision "2024-05-29" { + description + "Add support for gRPC connections."; + reference "1.1.0"; + } + revision "2022-04-19" { description "Description and default value updates for grpc-server @@ -97,6 +104,7 @@ module openconfig-system-grpc { "Operational state relating to the gRPC service."; uses grpc-server-config; } + uses connections-top; } } } @@ -200,6 +208,99 @@ module openconfig-system-grpc { } } + grouping grpc-counters { + description + "Top-level container for gRPC counters."; + container counters { + description + "Operational data for gRPC counters."; + uses grpc-counters-top; + } + } + + grouping grpc-counters-top { + description + "Top-level container of operational data for gRPC counters."; + + leaf bytes-sent { + type oc-yang:counter64; + description + "The total number of bytes sent to the client."; + } + + leaf packets-sent { + type oc-yang:counter64; + description + "The total number of packets sent to the client."; + } + + leaf data-send-error { + type oc-yang:counter64; + description + "A count of errors the gRPC server encountered when + sending data to a grpc client."; + } + } + + grouping grpc-server-connections-state { + description + "Operational data for gRPC server connections."; + + leaf address { + type oc-inet:ip-address; + description + "IPv4/IPv6 address of the gRPC server connection."; + } + + leaf port { + type oc-inet:port-number; + description + "TCP/UDP port number for the gRPC server connection."; + } + } + + grouping connections-top { + description + "Top-level grouping for data related to gRPC connections."; + + container connections { + config false; + description + "Enclosing container for list of gRPC connections."; + + list connection { + key "address port"; + description + "List of gRPC connections"; + + leaf address { + type leafref { + path "../state/address"; + } + description + "Reference to address list key."; + } + + leaf port { + type leafref { + path "../state/port"; + } + description + "Reference to port list key."; + } + + container state { + config false; + description + "Operational state data for gRPC connections."; + + uses grpc-server-connections-state; + uses grpc-counters; + } + } + } + } + augment "/oc-sys:system" { description "Add gRPC service configuration to the openconfig-system model."; diff --git a/release/models/system/openconfig-system-logging.yang b/release/models/system/openconfig-system-logging.yang index 3fcc7c5cd..c7eaae8a5 100644 --- a/release/models/system/openconfig-system-logging.yang +++ b/release/models/system/openconfig-system-logging.yang @@ -23,7 +23,19 @@ module openconfig-system-logging { "This module defines configuration and operational state data for common logging facilities on network systems."; - oc-ext:openconfig-version "0.5.0"; + oc-ext:openconfig-version "0.7.0"; + +revision "2024-08-20" { + description + "Adding tls support for syslog."; + reference "0.7.0"; + } + +revision "2023-07-20" { + description + "adding VTY and local files as logging destinations"; + reference "0.6.0"; + } revision "2023-05-04" { description @@ -354,12 +366,12 @@ module openconfig-system-logging { grouping logging-console-config { description - "Configuration data for console logging"; + "Configuration data for console and vty logging"; } grouping logging-console-state { description - "Operational state data for console logging"; + "Operational state data for console and vty logging"; } grouping logging-console-top { @@ -423,6 +435,22 @@ module openconfig-system-logging { "Sets the destination port number for syslog UDP messages to the server. The default for syslog is 514."; } + + leaf transport-security { + type boolean; + description + "Indicates if syslog transport layer security (TLS) is enabled."; + } + + leaf tls-profile-id { + type string; + description + "The ID of this syslog client's TLS profile. TLS profiles are managed + using the gNSI Certz service or other certificate management service + provided by the system."; + reference + "https://github.com/openconfig/gnsi/tree/main/certz"; + } } grouping logging-remote-state { @@ -436,7 +464,8 @@ module openconfig-system-logging { container remote-servers { description - "Enclosing container for the list of remote log servers"; + "Enclosing container for the list of remote log + servers"; list remote-server { key "host"; @@ -473,6 +502,154 @@ module openconfig-system-logging { } } + grouping logging-file-config { + description + "Configuration data for logfile"; + + leaf filename-prefix { + type string { + length 0..255; + } + description + "A name used for the file. It is expected that an + implementation may append timestamp, serial-number or + other identifier to the filename."; + } + + leaf path { + type string { + length 0..255; + } + description + "The fully specified path of the folder where the + logfile is stored. The path is implementation specific + and may include attributes such as a drive identifier."; + } + + leaf rotate { + type uint32; + default 0; + description + "Used for logfile rotation. + Log files are rotated the number of times defined by + this leaf. + The default value of 1 indicates that there will be one + rotation file and one active file. A 0 value indicates + old versions are removed rather than rotated."; + } + + leaf max-size { + type uint32; + default 1000; + description + "Used for logfile rotation. + Maximum size in Bytes, logfile may grow to. When logfile + reach this size it triggers log rotation. The log file need to + be save, closed, and new file open or future log storage. + If needed oldest logfile of same prefix shall be deleted to"; + } + + leaf max-open-time { + type uint32; + default 1440; + description + "Used for logfile rotation. + Maximum time, in minutes, the logfile can be open. When expires, + it triggers log rotation. + Actions are same ans when log file reaches its max-size. + it need to be closed, save, and new file open or future log + storage. If needed oldest logfile of same prefix shall be + deleted to "; + } + } + + grouping logging-file-state { + description + "Operational state data for logfile"; + leaf open-logfile { + type string{ + length 0..511; + } + description + "the currently active/open filename prepended by folder path + and including suffix appended to filename-prefix by system"; + } + } + + grouping logging-files-top { + description + "Top-level grouping for local log files"; + + container files { + description + "Enclosing container for the list of log files"; + + list file { + key "path filename-prefix"; + description + "List of logfiles"; + + leaf filename-prefix { + type leafref { + path "../config/filename-prefix"; + } + description + "Reference to the logfiles list key"; + } + + leaf path { + type leafref { + path "../config/path"; + } + description + "Reference to the logfiles list key"; + } + + container config { + description + "Configuration data for logfile"; + uses logging-file-config; + } + + container state { + config false; + description + "Operational state data for logfile servers"; + uses logging-file-config; + uses logging-file-state; + } + uses logging-selectors-top; + } + } + } + + grouping logging-vty-top { + description + "Top-level grouping for vty logging data"; + + container vty { + description + "Top-level container for data related to vty-based + logging (active sessions of ssh, telnet, etc )"; + + container config { + description + "Configuration data for vty logging"; + + uses logging-console-config; + } + + container state { + config false; + description + "Operational state data for console logging"; + uses logging-console-config; + uses logging-console-state; + } + uses logging-selectors-top; + } + } + grouping logging-top { description "Top-level grouping for logging data"; @@ -483,6 +660,9 @@ module openconfig-system-logging { uses logging-console-top; uses logging-remote-top; + uses logging-files-top; + uses logging-vty-top; + } } // data definition statements diff --git a/release/models/system/openconfig-system.yang b/release/models/system/openconfig-system.yang index aa9589c02..a7eb1be7f 100644 --- a/release/models/system/openconfig-system.yang +++ b/release/models/system/openconfig-system.yang @@ -47,7 +47,38 @@ module openconfig-system { Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info)."; - oc-ext:openconfig-version "0.17.1"; + oc-ext:openconfig-version "2.3.0"; + + revision "2024-09-24" { + description + "Added mount-point type leaf to describe the type of file system."; + reference "2.3.0"; + } + + revision "2024-08-13" { + description + "Added additional auth key types"; + reference "2.2.0"; + } + + revision "2024-07-15" { + description + "Added auth key reference in ntp server configuration."; + reference "2.1.0"; + } + + revision "2023-12-20" { + description + "Change NTP offset, root-delay, and root-dispersion to int64 nanoseconds, + and update their descriptions for accuracy and clarity."; + reference "2.0.0"; + } + + revision "2023-10-26" { + description + "Add up-time leaf and promote module to version 1.0."; + reference "1.0.0"; + } revision "2023-06-16" { description @@ -214,6 +245,42 @@ module openconfig-system { "MD5 encryption method"; } + identity NTP_AUTH_SHA1 { + base NTP_AUTH_TYPE; + description + "SHA1 encryption method"; + } + + identity NTP_AUTH_SHA256 { + base NTP_AUTH_TYPE; + description + "SHA256 encryption method"; + } + + identity NTP_AUTH_SHA384 { + base NTP_AUTH_TYPE; + description + "SHA384 encryption method"; + } + + identity NTP_AUTH_SHA512 { + base NTP_AUTH_TYPE; + description + "SHA512 encryption method"; + } + + identity NTP_AUTH_AES_CBC_128 { + base NTP_AUTH_TYPE; + description + "AES-CBC-128 encryption method"; + } + + identity NTP_AUTH_AES_CBC_256 { + base NTP_AUTH_TYPE; + description + "AES-CBC-256 encryption method"; + } + // typedef statements typedef timezone-name-type { @@ -359,6 +426,14 @@ module openconfig-system { description "The amount of space currently in use on the filesystem."; } + + leaf type { + type string; + description + "A human readable string indicating the filesystem type used + for storage. Examples might include flash, hard disk, tmpfs/ramdisk + or remote/network based storage."; + } } grouping system-global-state { @@ -371,6 +446,14 @@ module openconfig-system { "The current system date and time."; } + leaf up-time { + type oc-types:timeticks64; + units "nanoseconds"; + description + "The amount of time since the network operating system was + initialized."; + } + leaf boot-time { type oc-types:timeticks64; units "nanoseconds"; @@ -727,6 +810,14 @@ module openconfig-system { description "Source address to use on outgoing NTP packets"; } + + leaf key-id { + type leafref { + path "../../../../ntp-keys/ntp-key/key-id"; + } + description + "Reference to NTP authentication key for this server."; + } } grouping system-ntp-server-state { @@ -753,39 +844,35 @@ module openconfig-system { } leaf root-delay { - type uint32; - // TODO: reconsider units for these values -- the spec defines - // rootdelay and rootdisperson as 2 16-bit integers for seconds - // and fractional seconds, respectively. This gives a - // precision of ~15 us (2^-16). Using milliseconds here based - // on what implementations typically provide and likely lack - // of utility for less than millisecond precision with NTP - // time sync. - units "milliseconds"; - description - "The round-trip delay to the server, in milliseconds."; + type int64; + units "nanoseconds"; + description + "The total round-trip delay to the reference clock, in nanoseconds."; reference "RFC 5905 - Network Time Protocol Version 4: Protocol and - Algorithms Specification"; + Algorithms Specification, Section 7.3"; } leaf root-dispersion { - type uint64; - units "milliseconds"; + type int64; + units "nanoseconds"; description - "Dispersion (epsilon) represents the maximum error inherent - in the measurement"; + "The maximum error inherent in the measurement, accumulated over the + stratum levels from the reference clock."; reference "RFC 5905 - Network Time Protocol Version 4: Protocol and - Algorithms Specification"; + Algorithms Specification, Section 4"; } leaf offset { - type uint64; - units "milliseconds"; + type int64; + units "nanoseconds"; description "Estimate of the current time offset from the peer. This is - the time difference between the local and reference clock."; + the time difference of the peer's clock minus the local clock."; + reference + "RFC 5905 - Network Time Protocol Version 4: Protocol and + Algorithms Specification, Section 8"; } leaf poll-interval { @@ -1280,4 +1367,4 @@ module openconfig-system { // data definition statements uses system-top; -} \ No newline at end of file +} diff --git a/release/models/types/openconfig-inet-types.yang b/release/models/types/openconfig-inet-types.yang index 3d3ed425e..ff74c4287 100644 --- a/release/models/types/openconfig-inet-types.yang +++ b/release/models/types/openconfig-inet-types.yang @@ -31,7 +31,14 @@ module openconfig-inet-types { Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info)."; - oc-ext:openconfig-version "0.6.0"; + oc-ext:openconfig-version "0.7.0"; + + revision "2024-01-05" { + description + "Change ipv6-address-zoned typedef to conform to W3C standard + regex pattern."; + reference "0.7.0"; + } revision "2023-02-06" { description @@ -198,7 +205,7 @@ module openconfig-inet-types { pattern // Must support compression through different lengths // therefore this regexp is complex. - '^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|' + + '(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|' + '([0-9a-fA-F]{1,4}:){1,7}:|' + '([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|' + '([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|' + @@ -207,7 +214,7 @@ module openconfig-inet-types { '([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|' + '[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|' + ':((:[0-9a-fA-F]{1,4}){1,7}|:)' + - ')(%[a-zA-Z0-9_]+)$'; + ')(%[a-zA-Z0-9_]+)'; oc-ext:posix-pattern // Must support compression through different lengths // therefore this regexp is complex. diff --git a/release/models/types/openconfig-types.yang b/release/models/types/openconfig-types.yang index 89e32d515..a146b9b76 100644 --- a/release/models/types/openconfig-types.yang +++ b/release/models/types/openconfig-types.yang @@ -21,7 +21,13 @@ module openconfig-types { are used across OpenConfig models. It can be imported by modules that make use of these types."; - oc-ext:openconfig-version "0.6.0"; + oc-ext:openconfig-version "1.0.0"; + + revision "2024-01-31" { + description + "Add posix-eregexp type and promote model to version 1.0.0."; + reference "1.0.0"; + } revision "2019-04-16" { description @@ -101,6 +107,14 @@ module openconfig-types { supported. An initial proposal is POSIX compatible."; } + typedef posix-eregexp { + type string; + description + "This is a string which represents an extended POSIX + regular expression."; + reference "IEEE Std 1003.1-2017"; + } + typedef timeticks64 { type uint64; units "nanoseconds"; diff --git a/release/models/types/openconfig-yang-types.yang b/release/models/types/openconfig-yang-types.yang index c978cd049..dbbf88a6d 100644 --- a/release/models/types/openconfig-yang-types.yang +++ b/release/models/types/openconfig-yang-types.yang @@ -32,7 +32,13 @@ module openconfig-yang-types { Section 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info)."; - oc-ext:openconfig-version "0.3.1"; + oc-ext:openconfig-version "1.0.0"; + + revision "2024-05-30" { + description + "Add hex-string-prefixed typedef"; + reference "1.0.0"; + } revision "2021-07-14" { description @@ -109,12 +115,26 @@ module openconfig-yang-types { } typedef hex-string { + status deprecated; type string { pattern '[0-9a-fA-F]*'; oc-ext:posix-pattern '^[0-9a-fA-F]*$'; } description - "A string consisting of a hexadecimal characters."; + "A string consisting of a hexadecimal characters. This leaf is + deprecated and will removed in a future version of this model. + The type hex-string-prefixed should be used instead."; + } + + typedef hex-string-prefixed { + type string { + pattern '(0x)([0-9a-fA-F]{2})*'; + oc-ext:posix-pattern '^(0x)([0-9a-fA-F]{2})*$'; + length "3..max"; + } + description + "A string encoding a hexadecimal number with a prefix of '0x' followed + by a list of bytes."; } typedef counter32 { diff --git a/release/models/wifi/openconfig-ap-interfaces.yang b/release/models/wifi/openconfig-ap-interfaces.yang index 913520165..49f7f0a00 100644 --- a/release/models/wifi/openconfig-ap-interfaces.yang +++ b/release/models/wifi/openconfig-ap-interfaces.yang @@ -32,7 +32,14 @@ module openconfig-ap-interfaces { "This module defines the configuration and state data for non-radio interfaces on WiFi Access Points."; - oc-ext:openconfig-version "1.2.0"; + oc-ext:openconfig-version "1.3.0"; + + revision "2023-08-10" { + description + "Add container to make compatible with changes in + openconfig-interfaces"; + reference "1.3.0"; + } revision "2023-06-26" { description @@ -105,7 +112,15 @@ module openconfig-ap-interfaces { uses oc-if:interface-phys-config; uses oc-if:interface-common-state; - uses oc-if:interface-counters-state; + + container counters { + description + "A collection of interface specific statistics entitites which are + not common to subinterfaces."; + + uses oc-if:interface-common-counters-state; + uses oc-if:interface-counters-state; + } } } } diff --git a/release/models/wifi/openconfig-wifi-mac.yang b/release/models/wifi/openconfig-wifi-mac.yang index 3bb25cfc4..b9c85f634 100644 --- a/release/models/wifi/openconfig-wifi-mac.yang +++ b/release/models/wifi/openconfig-wifi-mac.yang @@ -26,7 +26,19 @@ module openconfig-wifi-mac { description "Model for managing MAC layer configuration of Radio interfaces."; - oc-ext:openconfig-version "1.3.1"; + oc-ext:openconfig-version "1.3.3"; + + revision "2024-08-22" { + description "Fix XPath expression to avoid pyang error"; + reference "1.3.3"; + } + + revision "2024-08-07" { + description + "Add transition modes ENHANCED_OPEN_TRANSITION, WPA3_2_SAE_TRANSITION and + WPA3_2_ENTERPRISE_TRANSITION"; + reference "1.3.2"; + } revision "2023-05-26" { description @@ -253,15 +265,30 @@ module openconfig-wifi-mac { description "Open authentication with Opportunistic Wireless Encryption."; } + enum ENHANCED_OPEN_TRANSITION { + description + "Open authentication with Opportunistic Wireless Encryption and + support for transition mode."; + } enum WPA3_SAE { description "WPA3-SAE using Simultaneous Authentication of Equals (SAE)."; } + enum WPA3_2_SAE_TRANSITION { + description + "WPA3-SAE using Simultaneous Authentication of Equals (SAE) and + WPA2-PSK AKMs."; + } enum WPA3_ENTERPRISE { description "WPA3-Enterprise with 802.1X SHA-256 authentication key management."; } + enum WPA3_2_ENTERPRISE_TRANSITION { + description + "WPA3-Enterprise with 802.1X SHA-256 authentication key + management."; + } enum WPA3_ENTERPRISE_192_BIT { description "WPA3-Enterprise with 802.1X SHA-384 authentication key @@ -284,7 +311,8 @@ module openconfig-wifi-mac { } leaf wpa3-psk { - when "../opmode = 'WPA3_SAE'"; + when "../opmode = 'WPA3_SAE' or + ../opmode = 'WPA3_2_SAE_TRANSITION'"; type string { length "8..63"; } @@ -296,8 +324,10 @@ module openconfig-wifi-mac { when "../opmode = 'WPA2_ENTERPRISE' or ../opmode = 'WPA2_PERSONAL' or ../opmode = 'WPA3_ENTERPRISE' or + ../opmode = 'WPA3_2_ENTERPRISE_TRANSITION' or ../opmode = 'WPA3_ENTERPRISE_192_BIT' or - ../opmode = 'WPA3_SAE'"; + ../opmode = 'WPA3_SAE' or + ../opmode = 'WPA3_2_SAE_TRANSITION'"; type string; description "Specifies the RADIUS server-group to be used, @@ -367,9 +397,14 @@ module openconfig-wifi-mac { } leaf mfp { - when "../opmode = 'WPA3_ENTERPRISE' or ../opmode = - 'WPA3_ENTERPRISE_192_BIT' or ../opmode = - 'WPA3_SAE' or ../opmode = 'ENHANCED_OPEN'"; + when "../opmode = 'WPA3_ENTERPRISE' or + ../opmode = 'WPA3_2_ENTERPRISE_TRANSITION' or + ../opmode = 'WPA3_ENTERPRISE_192_BIT' or + ../opmode = 'WPA3_SAE' or + ../opmode = 'WPA3_2_SAE_TRANSITION' or + ../opmode = 'ENHANCED_OPEN' or + ../opmode = 'ENHANCED_OPEN_TRANSITION' + "; type boolean; mandatory true; description diff --git a/release/models/wifi/openconfig-wifi-phy.yang b/release/models/wifi/openconfig-wifi-phy.yang index 4f76e0060..cf328248d 100644 --- a/release/models/wifi/openconfig-wifi-phy.yang +++ b/release/models/wifi/openconfig-wifi-phy.yang @@ -25,7 +25,19 @@ module openconfig-wifi-phy { description "Model for managing PHY layer configuration of Radio interfaces."; - oc-ext:openconfig-version "1.2.2"; + oc-ext:openconfig-version "1.2.4"; + + revision "2024-07-10" { + description + "Adding TRANSITION modes to PHY OPMODES"; + reference "1.2.4"; + } + + revision "2023-11-30" { + description + "Add allowed-max-eirp and allowed-max-txpower radio state leaves."; + reference "1.2.3"; + } revision "2023-05-26" { description @@ -346,6 +358,20 @@ module openconfig-wifi-phy { "Transmit channel-utilization percentage."; } + leaf allowed-max-eirp { + type uint8; + units dBm; + description + "Maximum allowed transmit eirp of this radio + antenna, of the current channel, in dBm."; + } + + leaf allowed-max-txpower { + type uint8; + units dBm; + description + "Maximum allowed transmit power of this radio, of the current channel, in dBm."; + } + leaf obss-rx { type oc-types:percentage; description @@ -464,20 +490,40 @@ module openconfig-wifi-phy { description "Open authentication with Opportunistic Wireless Encryption."; } + enum ENHANCED_OPEN_TRANSITION { + description + "Open authentication with Opportunistic Wireless Encryption and + support for transition mode."; + } enum WPA3_SAE { description "WPA3-SAE using Simultaneous Authentication of Equals (SAE)."; } + enum WPA3_2_SAE_TRANSITION { + description + "WPA3-SAE using Simultaneous Authentication of Equals (SAE) and + WPA2-PSK AKMs."; + } enum WPA3_ENTERPRISE { description "WPA3-Enterprise with 802.1X SHA-256 authentication key management."; } + enum WPA3_2_ENTERPRISE_TRANSITION { + description + "WPA3-Enterprise with 802.1X SHA-256 authentication key + management."; + } enum WPA3_ENTERPRISE_192_BIT { description "WPA3-Enterprise with 802.1X SHA-384 authentication key management."; } + enum WPA3_ENTERPRISE_GCM_256_BIT { + description + "WPA3-Enterprise with 802.1X GCM256 authentication key + management."; + } } description "Operating mode of the BSS."; diff --git a/release/models/wifi/openconfig-wifi-types.yang b/release/models/wifi/openconfig-wifi-types.yang index d2d62f038..225cc2a76 100644 --- a/release/models/wifi/openconfig-wifi-types.yang +++ b/release/models/wifi/openconfig-wifi-types.yang @@ -22,7 +22,19 @@ module openconfig-wifi-types { that are used in the openconfig-wifi modules. It can be imported by any module to make use of these types."; - oc-ext:openconfig-version "1.1.1"; + oc-ext:openconfig-version "1.1.3"; + + revision "2024-04-25" { + description + "Adding INACTIVE client_state"; + reference "1.1.3"; + } + + revision "2023-09-01" { + description + "Adding FREQ_2_6_GHZ."; + reference "1.1.2"; + } revision "2022-05-26" { description @@ -148,6 +160,13 @@ module openconfig-wifi-types { (signature) mechanisms."; } + identity INACTIVE { + base CLIENT_STATE; + description + "Client is no longer active in the 802.11 state machine. Client data + remains in the client state, but client is no longer active on AP."; + } + identity AP_STATE { description "The Up/Down state of an AP."; } @@ -273,6 +292,12 @@ module openconfig-wifi-types { 6GHz frequencies."; } + identity FREQ_2_6_GHZ { + base OPERATING_FREQUENCY; + description "The Radio or SSID will be dual band; operating in 2.4 and + 6GHz frequencies."; + } + identity CLIENT_CAPABILITIES { description "Client capabilities, as reported by Association Request or