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 c8136195584..0551c6943be 100644 --- a/internal/deviations/deviations.go +++ b/internal/deviations/deviations.go @@ -2254,3 +2254,8 @@ func InterfaceIDFormatRequiredForPolicyForwarding(dut *ondatra.DUTDevice) bool { func UseChassisAggregateUtilization(dut *ondatra.DUTDevice) bool { return lookupDUTDeviations(dut).GetUseChassisAggregateUtilization() } + +// 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 ba68d7c19f5..6ec94cc5242 100644 --- a/proto/metadata.proto +++ b/proto/metadata.proto @@ -1378,6 +1378,10 @@ message Metadata { // rather than at the integrated-circuit component level. // Arista: https://partnerissuetracker.corp.google.com/issues/523026741 bool use_chassis_aggregate_utilization = 435; + + // No FIB_ACK support for unreferenced NH/NHG entries + bool unreferenced_aft_fib_ack_unsupported = 436; + // 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, 231, 300, 241, 49; } diff --git a/proto/metadata_go_proto/metadata.pb.go b/proto/metadata_go_proto/metadata.pb.go index 586381adad2..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 @@ -1487,8 +1487,10 @@ type Metadata_Deviations struct { // rather than at the integrated-circuit component level. // Arista: https://partnerissuetracker.corp.google.com/issues/523026741 UseChassisAggregateUtilization bool `protobuf:"varint,435,opt,name=use_chassis_aggregate_utilization,json=useChassisAggregateUtilization,proto3" json:"use_chassis_aggregate_utilization,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // No FIB_ACK support for unreferenced NH/NHG entries + UnreferencedAftFibAckUnsupported bool `protobuf:"varint,436,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() { @@ -4321,6 +4323,13 @@ func (x *Metadata_Deviations) GetUseChassisAggregateUtilization() 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"` @@ -4377,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" + @@ -4389,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" + @@ -4795,7 +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" + + "!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" +