Skip to content

Commit 7fd123e

Browse files
kishanpsbibhuprasad-hcl
authored andcommitted
[SAI_P4] Define l3 admit in-port match capability and remove legacy rif action from certain P4 instances.
Signed-off-by: Bibhuprasad Singh <[email protected]>
1 parent cf22416 commit 7fd123e

File tree

9 files changed

+54
-41
lines changed

9 files changed

+54
-41
lines changed

sai_p4/BUILD.bazel

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ cc_library(
2424
"//gutil/gutil:status",
2525
"@com_github_p4lang_p4runtime//:p4runtime_cc_proto",
2626
"@com_google_absl//absl/status",
27-
"@com_google_absl//absl/status:statusor",
28-
"@com_google_absl//absl/strings",
2927
"@com_google_protobuf//:protobuf",
3028
],
3129
)
@@ -38,7 +36,6 @@ cc_test(
3836
":capabilities_cc_proto",
3937
"//gutil/gutil:proto_matchers",
4038
"//gutil/gutil:status_matchers",
41-
"@com_google_absl//absl/status",
4239
"@com_google_googletest//:gtest_main",
4340
],
4441
)

sai_p4/capabilities.cc

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
#include <utility>
44

55
#include "absl/status/status.h"
6-
#include "absl/status/statusor.h"
7-
#include "absl/strings/str_cat.h"
86
#include "google/protobuf/any.pb.h"
9-
#include "gutil/gutil/status.h"
107
#include "p4/v1/p4runtime.pb.h"
118
#include "sai_p4/capabilities.pb.h"
129

@@ -25,22 +22,17 @@ absl::Status AddExperimentalResourceCapabilities(
2522
return absl::OkStatus();
2623
}
2724

