Skip to content

Fix ISIS authentication configuration for Cisco FNTs - #6032

Open
shpaulch wants to merge 2 commits into
openconfig:mainfrom
b4firex:ISIS_Authen_Fix
Open

Fix ISIS authentication configuration for Cisco FNTs#6032
shpaulch wants to merge 2 commits into
openconfig:mainfrom
b4firex:ISIS_Authen_Fix

Conversation

@shpaulch

Copy link
Copy Markdown
Contributor

Summary

This commit updates five FNT/configuration paths to support Cisco IS-IS P2P authentication using the existing set_isis_auth_with_interface_authentication_container deviation.

No new deviation was created. The existing deviation helper and metadata field are reused.

The changes cover:

  • RT-2.6 IS-IS hello-padding test
  • RT-2.9 IS-IS wide-metric test
  • RT-2.11 IS-IS passive-interface test
  • MPLS-1.1 ISIS label-block test
  • gNMI-1.2 full-configuration-replace setup

For Cisco platforms, authentication is configured under the ISIS interface-level authentication container. Other platforms continue using the existing level-specific hello-authentication container.

Reliability changes

  • Added error handling for PushAndStart.
  • Added DUT and OTG operational-state waits to the RT-2.6 test.

@shpaulch
shpaulch requested review from a team as code owners September 12, 2026 01:15
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request updates IS-IS authentication logic across several test suites to accommodate platform-specific differences on Cisco devices. By leveraging an existing deviation, the changes ensure that authentication is correctly applied to the interface-level container for Cisco platforms while maintaining standard behavior for others. Additionally, the PR enhances test reliability by introducing robust error checking and synchronization waits for device and link states.

Highlights

  • ISIS Authentication Configuration: Updated multiple test configurations to support Cisco-specific IS-IS P2P authentication by utilizing the 'set_isis_auth_with_interface_authentication_container' deviation.
  • Reliability Improvements: Added error handling for 'PushAndStart' operations and implemented operational-state waits for DUT and OTG to ensure stability during test execution.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@OpenConfigBot

OpenConfigBot commented Sep 12, 2026

Copy link
Copy Markdown

Pull Request Functional Test Report for #6032 / 01d40ba

Virtual Devices

Device Test Test Documentation Job Raw Log
Arista cEOS status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS
Cisco 8000E status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS
Cisco XRd status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS
Juniper ncPTX status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS
Nokia SR Linux status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS
Openconfig Lemming status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS

Hardware Devices

Device Test Test Documentation Raw Log
Arista status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS
Cisco status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS
Juniper status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS
Nokia status
status
status
status
status
gNMI-1.2: Benchmarking: Full Configuration Replace
RT-2.6: IS-IS Hello-Padding enabled at interface level
RT-2.11: IS-IS Passive is enabled at the area level
RT-2.9: IS-IS metric style wide enabled
MPLS-1.1: MPLS label blocks using ISIS

Help

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a new deviation set_isis_auth_with_interface_authentication_container across multiple IS-IS and MPLS tests to conditionally configure IS-IS authentication at the interface level instead of the hello level. It also improves test robustness by checking the return value of PushAndStart and waiting for interface and link operational status. The reviewer feedback highlights several violations of the repository style guide, specifically recommending the removal of static time.Sleep calls and ensuring that neighbor resolution (WaitForARP) is performed before proceeding with the tests.

Comment on lines +231 to +238
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}

// Do not consume the IS-IS adjacency timeout while either end of the link
// is still becoming operational after the OTG configuration push.
gnmi.Await(t, ts.DUT, gnmi.OC().Interface(ts.DUTPort1.Name()).OperStatus().State(), 2*time.Minute, oc.Interface_OperStatus_UP)
gnmi.Await(t, otg, gnmi.OTG().Port(ts.ATEPort1.ID()).Link().State(), 2*time.Minute, otgtelemetry.Port_Link_UP)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

According to the Repository Style Guide, tests that configure and start OTG protocols and traffic must ensure neighbor resolution (ARP for IPv4) has completed before starting traffic. Avoid waiting for IPv6 neighbor resolution (ND) if there are no native IPv6 flows destined for a configured VLAN or interface, as the ATE will not initiate Neighbor Discovery, causing the test to fail on platforms that do not send proactive Router Advertisements (RAs).

