Skip to content

Commit

Permalink
Defined Es2kConfigEncapTableTest (#45)
Browse files Browse the repository at this point in the history
Signed-off-by: Derek Foster <justffoulkes@gmail.com>
  • Loading branch information
ffoulkes authored Feb 26, 2025
1 parent be4341e commit 8775b43
Show file tree
Hide file tree
Showing 8 changed files with 442 additions and 3 deletions.
10 changes: 10 additions & 0 deletions ovs-p4rt/sidecar/newovsp4rt.cc
Original file line number Diff line number Diff line change
Expand Up @@ -720,6 +720,7 @@ absl::Status ConfigFdbTunnelTableEntry(
}

/* VXLAN_ENCAP_MOD_TABLE */
// Ipv4, Tagged, Vxlan
void PrepareVxlanEncapTableEntry(p4::v1::TableEntry* table_entry,
const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info,
Expand Down Expand Up @@ -782,6 +783,7 @@ void PrepareVxlanEncapTableEntry(p4::v1::TableEntry* table_entry,

#if defined(ES2K_TARGET)
/* GENEVE_ENCAP_MOD_TABLE */
// Ipv4, Tagged, Geneve
void PrepareGeneveEncapTableEntry(p4::v1::TableEntry* table_entry,
const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info,
Expand Down Expand Up @@ -841,6 +843,7 @@ void PrepareGeneveEncapTableEntry(p4::v1::TableEntry* table_entry,
}
#endif // ES2K_TARGET

// Ipv4, Tagged
void PrepareEncapTableEntry(p4::v1::TableEntry* table_entry,
const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info,
Expand All @@ -862,6 +865,7 @@ void PrepareEncapTableEntry(p4::v1::TableEntry* table_entry,
#if defined(ES2K_TARGET)

/* VXLAN_ENCAP_V6_MOD_TABLE */
// Ipv6, Tagged, Vxlan
void PrepareV6VxlanEncapTableEntry(p4::v1::TableEntry* table_entry,
const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info,
Expand Down Expand Up @@ -921,6 +925,7 @@ void PrepareV6VxlanEncapTableEntry(p4::v1::TableEntry* table_entry,
}

/* GENEVE_ENCAP_V6_MOD_TABLE */
// Ipv6, Tagged, Geneve
void PrepareV6GeneveEncapTableEntry(p4::v1::TableEntry* table_entry,
const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info,
Expand Down Expand Up @@ -979,6 +984,7 @@ void PrepareV6GeneveEncapTableEntry(p4::v1::TableEntry* table_entry,
}
}

// Ipv6, Tagged
void PrepareV6EncapTableEntry(p4::v1::TableEntry* table_entry,
const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info,
Expand Down Expand Up @@ -1130,6 +1136,7 @@ void PrepareGeneveEncapAndVlanPopTableEntry(
}
}

// Ipv4, Untagged
void PrepareEncapAndVlanPopTableEntry(p4::v1::TableEntry* table_entry,
const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info,
Expand All @@ -1146,6 +1153,7 @@ void PrepareEncapAndVlanPopTableEntry(p4::v1::TableEntry* table_entry,
}

/* VXLAN_ENCAP_V6_VLAN_POP_MOD_TABLE */
// Ipv6, Untagged, Vxlan
void PrepareV6VxlanEncapAndVlanPopTableEntry(
p4::v1::TableEntry* table_entry, const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info, bool insert_entry) {
Expand Down Expand Up @@ -1209,6 +1217,7 @@ void PrepareV6VxlanEncapAndVlanPopTableEntry(
}

/* GENEVE_ENCAP_V6_VLAN_POP_MOD_TABLE */
// Ipv6, Untagged, Geneve
void PrepareV6GeneveEncapAndVlanPopTableEntry(
p4::v1::TableEntry* table_entry, const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info, bool insert_entry) {
Expand Down Expand Up @@ -1272,6 +1281,7 @@ void PrepareV6GeneveEncapAndVlanPopTableEntry(
}
}

// Ipv6, Untagged
void PrepareV6EncapAndVlanPopTableEntry(p4::v1::TableEntry* table_entry,
const struct tunnel_info& tunnel_info,
const ::p4::config::v1::P4Info& p4info,
Expand Down
3 changes: 3 additions & 0 deletions ovs-p4rt/sidecar/ovsp4rt_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ extern std::string EncodeByteValue(int arg_count...);
extern int GetActionId(const ::p4::config::v1::P4Info& p4info,
const std::string& a_name);

extern int GetTableId(const ::p4::config::v1::P4Info& p4info,
const std::string& t_name);

//----------------------------------------------------------------------
// Common functions
//----------------------------------------------------------------------
Expand Down
8 changes: 8 additions & 0 deletions ovs-p4rt/sidecar/tests/es2k/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,14 @@ define_es2k_config_test(es2k_update_tunnel_info_test)
#-----------------------------------------------------------------------
include(es2k_mac_learn_info_tests.cmake)

#-----------------------------------------------------------------------
# es2k_tunnel_info_tests
#-----------------------------------------------------------------------
include(es2k_tunnel_info_tests.cmake)

#-----------------------------------------------------------------------
# DoConfig tests
#-----------------------------------------------------------------------
if(BUILD_CLIENT AND EXTRA_TESTS)
add_subdirectory(extra)
endif()
Expand Down
159 changes: 159 additions & 0 deletions ovs-p4rt/sidecar/tests/es2k/base_tunnel_info_test.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
// Copyright 2025 Derek Foster
// SPDX-License-Identifier: Apache-2.0

#include "base_tunnel_info_test.h"

#include <arpa/inet.h>
#include <gtest/gtest.h>

#include "es2k/p4_name_mapping.h"
#include "ovsp4rt/ovs-p4rt.h"
#include "ovsp4rt_private.h" // GetTableId
#include "p4/config/v1/p4info.pb.h"
#include "p4info_text.h"
#include "stratum/lib/utils.h"

namespace ovsp4rt {

void BaseTunnelInfoTest::InitV4TunnelInfo(struct tunnel_info& tunnel_info) {
constexpr char IPV4_SRC_ADDR[] = "10.20.30.40";
constexpr char IPV4_DST_ADDR[] = "192.168.17.5";
constexpr int IPV4_PREFIX_LEN = 24;

constexpr uint16_t SRC_PORT = 0x1066;
constexpr uint16_t DST_PORT = 0x4224;
constexpr uint16_t VNI = 0x1776;

EXPECT_EQ(
inet_pton(AF_INET, IPV4_SRC_ADDR, &tunnel_info.local_ip.ip.v4addr.s_addr),
1)
<< "Error converting " << IPV4_SRC_ADDR;
tunnel_info.local_ip.prefix_len = IPV4_PREFIX_LEN;
tunnel_info.local_ip.family = AF_INET;

EXPECT_EQ(inet_pton(AF_INET, IPV4_DST_ADDR,
&tunnel_info.remote_ip.ip.v4addr.s_addr),
1)
<< "Error converting " << IPV4_DST_ADDR;
tunnel_info.remote_ip.prefix_len = IPV4_PREFIX_LEN;
tunnel_info.remote_ip.family = AF_INET;

tunnel_info.src_port = SRC_PORT;
tunnel_info.dst_port = DST_PORT;
tunnel_info.vni = VNI;
};

void BaseTunnelInfoTest::InitV6TunnelInfo(struct tunnel_info& tunnel_info) {
constexpr char IPV6_SRC_ADDR[] = "fe80::215:5dff:fefa";
constexpr char IPV6_DST_ADDR[] = "fe80::215:192.168.17.5";
constexpr int IPV6_PREFIX_LEN = 64;

constexpr uint16_t SRC_PORT = 0x1984;
constexpr uint16_t DST_PORT = 0x4224;
constexpr uint16_t VNI = 0x1066;

EXPECT_EQ(inet_pton(AF_INET6, IPV6_SRC_ADDR,
&tunnel_info.local_ip.ip.v6addr.__in6_u.__u6_addr32),
1)
<< "Error converting " << IPV6_SRC_ADDR;
tunnel_info.local_ip.prefix_len = IPV6_PREFIX_LEN;
tunnel_info.local_ip.family = AF_INET6;

EXPECT_EQ(inet_pton(AF_INET6, IPV6_DST_ADDR,
&tunnel_info.remote_ip.ip.v6addr.__in6_u.__u6_addr32),
1)
<< "Error converting " << IPV6_DST_ADDR;
tunnel_info.remote_ip.prefix_len = IPV6_PREFIX_LEN;
tunnel_info.remote_ip.family = AF_INET6;

tunnel_info.src_port = SRC_PORT;
tunnel_info.dst_port = DST_PORT;
tunnel_info.vni = VNI;
};

void BaseTunnelInfoTest::InitVxlanTagged(struct tunnel_info& tunnel_info) {
tunnel_info.tunnel_type = OVS_TUNNEL_VXLAN;
tunnel_info.vlan_info.port_vlan_mode = P4_PORT_VLAN_NATIVE_TAGGED;
tunnel_info.vni = 0x1066;
}

void BaseTunnelInfoTest::InitVxlanUntagged(struct tunnel_info& tunnel_info) {
tunnel_info.tunnel_type = OVS_TUNNEL_VXLAN;
tunnel_info.vlan_info.port_vlan_mode = P4_PORT_VLAN_NATIVE_UNTAGGED;
tunnel_info.vni = 0x1492;
}

void BaseTunnelInfoTest::InitGeneveTagged(struct tunnel_info& tunnel_info) {
tunnel_info.tunnel_type = OVS_TUNNEL_GENEVE;
tunnel_info.vlan_info.port_vlan_mode = P4_PORT_VLAN_NATIVE_TAGGED;
tunnel_info.vni = 0x1776;
}

void BaseTunnelInfoTest::InitGeneveUntagged(struct tunnel_info& tunnel_info) {
tunnel_info.tunnel_type = OVS_TUNNEL_GENEVE;
tunnel_info.vlan_info.port_vlan_mode = P4_PORT_VLAN_NATIVE_UNTAGGED;
tunnel_info.vni = 0x1984;
}

void BaseTunnelInfoTest::InitP4Info(::p4::config::v1::P4Info* p4info) {
auto status = stratum::ParseProtoFromString(P4INFO_TEXT, p4info);
EXPECT_TRUE(status.ok()) << "ParseProtoFromString: "
<< status.error_message();
}

void BaseTunnelInfoTest::AssertV4VxlanUntagged(
const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info) {
AssertTableId(table_entry, p4info, VXLAN_ENCAP_VLAN_POP_MOD_TABLE);
}

void BaseTunnelInfoTest::AssertV4GeneveUntagged(
const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info) {
AssertTableId(table_entry, p4info, GENEVE_ENCAP_VLAN_POP_MOD_TABLE);
}

void BaseTunnelInfoTest::AssertV4VxlanTagged(
const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info) {
AssertTableId(table_entry, p4info, VXLAN_ENCAP_MOD_TABLE);
}

void BaseTunnelInfoTest::AssertV4GeneveTagged(
const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info) {
AssertTableId(table_entry, p4info, GENEVE_ENCAP_MOD_TABLE);
}

void BaseTunnelInfoTest::AssertV6VxlanUntagged(
const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info) {
AssertTableId(table_entry, p4info, VXLAN_ENCAP_V6_VLAN_POP_MOD_TABLE);
}

void BaseTunnelInfoTest::AssertV6GeneveUntagged(
const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info) {
AssertTableId(table_entry, p4info, GENEVE_ENCAP_V6_VLAN_POP_MOD_TABLE);
}

void BaseTunnelInfoTest::AssertV6VxlanTagged(
const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info) {
AssertTableId(table_entry, p4info, VXLAN_ENCAP_V6_MOD_TABLE);
}

void BaseTunnelInfoTest::AssertV6GeneveTagged(
const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info) {
AssertTableId(table_entry, p4info, GENEVE_ENCAP_V6_MOD_TABLE);
}

void BaseTunnelInfoTest::AssertTableId(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info,
const char* table_name) {
auto expected_id = GetTableId(p4info, table_name);
EXPECT_EQ(table_entry.table_id(), expected_id);
}

} // namespace ovsp4rt
66 changes: 66 additions & 0 deletions ovs-p4rt/sidecar/tests/es2k/base_tunnel_info_test.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// Copyright 2025 Derek Foster
// SPDX-License-Identifier: Apache-2.0

#ifndef BASE_TUNNEL_INFO_TEST_H_
#define BASE_TUNNEL_INFO_TEST_H_

#include <gtest/gtest.h>

#include "ovsp4rt/ovs-p4rt.h"
#include "p4/config/v1/p4info.pb.h"
#include "p4/v1/p4runtime.pb.h"

namespace ovsp4rt {

constexpr bool INSERT_ENTRY = true;
constexpr bool REMOVE_ENTRY = false;

class BaseTunnelInfoTest : public ::testing::Test {
protected:
BaseTunnelInfoTest(){};
virtual ~BaseTunnelInfoTest() = default;

static void InitV4TunnelInfo(struct tunnel_info& tunnel_info);
static void InitV6TunnelInfo(struct tunnel_info& tunnel_info);

static void InitVxlanTagged(struct tunnel_info& tunnel_info);
static void InitVxlanUntagged(struct tunnel_info& tunnel_info);

static void InitGeneveTagged(struct tunnel_info& tunnel_info);
static void InitGeneveUntagged(struct tunnel_info& tunnel_info);

static void InitP4Info(::p4::config::v1::P4Info* p4info);

static void AssertV4VxlanUntagged(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info);

static void AssertV4GeneveUntagged(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info);

static void AssertV4VxlanTagged(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info);

static void AssertV4GeneveTagged(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info);

static void AssertV6VxlanUntagged(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info);

static void AssertV6GeneveUntagged(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info);

static void AssertV6VxlanTagged(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info);

static void AssertV6GeneveTagged(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info);

private:
static void AssertTableId(const p4::v1::TableEntry& table_entry,
const ::p4::config::v1::P4Info& p4info,
const char* table_name);
};

} // namespace ovsp4rt

#endif // BASE_TUNNEL_INFO_TEST_H_
6 changes: 3 additions & 3 deletions ovs-p4rt/sidecar/tests/es2k/es2k_mac_learn_info_tests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ target_link_libraries(es2k_mac_learn_info PUBLIC
)

#-----------------------------------------------------------------------
# define_es2k_mac_learn_test()
# define_es2k_mac_learn_info()
#-----------------------------------------------------------------------
macro(define_es2k_mac_learn_test TARGET)
macro(define_es2k_mac_learn_info TARGET)
add_executable(${TARGET}
${TARGET}.cc
$<TARGET_OBJECTS:ovsp4rt_test_client_o>
Expand All @@ -44,4 +44,4 @@ macro(define_es2k_mac_learn_test TARGET)
list(APPEND UNIT_TEST_NAMES ${TARGET})
endmacro()

define_es2k_mac_learn_test(es2k_prep_fdb_tunnel_table_test)
define_es2k_mac_learn_info(es2k_prep_fdb_tunnel_table_test)
Loading

0 comments on commit 8775b43

Please sign in to comment.