From b745c8d5f26c756977293700301ddb10dbd9ff72 Mon Sep 17 00:00:00 2001 From: Ramesh Mudhireddy Date: Mon, 12 May 2025 15:49:59 -0700 Subject: [PATCH 1/3] Add UnreferencedAftFibAckUnsupported deviation --- .../gribigo_compliance_test.go | 9 +++++++-- .../metadata.textproto | 1 + internal/deviations/deviations.go | 5 +++++ proto/metadata.proto | 3 +++ proto/metadata_go_proto/metadata.pb.go | 20 ++++++++++++++----- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/feature/gribi/otg_tests/gribigo_compliance_test/gribigo_compliance_test.go b/feature/gribi/otg_tests/gribigo_compliance_test/gribigo_compliance_test.go index 04300fb8eaf..85481b4b54c 100644 --- a/feature/gribi/otg_tests/gribigo_compliance_test/gribigo_compliance_test.go +++ b/feature/gribi/otg_tests/gribigo_compliance_test/gribigo_compliance_test.go @@ -105,7 +105,7 @@ var moreSkipReasons = map[string]string{ "Election - Ensure that a client with mismatched parameters is rejected": "b/233111738", } -func shouldSkip(tt *compliance.TestSpec) string { +func shouldSkip(tt *compliance.TestSpec, dut *ondatra.DUTDevice) string { switch { case *skipFIBACK && tt.In.RequiresFIBACK: return "This RequiresFIBACK test is skipped by --skip_fiback" @@ -122,6 +122,11 @@ func shouldSkip(tt *compliance.TestSpec) string { case *skipIPv6 && tt.In.RequiresIPv6: return "This RequiresIPv6 test is skipped by --skip_ipv6" } + if (tt.In.ShortName == "Error: Missing NextHopGroup for the IPv4Entry" || + tt.In.ShortName == "Error: Empty NextHopGroup for the IPv4Entry") && + deviations.UnreferencedAftFibAckUnsupported(dut) { + return "This test is skipped by unreferenced_aft_fiback_unsupported deviation" + } return moreSkipReasons[tt.In.ShortName] } @@ -152,7 +157,7 @@ func TestCompliance(t *testing.T) { for _, tt := range compliance.TestSuite { t.Run(tt.In.ShortName, func(t *testing.T) { - if reason := shouldSkip(tt); reason != "" { + if reason := shouldSkip(tt, dut); reason != "" { t.Skip(reason) } compliance.SetDefaultNetworkInstanceName(deviations.DefaultNetworkInstance(dut)) diff --git a/feature/gribi/otg_tests/gribigo_compliance_test/metadata.textproto b/feature/gribi/otg_tests/gribigo_compliance_test/metadata.textproto index cc574f6d98b..437bdf95fca 100644 --- a/feature/gribi/otg_tests/gribigo_compliance_test/metadata.textproto +++ b/feature/gribi/otg_tests/gribigo_compliance_test/metadata.textproto @@ -30,5 +30,6 @@ platform_exceptions: { omit_l2_mtu: true interface_enabled: true default_network_instance: "default" + unreferenced_aft_fib_ack_unsupported: true } } diff --git a/internal/deviations/deviations.go b/internal/deviations/deviations.go index 58c3bdecb3b..d4e1202aab3 100644 --- a/internal/deviations/deviations.go +++ b/internal/deviations/deviations.go @@ -1352,3 +1352,8 @@ func BgpDistanceOcPathUnsupported(dut *ondatra.DUTDevice) bool { func IsisMplsUnsupported(dut *ondatra.DUTDevice) bool { return lookupDUTDeviations(dut).GetIsisMplsUnsupported() } + +// UnreferencedAftFibAckUnsupported returns true if no FIB_ACK for unreferenced NH/NHG entries +func UnreferencedAftFibAckUnsupported(dut *ondatra.DUTDevice) bool { + return lookupDUTDeviations(dut).GetUnreferencedAftFibAckUnsupported() +} diff --git a/proto/metadata.proto b/proto/metadata.proto index 13f57b21719..a7559346e7b 100644 --- a/proto/metadata.proto +++ b/proto/metadata.proto @@ -743,6 +743,9 @@ message Metadata { // Devices that do not support ISIS MPLS bool isis_mpls_unsupported = 268; + // No FIB_ACK support for unreferenced NH/NHG entries + bool unreferenced_aft_fib_ack_unsupported = 269; + // Reserved field numbers and identifiers. reserved 84, 9, 28, 20, 38, 43, 90, 97, 55, 89, 19, 36, 35, 40, 113, 131, 141, 173, 234, 254; } diff --git a/proto/metadata_go_proto/metadata.pb.go b/proto/metadata_go_proto/metadata.pb.go index 1c090da40f8..10469e639f8 100644 --- a/proto/metadata_go_proto/metadata.pb.go +++ b/proto/metadata_go_proto/metadata.pb.go @@ -1005,8 +1005,10 @@ type Metadata_Deviations struct { BgpDistanceOcPathUnsupported bool `protobuf:"varint,267,opt,name=bgp_distance_oc_path_unsupported,json=bgpDistanceOcPathUnsupported,proto3" json:"bgp_distance_oc_path_unsupported,omitempty"` // Devices that do not support ISIS MPLS IsisMplsUnsupported bool `protobuf:"varint,268,opt,name=isis_mpls_unsupported,json=isisMplsUnsupported,proto3" json:"isis_mpls_unsupported,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // No FIB_ACK support for unreferenced NH/NHG entries + UnreferencedAftFibAckUnsupported bool `protobuf:"varint,269,opt,name=unreferenced_aft_fib_ack_unsupported,json=unreferencedAftFibAckUnsupported,proto3" json:"unreferenced_aft_fib_ack_unsupported,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Metadata_Deviations) Reset() { @@ -2705,6 +2707,13 @@ func (x *Metadata_Deviations) GetIsisMplsUnsupported() bool { return false } +func (x *Metadata_Deviations) GetUnreferencedAftFibAckUnsupported() bool { + if x != nil { + return x.UnreferencedAftFibAckUnsupported + } + return false +} + type Metadata_PlatformExceptions struct { state protoimpl.MessageState `protogen:"open.v1"` Platform *Metadata_Platform `protobuf:"bytes,1,opt,name=platform,proto3" json:"platform,omitempty"` @@ -2761,7 +2770,7 @@ var File_metadata_proto protoreflect.FileDescriptor const file_metadata_proto_rawDesc = "" + "\n" + - "\x0emetadata.proto\x12\x12openconfig.testing\x1a1github.com/openconfig/ondatra/proto/testbed.proto\"\xe2\x93\x01\n" + + "\x0emetadata.proto\x12\x12openconfig.testing\x1a1github.com/openconfig/ondatra/proto/testbed.proto\"\xb3\x94\x01\n" + "\bMetadata\x12\x12\n" + "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12\x17\n" + "\aplan_id\x18\x02 \x01(\tR\x06planId\x12 \n" + @@ -2773,7 +2782,7 @@ const file_metadata_proto_rawDesc = "" + "\bPlatform\x12.\n" + "\x06vendor\x18\x01 \x01(\x0e2\x16.ondatra.Device.VendorR\x06vendor\x120\n" + "\x14hardware_model_regex\x18\x03 \x01(\tR\x12hardwareModelRegex\x124\n" + - "\x16software_version_regex\x18\x04 \x01(\tR\x14softwareVersionRegexJ\x04\b\x02\x10\x03R\x0ehardware_model\x1a\xb6\x8a\x01\n" + + "\x16software_version_regex\x18\x04 \x01(\tR\x14softwareVersionRegexJ\x04\b\x02\x10\x03R\x0ehardware_model\x1a\x87\x8b\x01\n" + "\n" + "Deviations\x120\n" + "\x14ipv4_missing_enabled\x18\x01 \x01(\bR\x12ipv4MissingEnabled\x129\n" + @@ -3015,7 +3024,8 @@ const file_metadata_proto_rawDesc = "" + "\x1cskip_transceiver_description\x18\x89\x02 \x01(\bR\x1askipTransceiverDescription\x12;\n" + "\x19containerz_oc_unsupported\x18\x8a\x02 \x01(\bR\x17containerzOcUnsupported\x12G\n" + " bgp_distance_oc_path_unsupported\x18\x8b\x02 \x01(\bR\x1cbgpDistanceOcPathUnsupported\x123\n" + - "\x15isis_mpls_unsupported\x18\x8c\x02 \x01(\bR\x13isisMplsUnsupportedJ\x04\bT\x10UJ\x04\b\t\x10\n" + + "\x15isis_mpls_unsupported\x18\x8c\x02 \x01(\bR\x13isisMplsUnsupported\x12O\n" + + "$unreferenced_aft_fib_ack_unsupported\x18\x8d\x02 \x01(\bR unreferencedAftFibAckUnsupportedJ\x04\bT\x10UJ\x04\b\t\x10\n" + "J\x04\b\x1c\x10\x1dJ\x04\b\x14\x10\x15J\x04\b&\x10'J\x04\b+\x10,J\x04\bZ\x10[J\x04\ba\x10bJ\x04\b7\x108J\x04\bY\x10ZJ\x04\b\x13\x10\x14J\x04\b$\x10%J\x04\b#\x10$J\x04\b(\x10)J\x04\bq\x10rJ\x06\b\x83\x01\x10\x84\x01J\x06\b\x8d\x01\x10\x8e\x01J\x06\b\xad\x01\x10\xae\x01J\x06\b\xea\x01\x10\xeb\x01J\x06\b\xfe\x01\x10\xff\x01\x1a\xa0\x01\n" + "\x12PlatformExceptions\x12A\n" + "\bplatform\x18\x01 \x01(\v2%.openconfig.testing.Metadata.PlatformR\bplatform\x12G\n" + From ecc173ecd271da5832f343a929e388178c6b3aec Mon Sep 17 00:00:00 2001 From: Ramesh Mudhireddy Date: Mon, 15 Jun 2026 11:51:45 -0700 Subject: [PATCH 2/3] regenerate metadata.pb.go file --- proto/metadata_go_proto/metadata.pb.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/proto/metadata_go_proto/metadata.pb.go b/proto/metadata_go_proto/metadata.pb.go index 66323011247..657b5d061f4 100644 --- a/proto/metadata_go_proto/metadata.pb.go +++ b/proto/metadata_go_proto/metadata.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.11 +// protoc-gen-go v1.36.11-devel // protoc v6.33.1 // source: metadata.proto @@ -4386,7 +4386,7 @@ var File_metadata_proto protoreflect.FileDescriptor const file_metadata_proto_rawDesc = "" + "\n" + - "\x0emetadata.proto\x12\x12openconfig.testing\x1a1github.com/openconfig/ondatra/proto/testbed.proto\"\xd3\xf4\x01\n" + + "\x0emetadata.proto\x12\x12openconfig.testing\x1a1github.com/openconfig/ondatra/proto/testbed.proto\"\xa4\xf5\x01\n" + "\bMetadata\x12\x12\n" + "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12\x17\n" + "\aplan_id\x18\x02 \x01(\tR\x06planId\x12 \n" + @@ -4398,7 +4398,7 @@ const file_metadata_proto_rawDesc = "" + "\bPlatform\x12.\n" + "\x06vendor\x18\x01 \x01(\x0e2\x16.ondatra.Device.VendorR\x06vendor\x120\n" + "\x14hardware_model_regex\x18\x03 \x01(\tR\x12hardwareModelRegex\x124\n" + - "\x16software_version_regex\x18\x04 \x01(\tR\x14softwareVersionRegexJ\x04\b\x02\x10\x03R\x0ehardware_model\x1a\x9f\xea\x01\n" + + "\x16software_version_regex\x18\x04 \x01(\tR\x14softwareVersionRegexJ\x04\b\x02\x10\x03R\x0ehardware_model\x1a\xf0\xea\x01\n" + "\n" + "Deviations\x120\n" + "\x14ipv4_missing_enabled\x18\x01 \x01(\bR\x12ipv4MissingEnabled\x129\n" + @@ -4804,8 +4804,8 @@ const file_metadata_proto_rawDesc = "" + "(p4rt_explicit_table_entry_per_controller\x18\xb0\x03 \x01(\bR#p4rtExplicitTableEntryPerController\x12\x84\x01\n" + "Ause_interface_name_for_ibgp_neighbor_transport_ipv4_local_address\x18\xb1\x03 \x01(\bR8useInterfaceNameForIbgpNeighborTransportIpv4LocalAddress\x12i\n" + "2interface_id_format_required_for_policy_forwarding\x18\xb2\x03 \x01(\bR,interfaceIdFormatRequiredForPolicyForwarding\x12J\n" + - "!use_chassis_aggregate_utilization\x18\xb3\x03 \x01(\bR\x1euseChassisAggregateUtilizationJ\x04\bT\x10UJ\x04\b\t\x10\n" + - "$unreferenced_aft_fib_ack_unsupported\x18\x8d\x02 \x01(\bR unreferencedAftFibAckUnsupportedJ\x04\bT\x10UJ\x04\b\t\x10\n" + + "!use_chassis_aggregate_utilization\x18\xb3\x03 \x01(\bR\x1euseChassisAggregateUtilization\x12O\n" + + "$unreferenced_aft_fib_ack_unsupported\x18\xb4\x03 \x01(\bR unreferencedAftFibAckUnsupportedJ\x04\bT\x10UJ\x04\b\t\x10\n" + "J\x04\b\x1c\x10\x1dJ\x04\b\x14\x10\x15J\x04\b&\x10'J\x04\b+\x10,J\x04\bZ\x10[J\x04\ba\x10bJ\x04\b7\x108J\x04\bY\x10ZJ\x04\b\x13\x10\x14J\x04\b$\x10%J\x04\b#\x10$J\x04\b(\x10)J\x04\bq\x10rJ\x06\b\x83\x01\x10\x84\x01J\x06\b\x8d\x01\x10\x8e\x01J\x06\b\xad\x01\x10\xae\x01J\x06\b\xea\x01\x10\xeb\x01J\x06\b\xfe\x01\x10\xff\x01J\x06\b\xe7\x01\x10\xe8\x01J\x06\b\xac\x02\x10\xad\x02J\x06\b\xf1\x01\x10\xf2\x01J\x04\b1\x102\x1a\xa0\x01\n" + "\x12PlatformExceptions\x12A\n" + "\bplatform\x18\x01 \x01(\v2%.openconfig.testing.Metadata.PlatformR\bplatform\x12G\n" + From acee21503fe30eeb7f64868412e684845337dfd0 Mon Sep 17 00:00:00 2001 From: AmrNJ <155722765+AmrNJ@users.noreply.github.com> Date: Tue, 16 Jun 2026 12:25:02 +0530 Subject: [PATCH 3/3] Update gribigo_compliance_test.go