28-
absl::StatusOr<ExperimentalResourceCapabilities>
29-
GetExperimentalResourceCapabilities(const CapabilitiesResponse& response) {
25+
ExperimentalResourceCapabilities GetExperimentalResourceCapabilities(
26+
const CapabilitiesResponse& response) {
3027
ExperimentalResourceCapabilities capabilities;
31-
if (!response.has_experimental() ||
32-
!response.experimental().UnpackTo(&capabilities)) {
33-
return absl::NotFoundError(absl::StrCat(
34-
"ExperimentalResourceCapabilities not found in CapabilitiesResponse: ",
35-
response.DebugString()));
36-
}
28+
response.experimental().UnpackTo(&capabilities);
3729
return capabilities;
3830
};
3931

40-
absl::StatusOr<WcmpGroupLimitations> GetWcmpGroupLimitations(
32+
WcmpGroupLimitations GetWcmpGroupLimitations(
4133
const CapabilitiesResponse& response) {
42-
ASSIGN_OR_RETURN(ExperimentalResourceCapabilities capabilities,
43-
GetExperimentalResourceCapabilities(response));
34+
ExperimentalResourceCapabilities capabilities =
35+
GetExperimentalResourceCapabilities(response);
4436
return capabilities.wcmp_group_limitations();
4537
}
4638

sai_p4/capabilities.h

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#define PINS_SAI_P4_CAPABILITIES_H_
33

44
#include "absl/status/status.h"
5-
#include "absl/status/statusor.h"
65
#include "p4/v1/p4runtime.pb.h"
76
#include "sai_p4/capabilities.pb.h"
87

@@ -14,15 +13,14 @@ absl::Status AddExperimentalResourceCapabilities(
1413
ExperimentalResourceCapabilities capabilities,
1514
p4::v1::CapabilitiesResponse& response);
1615

17-
// Returns the `ExperimentalResourceCapabilities` inside of `response`. Returns
18-
// an error if `response` does not contain `ExperimentalResourceCapabilities`.
19-
absl::StatusOr<ExperimentalResourceCapabilities>
20-
GetExperimentalResourceCapabilities(
16+
// If `response` contains a `ExperimentalResourceCapabilities`, returns it.
17+
// Otherwise, returns an empty `ExperimentalResourceCapabilities`.
18+
ExperimentalResourceCapabilities GetExperimentalResourceCapabilities(
2119
const p4::v1::CapabilitiesResponse& response);
2220

23-
// Returns the `WcmpGroupLimitations` inside of `response`. Returns an error if
24-
// `response` does not contain a `ExperimentalResourceCapabilities`.
25-
absl::StatusOr<WcmpGroupLimitations> GetWcmpGroupLimitations(
21+
// If `response` contains a `WcmpGroupLimitations`, returns it.
22+
// Otherwise, returns an empty `WcmpGroupLimitations`.
23+
WcmpGroupLimitations GetWcmpGroupLimitations(
2624
const p4::v1::CapabilitiesResponse& response);
2725

2826
} // namespace sai

sai_p4/capabilities_test.cc

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
#include "sai_p4/capabilities.h"
22

3-
#include "absl/status/status.h"
43
#include "gmock/gmock.h"
54
#include "gtest/gtest.h"
65
#include "gutil/gutil/proto_matchers.h"
7-
#include "gutil/gutil/status_matchers.h"
6+
#include "gutil/gutil/status_matchers.h" // IWYU pragma: keep
87
#include "sai_p4/capabilities.pb.h"
98

109
namespace sai {
1110
namespace {
1211

1312
using ::gutil::EqualsProto;
14-
using ::gutil::IsOkAndHolds;
1513
using ::p4::v1::CapabilitiesResponse;
1614

1715
TEST(CapabilitiesTest, AddExperimentalResourceCapabilitiesWorks) {
@@ -43,12 +41,22 @@ TEST(CapabilitiesTest, GetExperimentalResourceCapabilitiesWorks) {
4341
ASSERT_OK(AddExperimentalResourceCapabilities(
4442
experimental_resource_capabilities, response));
4543
EXPECT_THAT(GetExperimentalResourceCapabilities(response),
46-
IsOkAndHolds(EqualsProto(experimental_resource_capabilities)));
44+
EqualsProto(experimental_resource_capabilities));
4745
}
4846

49-
TEST(CapabilitiesTest, GetExperimentalResourceCapabilitiesFailsWhenMissing) {
47+
TEST(CapabilitiesTest,
48+
GetExperimentalResourceCapabilitiesReturnsEmptyWhenMissing) {
5049
EXPECT_THAT(GetExperimentalResourceCapabilities(CapabilitiesResponse()),
51-
gutil::StatusIs(absl::StatusCode::kNotFound));
50+
EqualsProto(ExperimentalResourceCapabilities()));
51+
}
52+
53+
TEST(CapabilitiesTest,
54+
GetExperimentalResourceCapabilitiesReturnsEmptyWhenWrongType) {
55+
CapabilitiesResponse response;
56+
p4::v1::TableEntry entry;
57+
ASSERT_TRUE(response.mutable_experimental()->PackFrom(entry));
58+
EXPECT_THAT(GetExperimentalResourceCapabilities(response),
59+
EqualsProto(ExperimentalResourceCapabilities()));
5260
}
5361

5462
TEST(CapabilitiesTest, GetWcmpGroupLimitationsWorks) {
@@ -63,21 +71,29 @@ TEST(CapabilitiesTest, GetWcmpGroupLimitationsWorks) {
6371
experimental_resource_capabilities, response));
6472
EXPECT_THAT(
6573
GetWcmpGroupLimitations(response),
66-
IsOkAndHolds(EqualsProto(
67-
experimental_resource_capabilities.wcmp_group_limitations())));
74+
EqualsProto(experimental_resource_capabilities.wcmp_group_limitations()));
6875
}
6976

70-
TEST(CapabilitiesTest, GetWcmpGroupLimitationsWorksWithDefaultValues) {
77+
TEST(CapabilitiesTest, GetWcmpGroupLimitationsWorksWhenMissing) {
7178
CapabilitiesResponse response;
7279
ASSERT_OK(AddExperimentalResourceCapabilities(
7380
ExperimentalResourceCapabilities(), response));
7481
EXPECT_THAT(GetWcmpGroupLimitations(response),
75-
IsOkAndHolds(EqualsProto(WcmpGroupLimitations())));
82+
EqualsProto(WcmpGroupLimitations()));
7683
}
7784

78-
TEST(CapabilitiesTest, GetWcmpGroupLimitationsFailsWhenParentMessageMissing) {
85+
TEST(CapabilitiesTest,
86+
GetWcmpGroupLimitationsReturnsEmptyWhenParentWhenMissing) {
7987
EXPECT_THAT(GetWcmpGroupLimitations(CapabilitiesResponse()),
80-
gutil::StatusIs(absl::StatusCode::kNotFound));
88+
EqualsProto(WcmpGroupLimitations()));
89+
}
90+
91+
TEST(CapabilitiesTest, GetWcmpGroupLimitationsReturnsEmptyWhenWrongType) {
92+
CapabilitiesResponse response;
93+
p4::v1::TableEntry entry;
94+
ASSERT_TRUE(response.mutable_experimental()->PackFrom(entry));
95+
EXPECT_THAT(GetWcmpGroupLimitations(response),
96+
EqualsProto(WcmpGroupLimitations()));
8197
}
8298

8399
} // namespace

sai_p4/fixed/l3_admit.p4

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@ control l3_admit(in headers_t headers,
2222
key = {
2323
headers.ethernet.dst_addr : ternary @name("dst_mac") @id(1)
2424
@format(MAC_ADDRESS);
25+
#if defined(L3_ADMIT_SUPPORTS_IN_PORT)
2526
local_metadata.ingress_port : optional @name("in_port") @id(2);
27+
#endif
2628
}
2729
actions = {
2830
@proto_id(1) admit_to_l3;

sai_p4/fixed/routing.p4

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,9 +414,11 @@ control routing_resolution(in headers_t headers,
414414
router_interface_id_value : exact @id(1)
415415
@name("router_interface_id");
416416
}
417-
// TODO: Remove once no longer in use on our switches.
418417
actions = {
418+
#if defined(RIF_PROGRAMMING_MY_MAC_SUPPORTED)
419+
// TODO: Remove once no longer in use on our switches.
419420
@proto_id(1) set_port_and_src_mac;
421+
#endif
420422
@proto_id(2) unicast_set_port_and_src_mac_and_vlan_id;
421423
@proto_id(3) unicast_set_port_and_src_mac;
422424
@defaultonly NoAction;

sai_p4/instantiations/google/fabric_border_router.p4

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
#define ACL_REDIRECT_TO_NEXTHOP_CAPABLE
44
#define ACL_REDIRECT_TO_PORT_CAPABLE
55
#define DSCP_REWRITE_CAPABLE
6-
#define NEXTHOP_DISABLE_REWRITES_CAPABLE
76
#define IP_MULTICAST_CAPABLE
7+
#define L3_ADMIT_SUPPORTS_IN_PORT
8+
#define NEXTHOP_DISABLE_REWRITES_CAPABLE
89
#define MIRROR_CAPABLE
10+
#define RIF_PROGRAMMING_MY_MAC_SUPPORTED
911
#define TIMESTAMP_CAPABLE
1012
#define TUNNEL_ENCAP_CAPABLE
1113

sai_p4/instantiations/google/middleblock.p4

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
#define ACL_REDIRECT_TO_NEXTHOP_CAPABLE
44
#define ACL_REDIRECT_TO_PORT_CAPABLE
55
#define DSCP_REWRITE_CAPABLE
6-
#define NEXTHOP_DISABLE_REWRITES_CAPABLE
76
#define IP_MULTICAST_CAPABLE
7+
#define L3_ADMIT_SUPPORTS_IN_PORT
8+
#define NEXTHOP_DISABLE_REWRITES_CAPABLE
89
#define MIRROR_CAPABLE
10+
#define RIF_PROGRAMMING_MY_MAC_SUPPORTED
911
#define TIMESTAMP_CAPABLE
1012
#define TUNNEL_ENCAP_CAPABLE
1113

sai_p4/instantiations/google/tor.p4

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
#define ACL_REDIRECT_TO_NEXTHOP_CAPABLE
1717
#define ACL_REDIRECT_TO_PORT_CAPABLE
1818
#define DSCP_REWRITE_CAPABLE
19-
#define NEXTHOP_DISABLE_REWRITES_CAPABLE
2019
#define IP_MULTICAST_CAPABLE
20+
#define L3_ADMIT_SUPPORTS_IN_PORT
21+
#define NEXTHOP_DISABLE_REWRITES_CAPABLE
2122
#define MIRROR_CAPABLE
23+
#define RIF_PROGRAMMING_MY_MAC_SUPPORTED
2224
#define TIMESTAMP_CAPABLE
2325
#define TUNNEL_ENCAP_CAPABLE
2426

0 commit comments

Comments
 (0)