Skip to content

Commit

Permalink
[SAIP4] Add a test framework to test tunnel decap feature & Remove @u…
Browse files Browse the repository at this point in the history
…nsupported annotation for tunnel decap.
  • Loading branch information
kishanps authored and divyagayathri-hcl committed Oct 21, 2024
1 parent cb123c5 commit 6582c41
Show file tree
Hide file tree
Showing 9 changed files with 548 additions and 6 deletions.
3 changes: 0 additions & 3 deletions sai_p4/fixed/tunnel_termination.p4
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@ control tunnel_termination(inout headers_t headers,

// Models SAI_TUNNEL_TERM_TABLE.
// Currently, we only model IPv6 decap of IP-in-IP packets
// TODO: Remove `@unsupported` annotation once the table is
// supported by the switch stack.
@unsupported
@p4runtime_role(P4RUNTIME_ROLE_ROUTING)
@id(IPV6_TUNNEL_TERMINATION_TABLE_ID)
table ipv6_tunnel_termination_table {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ tables {
id: 33554507
name: "ingress.tunnel_termination.ipv6_tunnel_termination_table"
alias: "ipv6_tunnel_termination_table"
annotations: "@unsupported"
annotations: "@p4runtime_role(\"sdn_controller\")"
}
match_fields {
Expand Down
1 change: 0 additions & 1 deletion sai_p4/instantiations/google/middleblock.p4info.pb.txt
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ tables {
id: 33554507
name: "ingress.tunnel_termination.ipv6_tunnel_termination_table"
alias: "ipv6_tunnel_termination_table"
annotations: "@unsupported"
annotations: "@p4runtime_role(\"sdn_controller\")"
}
match_fields {
Expand Down
27 changes: 27 additions & 0 deletions sai_p4/instantiations/google/test_tools/test_entries.cc
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,33 @@ EntryBuilder& EntryBuilder::AddMirrorSessionTableEntry(
return *this;
}

EntryBuilder& EntryBuilder::AddIpv6TunnelTerminationEntry(
const Ipv6TunnelTerminationParams& params) {
sai::TableEntry pd_entry;
sai::Ipv6TunnelTerminationTableEntry& tunnel_entry =
*pd_entry.mutable_ipv6_tunnel_termination_table_entry();
if (params.dst_ipv6_value.has_value()) {
tunnel_entry.mutable_match()->mutable_dst_ipv6()->set_value(
params.dst_ipv6_value->ToString());
}
if (params.dst_ipv6_mask.has_value()) {
tunnel_entry.mutable_match()->mutable_dst_ipv6()->set_mask(
params.dst_ipv6_mask->ToString());
}
if (params.src_ipv6_value.has_value()) {
tunnel_entry.mutable_match()->mutable_src_ipv6()->set_value(
params.src_ipv6_value->ToString());
}
if (params.src_ipv6_mask.has_value()) {
tunnel_entry.mutable_match()->mutable_src_ipv6()->set_mask(
params.src_ipv6_mask->ToString());
}
tunnel_entry.mutable_action()->mutable_tunnel_decap();
tunnel_entry.set_priority(1);
*entries_.add_entries() = std::move(pd_entry);
return *this;
}

EntryBuilder& EntryBuilder::AddMarkToMirrorAclEntry(
const MarkToMirrorParams& params) {
sai::TableEntry pd_entry;
Expand Down
10 changes: 10 additions & 0 deletions sai_p4/instantiations/google/test_tools/test_entries.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,14 @@ struct MirrorSessionParams {
std::string mirror_encap_udp_dst_port;
};

// Parameters for generating an ipv6 tunnel termination table entry.
struct Ipv6TunnelTerminationParams {
std::optional<netaddr::Ipv6Address> src_ipv6_value;
std::optional<netaddr::Ipv6Address> src_ipv6_mask;
std::optional<netaddr::Ipv6Address> dst_ipv6_value;
std::optional<netaddr::Ipv6Address> dst_ipv6_mask;
};

// Parameters for generating an ACL table entry to mark packets to be mirrored.
struct MarkToMirrorParams {
std::string ingress_port;
Expand Down Expand Up @@ -229,6 +237,8 @@ class EntryBuilder {
EntryBuilder& AddIngressAclEntryRedirectingToMulticastGroup(
int multicast_group_id,
const MirrorAndRedirectMatchFields& match_fields = {});
EntryBuilder& AddIpv6TunnelTerminationEntry(
const Ipv6TunnelTerminationParams& params);
EntryBuilder& AddMirrorSessionTableEntry(const MirrorSessionParams& params);
EntryBuilder& AddMarkToMirrorAclEntry(const MarkToMirrorParams& params);

Expand Down
15 changes: 15 additions & 0 deletions sai_p4/instantiations/google/test_tools/test_entries_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,21 @@ TEST(EntryBuilder, AddVrfEntryAddsEntry) {
EXPECT_THAT(entities.entities(), SizeIs(3));
}

TEST(EntryBuilder, AddIpv6TunnelTerminationEntryAddsEntry) {
pdpi::IrP4Info kIrP4Info = GetIrP4Info(Instantiation::kFabricBorderRouter);
sai::Ipv6TunnelTerminationParams params{
.src_ipv6_value = netaddr::Ipv6Address(0x77, 0x4455, 0, 0, 0, 0, 0, 0),
.src_ipv6_mask = netaddr::Ipv6Address(0xFFFF, 0xFFFF, 0, 0, 0, 0, 0, 0),
.dst_ipv6_value = netaddr::Ipv6Address(0x11, 0x2233, 0, 0, 0, 0, 0, 0),
.dst_ipv6_mask = netaddr::Ipv6Address(0xFFFF, 0xFFFF, 0, 0, 0, 0, 0, 0)};
ASSERT_OK_AND_ASSIGN(pdpi::IrEntities entities,
EntryBuilder()
.AddIpv6TunnelTerminationEntry(params)
.LogPdEntries()
.GetDedupedIrEntities(kIrP4Info));
EXPECT_THAT(entities.entities(), SizeIs(1));
}

TEST(EntryBuilder, AddEntryAdmittingAllPacketsToL3AddsEntry) {
pdpi::IrP4Info kIrP4Info = GetIrP4Info(Instantiation::kFabricBorderRouter);
ASSERT_OK_AND_ASSIGN(pdpi::IrEntities entities,
Expand Down
1 change: 0 additions & 1 deletion sai_p4/instantiations/google/unioned_p4info.pb.txt
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ tables {
id: 33554507
name: "ingress.tunnel_termination.ipv6_tunnel_termination_table"
alias: "ipv6_tunnel_termination_table"
annotations: "@unsupported"
annotations: "@p4runtime_role(\"sdn_controller\")"
}
match_fields {
Expand Down
Loading

0 comments on commit 6582c41

Please sign in to comment.