Suggested change
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
// Do not consume the IS-IS adjacency timeout while either end of the link
// is still becoming operational after the OTG configuration push.
gnmi.Await(t, ts.DUT, gnmi.OC().Interface(ts.DUTPort1.Name()).OperStatus().State(), 2*time.Minute, oc.Interface_OperStatus_UP)
gnmi.Await(t, otg, gnmi.OTG().Port(ts.ATEPort1.ID()).Link().State(), 2*time.Minute, otgtelemetry.Port_Link_UP)
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
// Do not consume the IS-IS adjacency timeout while either end of the link
// is still becoming operational after the OTG configuration push.
gnmi.Await(t, ts.DUT, gnmi.OC().Interface(ts.DUTPort1.Name()).OperStatus().State(), 2*time.Minute, oc.Interface_OperStatus_UP)
gnmi.Await(t, otg, gnmi.OTG().Port(ts.ATEPort1.ID()).Link().State(), 2*time.Minute, otgtelemetry.Port_Link_UP)
otgutils.WaitForARP(t, otg, ts.ATETop, "IPv4")
References
  1. Avoid waiting for IPv6 neighbor resolution (ND) in OTG tests if there are no native IPv6 flows destined for a configured VLAN or interface. (link)

Comment on lines 195 to 198
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
time.Sleep(time.Minute * 2)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

According to the Repository Style Guide, static time.Sleep calls after pushing configurations or starting protocols are an anti-pattern and must be avoided. Instead, use otgutils.WaitForARP to dynamically wait for IPv4 neighbor resolution before proceeding. Avoid waiting for IPv6 neighbor resolution (ND) if there are no native IPv6 flows destined for a configured VLAN or interface.

Suggested change
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
time.Sleep(time.Minute * 2)
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
otgutils.WaitForARP(t, otg, ts.ATETop, "IPv4")
References
  1. Avoid using static sleeps after pushing configurations or starting protocols in OTG tests. Instead, rely on dynamic waiting mechanisms like WaitForARP. (link)
  2. Avoid waiting for IPv6 neighbor resolution (ND) in OTG tests if there are no native IPv6 flows destined for a configured VLAN or interface. (link)

Comment on lines 212 to 215
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
time.Sleep(time.Minute * 2)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

According to the Repository Style Guide, static time.Sleep calls after pushing configurations or starting protocols are an anti-pattern and must be avoided. Instead, use otgutils.WaitForARP to dynamically wait for IPv4 neighbor resolution before proceeding. Avoid waiting for IPv6 neighbor resolution (ND) if there are no native IPv6 flows destined for a configured VLAN or interface.

Suggested change
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
time.Sleep(time.Minute * 2)
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
otgutils.WaitForARP(t, otg, ts.ATETop, "IPv4")
References
  1. Avoid using static sleeps after pushing configurations or starting protocols in OTG tests. Instead, rely on dynamic waiting mechanisms like WaitForARP. (link)
  2. Avoid waiting for IPv6 neighbor resolution (ND) in OTG tests if there are no native IPv6 flows destined for a configured VLAN or interface. (link)

Comment on lines 454 to 457
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
time.Sleep(time.Minute * 2)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

According to the Repository Style Guide, static time.Sleep calls after pushing configurations or starting protocols are an anti-pattern and must be avoided. Instead, use otgutils.WaitForARP to dynamically wait for IPv4 neighbor resolution before proceeding. Avoid waiting for IPv6 neighbor resolution (ND) if there are no native IPv6 flows destined for a configured VLAN or interface.

Suggested change
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
time.Sleep(time.Minute * 2)
if err := ts.PushAndStart(t); err != nil {
t.Fatalf("PushAndStart failed: %v", err)
}
otgutils.WaitForARP(t, otg, ts.ATETop, "IPv4")
References
  1. Avoid using static sleeps after pushing configurations or starting protocols in OTG tests. Instead, rely on dynamic waiting mechanisms like WaitForARP. (link)
  2. Avoid waiting for IPv6 neighbor resolution (ND) in OTG tests if there are no native IPv6 flows destined for a configured VLAN or interface. (link)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants