-
Notifications
You must be signed in to change notification settings - Fork 690
Adding FEC statistics to Ethernet interface #1404
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
No major YANG version changes in commit efdcd9d |
|
is this FEC different from: public/release/models/platform My understanding is this: The funny thing is that this statement appears to be only true for interfaces that are not linked to an optical channel: I didn't find any information anywhere about what exactly necessitates modeling an optical-channel but suppose it is required as soon as the optical signal is wavelength specific. So from an optical perspective, PAM4 ought to be associated to an optical channel since it is wavelength specific and often tunable -- just like ZR+ optics are. So my reading is that the FEC in question is covered in release/models/optical-transport/openconfig-terminal-device.yang |
Yes. It is different. Let consider 400GBASE-FR4. This PMD/transciver do not support FEC. Simply encode signal recived over 8 (PAM4) serdeses running at 28GHz into 4 lambdas, 2 polarization each, directly translating 4 electrical voltage levels (PAM4) to 4 optical power levels. When transciver is ZR-class, The MAC frame processing chip/asic/npu insert FEC correctioncode, and transciver (on same linecard) reads it, apply corrections and handover to line side that adds OFEC/CFEC acorrection code applicabel to optical transport and send over lambdas with 16QAM or better modulation. On remote site transciver strips OFEC/CFEC correction code while correcting whatever block it can correct and handover to "tributary" site and add "ethernet" FEC before sending to MAC frame processing chip/asic/npu. In short we have 3 segments protected by different FECs. |
Updated the description for ethernet FEC statistics and added a new leaf for fec-uncorrectable-blocks.
This reverts commit 8de46c1. reverting
|
Reviewed in Dec 9 OC Operators meeting, the model tree LGTM. I will help @rszarecki resolve the yang issues offline |
|
Regarding the leaf fec-uncorrectable-words and its reference to IEEE802.3 clause 119.3.4. The description of FEC_symbol_error_counter_i in clause 119.3.4 is that it is a counter that counts “once for each 10-bit symbol corrected”. Is the leaf fec-uncorrectable-words intended to count corrected or uncorrected symbol errors ? Thanks. |
…ESNR as not used.
dplore
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
suggestion for a TODO comment format
release/models/optical-transport/openconfig-terminal-device.yang
Outdated
Show resolved
Hide resolved
Co-authored-by: Darren Loher <[email protected]>
release/models/optical-transport/openconfig-terminal-device.yang
Outdated
Show resolved
Hide resolved
fixed. |
|
Last call is set for Jan 6, 2026 |
|
Rereviewed in Dec 16 OC Operators meeting, this will merge on Jan 6, 2026 |
|
@dplore -- this still needs an approval here before we can submit. Can you do a review? |
|
/gcbrun |
* Add FEC statistics and update descriptions in YANG * (M) release/models/optical-transport/openconfig-terminal-device.yang * (M) release/models/interfaces/openconfig-if-ethernet.yang --------- Co-authored-by: Darren Loher <[email protected]>
Adding FEC statistics to Ethernet interface.
Change Scope
The Ethernet interface that use PAM4 modulation (400GE and bove) must support FEC (typicaly KP4-FEC). The NRZ port may but in most cases not have to. Exposing FEC statistics provides ability to monitor link quality.
(ref: IEEE802.3bs, IEEE802.3.df)
This is espetially usefull with 400GBASE-FR4 400GBASE-LR4 PMDs, an their 800GBASE equivlents.
module: openconfig-interfaces +--rw interfaces +--rw interface* [name] +--rw oc-eth:ethernet | +--ro oc-eth:state | | +--ro oc-eth:counters + | | | +--ro oc-eth:fec-uncorrectable-blocks? oc-yang:counter64 + | | | +--ro oc-eth:fec-corrected-blocks? oc-yang:counter64 | | | +--ro oc-eth:in-mac-control-frames? oc-yang:counter64 | | | +--ro oc-eth:in-mac-pause-frames? oc-yang:counter64 | | | +--ro oc-eth:in-oversize-frames? oc-yang:counter64 | | | +--ro oc-eth:in-undersize-frames? oc-yang:counter64 | | | +--ro oc-eth:in-jabber-frames? oc-yang:counter64 | | | +--ro oc-eth:in-fragment-frames? oc-yang:counter64 | | | +--ro oc-eth:in-8021q-frames? oc-yang:counter64 | | | +--ro oc-eth:in-crc-errors? oc-yang:counter64 - | | | +--ro oc-eth:in-block-errors? oc-yang:counter64 + | | | x--ro oc-eth:in-block-errors? oc-yang:counter64 | | | +--ro oc-eth:in-carrier-errors? oc-yang:counter64 | | | +--ro oc-eth:in-interrupted-tx? oc-yang:counter64 | | | +--ro oc-eth:in-late-collision? oc-yang:counter64 | | | +--ro oc-eth:in-mac-errors-rx? oc-yang:counter64 | | | +--ro oc-eth:in-single-collision? oc-yang:counter64 | | | +--ro oc-eth:in-symbol-error? oc-yang:counter64 | | | +--ro oc-eth:in-maxsize-exceeded? oc-yang:counter64 | | | +--ro oc-eth:out-mac-control-frames? oc-yang:counter64 | | | +--ro oc-eth:out-mac-pause-frames? oc-yang:counter64 | | | +--ro oc-eth:out-8021q-frames? oc-yang:counter64 | | | +--ro oc-eth:out-mac-errors-tx? oc-yang:counter64 | | | +--ro oc-eth-ext:in-distribution | | | +--ro oc-eth-ext:in-frames-64-octets? oc-yang:counter64 | | | +--ro oc-eth-ext:in-frames-65-127-octets? oc-yang:counter64 | | | +--ro oc-eth-ext:in-frames-128-255-octets? oc-yang:counter64 | | | +--ro oc-eth-ext:in-frames-256-511-octets? oc-yang:counter64 | | | +--ro oc-eth-ext:in-frames-512-1023-octets? oc-yang:counter64 | | | +--ro oc-eth-ext:in-frames-1024-1518-octets? oc-yang:counter64 + | | +--ro oc-eth:pre-fec-ber + | | | +--ro oc-eth:instant? decimal64 + | | | +--ro oc-eth:avg? decimal64 + | | | +--ro oc-eth:min? decimal64 + | | | +--ro oc-eth:max? decimal64 + | | | +--ro oc-eth:interval? oc-types:stat-interval + | | | +--ro oc-eth:min-time? oc-types:timeticks64 + | | | +--ro oc-eth:max-time? oc-types:timeticks64 + | | +--ro oc-eth:post-fec-ber + | | | +--ro oc-eth:instant? decimal64 + | | | +--ro oc-eth:avg? decimal64 + | | | +--ro oc-eth:min? decimal64 + | | | +--ro oc-eth:max? decimal64 + | | | +--ro oc-eth:interval? oc-types:stat-interval + | | | +--ro oc-eth:min-time? oc-types:timeticks64 + | | | +--ro oc-eth:max-time? oc-types:timeticks64and ( needed on 100GBASE-FR1 w/ CAUI-4 NRZ electrical interface to host)
module: openconfig-platform +--rw components +--rw component* [name] +--rw oc-transceiver:transceiver | +--rw oc-transceiver:config | | +--rw oc-transceiver:enabled? boolean | | +--rw oc-transceiver:form-factor-preconf? identityref | | +--rw oc-transceiver:ethernet-pmd-preconf? identityref | | +--rw oc-transceiver:fec-mode? identityref | | +--rw oc-transceiver:module-functional-type? identityref | +--ro oc-transceiver:state | | +--ro oc-transceiver:enabled? boolean | | +--ro oc-transceiver:form-factor-preconf? identityref | | +--ro oc-transceiver:ethernet-pmd-preconf? identityref | | +--ro oc-transceiver:fec-mode? identityref | | +--ro oc-transceiver:module-functional-type? identityref | | +--ro oc-transceiver:present? enumeration | | +--ro oc-transceiver:form-factor? identityref | | +--ro oc-transceiver:connector-type? identityref | | +--ro oc-transceiver:vendor? string | | x--ro oc-transceiver:vendor-part? string | | +--ro oc-transceiver:vendor-rev? string | | +--ro oc-transceiver:ethernet-pmd? identityref | | +--ro oc-transceiver:sonet-sdh-compliance-code? identityref | | +--ro oc-transceiver:otn-compliance-code? identityref | | x--ro oc-transceiver:serial-no? string | | +--ro oc-transceiver:date-code? oc-yang:date-and-time | | +--ro oc-transceiver:fault-condition? boolean | | +--ro oc-transceiver:fec-status? identityref - | | +--ro oc-transceiver:fec-uncorrectable-blocks? yang:counter64 + | | +--ro oc-transceiver:fec-uncorrectable-blocks? oc-yang:counter64 + | | +--ro oc-transceiver:fec-corrected-blocks? oc-yang:counter64 | | +--ro oc-transceiver:fec-uncorrectable-words? yang:counter64 | | +--ro oc-transceiver:fec-corrected-bytes? yang:counter64 | | +--ro oc-transceiver:fec-corrected-bits? yang:counter64where:
Platform Implementations