Skip to content

Commit

Permalink
Add deviation for Ipv6 Router Advertisement Interval configuration (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
self-maurya authored Aug 30, 2024
1 parent c28e463 commit b884734
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,29 +80,23 @@ var (
func configureDUT(t *testing.T, dut *ondatra.DUTDevice) {
d := gnmi.OC()
p1 := dut.Port(t, "port1")
i1 := &oc.Interface{Name: ygot.String(p1.Name())}
gnmi.Replace(t, dut, d.Interface(p1.Name()).Config(), configInterfaceDUT(i1, &dutSrc, dut))
gnmi.Replace(t, dut, d.Interface(p1.Name()).Config(), configInterfaceDUT(p1, &dutSrc, dut))
p2 := dut.Port(t, "port2")
i2 := &oc.Interface{Name: ygot.String(p2.Name())}
gnmi.Replace(t, dut, d.Interface(p2.Name()).Config(), configInterfaceDUT(i2, &dutDst, dut))
gnmi.Replace(t, dut, d.Interface(p2.Name()).Config(), configInterfaceDUT(p2, &dutDst, dut))
}

// Configures the given DUT interface.
func configInterfaceDUT(i *oc.Interface, a *attrs.Attributes, dut *ondatra.DUTDevice) *oc.Interface {
i.Description = ygot.String(a.Desc)
i.Type = oc.IETFInterfaces_InterfaceType_ethernetCsmacd
if deviations.InterfaceEnabled(dut) {
i.Enabled = ygot.Bool(true)
func configInterfaceDUT(p *ondatra.Port, a *attrs.Attributes, dut *ondatra.DUTDevice) *oc.Interface {
i := a.NewOCInterface(p.Name(), dut)
s4 := i.GetOrCreateSubinterface(0).GetOrCreateIpv4()
if deviations.InterfaceEnabled(dut) && !deviations.IPv4MissingEnabled(dut) {
s4.Enabled = ygot.Bool(true)
}
s := i.GetOrCreateSubinterface(0)
s6 := s.GetOrCreateIpv6()
if deviations.InterfaceEnabled(dut) {
s6.Enabled = ygot.Bool(true)
}
s6a := s6.GetOrCreateAddress(a.IPv6)
s6a.PrefixLength = ygot.Uint8(plen6)
s6 := i.GetOrCreateSubinterface(0).GetOrCreateIpv6()
routerAdvert := s6.GetOrCreateRouterAdvertisement()
routerAdvert.SetInterval(routerAdvertisementTimeInterval)
if !deviations.Ipv6RouterAdvertisementIntervalUnsupported(dut) {
routerAdvert.SetInterval(routerAdvertisementTimeInterval)
}
if deviations.Ipv6RouterAdvertisementConfigUnsupported(dut) {
routerAdvert.SetSuppress(routerAdvertisementDisabled)
} else {
Expand Down Expand Up @@ -143,11 +137,13 @@ func configureOTG(t *testing.T, ate *ondatra.ATEDevice) gosnappi.Config {
// Verifies that desired parameters are set with required value on the device.
func verifyRATelemetry(t *testing.T, dut *ondatra.DUTDevice) {
txPort := dut.Port(t, "port1")
telemetryTimeIntervalQuery := gnmi.OC().Interface(txPort.Name()).Subinterface(0).Ipv6().RouterAdvertisement().Interval().State()
timeIntervalOnTelemetry := gnmi.Get(t, dut, telemetryTimeIntervalQuery)
t.Logf("Required RA time interval = %v, RA Time interval observed on telemetry = %v ", routerAdvertisementTimeInterval, timeIntervalOnTelemetry)
if timeIntervalOnTelemetry != routerAdvertisementTimeInterval {
t.Fatalf("Inconsistent Time interval!\nRequired RA time interval = %v and Configured RA Time Interval = %v are not same!", routerAdvertisementTimeInterval, timeIntervalOnTelemetry)
if !deviations.Ipv6RouterAdvertisementIntervalUnsupported(dut) {
telemetryTimeIntervalQuery := gnmi.OC().Interface(txPort.Name()).Subinterface(0).Ipv6().RouterAdvertisement().Interval().State()
timeIntervalOnTelemetry := gnmi.Get(t, dut, telemetryTimeIntervalQuery)
t.Logf("Required RA time interval = %v, RA Time interval observed on telemetry = %v ", routerAdvertisementTimeInterval, timeIntervalOnTelemetry)
if timeIntervalOnTelemetry != routerAdvertisementTimeInterval {
t.Fatalf("Inconsistent Time interval!\nRequired RA time interval = %v and Configured RA Time Interval = %v are not same!", routerAdvertisementTimeInterval, timeIntervalOnTelemetry)
}
}

if deviations.Ipv6RouterAdvertisementConfigUnsupported(dut) {
Expand Down Expand Up @@ -210,7 +206,6 @@ func validatePackets(t *testing.T, fileName string) {
if routerAdvert != nil {
t.Fatalf("Error:Found a router advertisement packet!")
}

}
}
}
Expand All @@ -229,5 +224,4 @@ func TestIpv6NDRA(t *testing.T) {
t.Run("TestCase-2: No Router Advertisement in response to Router Solicitation", func(t *testing.T) {
verifyOTGPacketCaptureForRA(t, ate, otgConfig, true, 1)
})

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,6 @@ platform_exceptions: {
}
deviations: {
interface_enabled: true
ipv6_router_advertisement_interval_unsupported: true
}
}
5 changes: 5 additions & 0 deletions internal/deviations/deviations.go
Original file line number Diff line number Diff line change
Expand Up @@ -1119,3 +1119,8 @@ func BgpAfiSafiInDefaultNiBeforeOtherNi(dut *ondatra.DUTDevice) bool {
func DefaultImportExportPolicyUnsupported(dut *ondatra.DUTDevice) bool {
return lookupDUTDeviations(dut).GetDefaultImportExportPolicyUnsupported()
}

// Ipv6RouterAdvertisementIntervalUnsupported returns true for devices which don't support Ipv6 RouterAdvertisement interval configuration
func Ipv6RouterAdvertisementIntervalUnsupported(dut *ondatra.DUTDevice) bool {
return lookupDUTDeviations(dut).GetIpv6RouterAdvertisementIntervalUnsupported()
}
3 changes: 2 additions & 1 deletion proto/metadata.proto
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,8 @@ message Metadata {
bool bgp_afi_safi_in_default_ni_before_other_ni = 212;
// Devices which do not support default import export policy.
bool default_import_export_policy_unsupported = 213;

// ipv6_router_advertisement_interval_unsupported is set to true for devices that do not support ipv6 router advertisement interval configuration.
bool ipv6_router_advertisement_interval_unsupported = 214;

// Reserved field numbers and identifiers.
reserved 84, 9, 28, 20, 90, 97, 55, 89, 19, 36, 35, 40, 173;
Expand Down
97 changes: 56 additions & 41 deletions proto/metadata_go_proto/metadata.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit b884734

Please sign in to comment.