Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
cagdasalagoz-arista authored Aug 9, 2024
2 parents 7f186d0 + 94683fe commit 27f00f1
Show file tree
Hide file tree
Showing 23 changed files with 1,002 additions and 210 deletions.
92 changes: 91 additions & 1 deletion doc/terminal-device-properties-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -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";
```
```
# 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.

<img width="1062" alt="image" src="https://github.com/openconfig/public/assets/10529210/85d8f159-d753-434e-89e3-38a9b24cdd92">

- **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.

<img width="1150" alt="image" src="https://github.com/openconfig/public/assets/10529210/a1810dd0-2e84-40c5-baf4-bfc43aad623c">

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.


5 changes: 5 additions & 0 deletions regexp-tests/openconfig-network-instance-types-test.yang
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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";
Expand Down Expand Up @@ -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";
Expand All @@ -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";
Expand Down
13 changes: 13 additions & 0 deletions regexp-tests/openconfig-yang-types-test.yang
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
22 changes: 21 additions & 1 deletion release/models/aft/openconfig-aft-common.yang
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,13 @@ submodule openconfig-aft-common {
"Submodule containing definitions of groupings that are re-used
across multiple contexts within the AFT model.";

oc-ext:openconfig-version "2.5.0";
oc-ext:openconfig-version "2.6.0";

revision "2024-04-25" {
description
"Add backup-active to AFT NHG state.";
reference "2.6.0";
}

revision "2024-01-26" {
description
Expand Down Expand Up @@ -693,6 +699,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 {
Expand Down
8 changes: 7 additions & 1 deletion release/models/aft/openconfig-aft-ethernet.yang
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,13 @@ submodule openconfig-aft-ethernet {
"Submodule containing definitions of groupings for the abstract
forwarding tables for Ethernet.";

oc-ext:openconfig-version "2.5.0";
oc-ext:openconfig-version "2.6.0";

revision "2024-04-25" {
description
"Add backup-active to AFT NHG state.";
reference "2.6.0";
}

revision "2024-01-26" {
description
Expand Down
8 changes: 7 additions & 1 deletion release/models/aft/openconfig-aft-ipv4.yang
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,13 @@ submodule openconfig-aft-ipv4 {
"Submodule containing definitions of groupings for the abstract
forwarding tables for IPv4.";

oc-ext:openconfig-version "2.5.0";
oc-ext:openconfig-version "2.6.0";

revision "2024-04-25" {
description
"Add backup-active to AFT NHG state.";
reference "2.6.0";
}

revision "2024-01-26" {
description
Expand Down
8 changes: 7 additions & 1 deletion release/models/aft/openconfig-aft-ipv6.yang
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,13 @@ submodule openconfig-aft-ipv6 {
"Submodule containing definitions of groupings for the abstract
forwarding tables for IPv6.";

oc-ext:openconfig-version "2.5.0";
oc-ext:openconfig-version "2.6.0";

revision "2024-04-25" {
description
"Add backup-active to AFT NHG state.";
reference "2.6.0";
}

revision "2024-01-26" {
description
Expand Down
16 changes: 7 additions & 9 deletions release/models/aft/openconfig-aft-mpls.yang
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,18 @@ submodule openconfig-aft-mpls {
"Submodule containing definitions of groupings for the abstract
forwarding table for MPLS label forwarding.";

oc-ext:openconfig-version "2.5.0";
oc-ext:openconfig-version "2.6.0";

revision "2024-01-26" {
revision "2024-04-25" {
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";
"Add backup-active to AFT NHG state.";
reference "2.6.0";
}

revision "2023-09-26" {
revision "2024-04-25" {
description
"Add next-hop-group-name in NHG AFT entry state.";
reference "2.4.0";
"Add backup-active to AFT NHG state.";
reference "2.5.0";
}

revision "2023-04-19" {
Expand Down
8 changes: 7 additions & 1 deletion release/models/aft/openconfig-aft-pf.yang
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@ submodule openconfig-aft-pf {
fields other than the destination address that is used in
other forwarding tables.";

oc-ext:openconfig-version "2.5.0";
oc-ext:openconfig-version "2.6.0";

revision "2024-04-25" {
description
"Add backup-active to AFT NHG state.";
reference "2.6.0";
}

revision "2024-01-26" {
description
Expand Down
8 changes: 7 additions & 1 deletion release/models/aft/openconfig-aft-state-synced.yang
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,13 @@ submodule openconfig-aft-state-synced {
"Submodule containing definitions of groupings for the state
synced signals corresponding to various abstract forwarding tables.";

oc-ext:openconfig-version "2.5.0";
oc-ext:openconfig-version "2.6.0";

revision "2024-04-25" {
description
"Add backup-active to AFT NHG state.";
reference "2.6.0";
}

revision "2024-01-26" {
description
Expand Down
8 changes: 7 additions & 1 deletion release/models/aft/openconfig-aft.yang
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,13 @@ module openconfig-aft {
is referred to as an Abstract Forwarding Table (AFT), rather than
the FIB.";

oc-ext:openconfig-version "2.5.0";
oc-ext:openconfig-version "2.6.0";

revision "2024-04-25" {
description
"Add backup-active to AFT NHG state.";
reference "2.6.0";
}

revision "2024-01-26" {
description
Expand Down
46 changes: 39 additions & 7 deletions release/models/bgp/openconfig-bgp-policy.yang
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,15 @@ module openconfig-bgp-policy {
It augments the base routing-policy module with BGP-specific
options for conditions and actions.";

oc-ext:openconfig-version "7.0.0";
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
Expand Down Expand Up @@ -384,28 +392,52 @@ module openconfig-bgp-policy {

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 regular community count condition";

uses community-count-config;
}

container state {

config false;

description
"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 community count condition";
"Configuration data for extended community count condition";

uses community-count-config;
}
Expand All @@ -415,7 +447,7 @@ module openconfig-bgp-policy {
config false;

description
"Operational state data for community count condition";
"Operational state data for extended community count condition";

uses community-count-config;
uses community-count-state;
Expand Down
Loading

0 comments on commit 27f00f1

Please sign in to comment.