Skip to content
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

Update RT-2.13: Weighted-ECMP for IS-IS to not also use BGP #3316

Open
wants to merge 18 commits into
base: main
Choose a base branch
from

Conversation

ANISH-GOTTAPU
Copy link
Contributor

@ANISH-GOTTAPU ANISH-GOTTAPU commented Jul 22, 2024

Currently, OTG does not support IBGP with the same NextHOP across multiple devices. As a result, the DUT will only consider one neighborship. To address this, the test has been modified to use only ISIS, advertising the same route from three ISIS neighbors. The expected behavior is that traffic will load balance based on weights.

I've updated the test to use only the interface on the transmit end, ensuring compatibility with both HW and KNE (SW), as we lack a proto file that supports KNE with LAG on transmit. This change will not affect the weighted-ECMP since the receiving end is LAG only.

@ANISH-GOTTAPU ANISH-GOTTAPU requested review from a team as code owners July 22, 2024 11:23
@ANISH-GOTTAPU ANISH-GOTTAPU marked this pull request as draft July 22, 2024 11:23
@OpenConfigBot
Copy link

OpenConfigBot commented Jul 22, 2024

Pull Request Functional Test Report for #3316 / 3374917

Virtual Devices

Device Test Test Documentation Job Raw Log
Arista cEOS status
RT-2.13: Weighted-ECMP for IS-IS
Cisco 8000E status
RT-2.13: Weighted-ECMP for IS-IS
Cisco XRd status
RT-2.13: Weighted-ECMP for IS-IS
Juniper ncPTX status
RT-2.13: Weighted-ECMP for IS-IS
Nokia SR Linux status
RT-2.13: Weighted-ECMP for IS-IS
Openconfig Lemming status
RT-2.13: Weighted-ECMP for IS-IS

Hardware Devices

Device Test Test Documentation Raw Log
Arista 7808 status
RT-2.13: Weighted-ECMP for IS-IS
Cisco 8808 status
RT-2.13: Weighted-ECMP for IS-IS
Juniper PTX10008 status
RT-2.13: Weighted-ECMP for IS-IS
Nokia 7250 IXR-10e status
RT-2.13: Weighted-ECMP for IS-IS

Help

@coveralls
Copy link

coveralls commented Jul 22, 2024

Pull Request Test Coverage Report for Build 13047976046

Details

  • 0 of 0 changed or added relevant lines in 0 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage remained the same at 18.24%

Totals Coverage Status
Change from base Build 13047252474: 0.0%
Covered Lines: 2483
Relevant Lines: 13613

💛 - Coveralls

@self-maurya self-maurya requested a review from rohit-rp October 9, 2024 03:40
@rohit-rp rohit-rp self-assigned this Oct 25, 2024
@ANISH-GOTTAPU ANISH-GOTTAPU marked this pull request as ready for review November 21, 2024 07:22
@dplore dplore changed the title Otg rt2.13 update Update RT-2.13: Weighted-ECMP for IS-IS to not also use BGP Dec 20, 2024
@Swetha-haridasula Swetha-haridasula self-assigned this Jan 2, 2025
@ANISH-GOTTAPU ANISH-GOTTAPU requested a review from a team as a code owner January 2, 2025 08:52
@ram-mac ram-mac assigned ram-mac and unassigned rohit-rp and Swetha-haridasula Jan 17, 2025
@@ -249,17 +220,13 @@ func TestWeightedECMPForISIS(t *testing.T) {
}

top.Flows().Clear()
if deviations.ISISLoopbackRequired(dut) {
Copy link
Contributor

Choose a reason for hiding this comment

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

@ANISH-GOTTAPU , i see this deviation is removed from the code. Can you give reason for this change?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

We have updated the test not to use BGP anymore, so the deviation "ISISLoopbackRequired" is not needed.

Copy link
Contributor

@ram-mac ram-mac left a comment

Choose a reason for hiding this comment

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

Did this test pass at least in the KNE environment?

d := &oc.Root{}
p1 := dut.Port(t, "port1")

i := d.GetOrCreateInterface(p1.Name())
Copy link
Contributor

Choose a reason for hiding this comment

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

Here interface leaf is mandatory to be added. Use NewOCInterface for creating the new interface which would configure the right way. Similarly for other aggregate interfaces too.

// NewOCInterface returns a new *oc.Interface configured with these attributes.
func (a *Attributes) NewOCInterface(name string, dut *ondatra.DUTDevice) *oc.Interface {
return a.ConfigOCInterface(&oc.Interface{Name: ygot.String(name)}, dut)
}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated the code to use NewOCInterface

@@ -503,8 +461,8 @@ func configureDUT(t *testing.T, dut *ondatra.DUTDevice) []string {
gnmi.BatchDelete(b, gnmi.OC().Interface(aggID).Aggregation().MinLinks().Config())
gnmi.BatchReplace(b, gnmi.OC().Interface(aggID).Config(), agg)

p1 := dut.Port(t, fmt.Sprintf("port%d", (aggIdx*2)+1))
p2 := dut.Port(t, fmt.Sprintf("port%d", (aggIdx*2)+2))
p1 := dut.Port(t, fmt.Sprintf("port%d", (aggIdx*2)+2))
Copy link
Contributor

Choose a reason for hiding this comment

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

p1 is already used in this function above. Please use a different variable name here instead of reusing the same variable under the same function.
Instead of p1, p2 you could use something meaningful here above too

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Updated the code accordingly.

Copy link
Contributor

@ram-mac ram-mac left a comment

Choose a reason for hiding this comment

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

/fptest virtual

@ram-mac ram-mac assigned ANISH-GOTTAPU and unassigned ram-mac Jan 21, 2025
@ANISH-GOTTAPU
Copy link
Contributor Author

Did this test pass at least in the KNE environment?

The test is passing with KNE environment but had to reduce the traffic rate and adjust tolerance accordingly. Attaching the log for your reference.

RT_2.13_kne_ceos.log

@ANISH-GOTTAPU ANISH-GOTTAPU requested a review from ram-mac January 27, 2025 08:29
@MarcCharlebois
Copy link
Contributor

Did this test pass at least in the KNE environment?

The test is passing with KNE environment but had to reduce the traffic rate and adjust tolerance accordingly. Attaching the log for your reference.

RT_2.13_kne_ceos.log

It seems to me that the subtest is failing due to the interface not being shut down due to bizzare handling in that area.
This code tries to shut the interface from ATE/OTG side which I believe isn't fully shutting down the port - perhaps you can shed more light? @ANISH-GOTTAPU

I think the baseline behavior of this test should be to shut the DUT port explicitly, that way we get a deterministic behavior whichever type of platform this test is ran on. There's also an implicit assumption that the DUT is directly connected to the ATE/OTG with the current behavior. Thoughts? @ram-mac @rohit-rp

if deviations.ATEPortLinkStateOperationsUnsupported(ate) {
p3 := dut.Port(t, "port3")
gnmi.Replace(t, dut, gnmi.OC().Interface(p3.Name()).Enabled().Config(), false)
t.Logf("Disable ATE2:Port1: %s, %s", p3.Name(), gnmi.OC().Interface(p3.Name()).OperStatus().State())
} else {
p3 := ate.Port(t, "port3") // ATE:port3 is ATE2:port1
psa := gosnappi.NewControlState()
psa.Port().Link().SetPortNames([]string{p3.ID()}).SetState(gosnappi.StatePortLinkState.DOWN)
ate.OTG().SetControlState(t, psa)
time.Sleep(10 * time.Second)
defer func() {
psa := gosnappi.NewControlState()
psa.Port().Link().SetPortNames([]string{p3.ID()}).SetState(gosnappi.StatePortLinkState.UP)
ate.OTG().SetControlState(t, psa)
}()
}
p3 := dut.Port(t, "port3")
gnmi.Await(t, dut, gnmi.OC().Interface(p3.Name()).OperStatus().State(), time.Minute*2, oc.Interface_OperStatus_DOWN)

I'm just curious to know why this value has a comment that suggests the value should be different based on the environment.

ecmpTolerance = uint64(1) // Should be 3 for kne env

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

Successfully merging this pull request may close these issues.

7 participants