Skip to content
This repository was archived by the owner on Jan 3, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[submodule "SAI"]
path = SAI
url = https://github.com/opencomputeproject/SAI.git
url = https://github.com/p4lang/SAI.git
ignore = dirty
2 changes: 1 addition & 1 deletion SAI
1 change: 1 addition & 0 deletions lib/inc/sai_redis.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ extern const sai_udf_api_t redis_udf_api;
extern const sai_virtual_router_api_t redis_virtual_router_api;
extern const sai_vlan_api_t redis_vlan_api;
extern const sai_wred_api_t redis_wred_api;
extern const sai_dtel_api_t redis_dtel_api;

#define UNREFERENCED_PARAMETER(X)

Expand Down
1 change: 1 addition & 0 deletions lib/src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ libsairedis_la_SOURCES = \
sai_redis_fdb.cpp \
sai_redis_hash.cpp \
sai_redis_hostintf.cpp \
sai_redis_dtel.cpp \
sai_redis_interfacequery.cpp \
sai_redis_lag.cpp \
sai_redis_mirror.cpp \
Expand Down
14 changes: 14 additions & 0 deletions lib/src/sai_redis_dtel.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#include "sai_redis.h"

REDIS_GENERIC_QUAD(DTEL_QUEUE_REPORT,dtel_queue_report);
REDIS_GENERIC_QUAD(DTEL_INT_SESSION,dtel_int_session);
REDIS_GENERIC_QUAD(DTEL_REPORT_SESSION,dtel_report_session);
REDIS_GENERIC_QUAD(DTEL_EVENT,dtel_event);

const sai_dtel_api_t redis_dtel_api = {

REDIS_GENERIC_QUAD_API(dtel_queue_report)
REDIS_GENERIC_QUAD_API(dtel_int_session)
REDIS_GENERIC_QUAD_API(dtel_report_session)
REDIS_GENERIC_QUAD_API(dtel_event)
};
1 change: 1 addition & 0 deletions lib/src/sai_redis_interfacequery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ sai_status_t sai_api_query(
API_CASE(VIRTUAL_ROUTER,virtual_router);
API_CASE(VLAN,vlan);
API_CASE(WRED,wred);
API_CASE(DTEL,dtel);

default:
SWSS_LOG_ERROR("Invalid API type %d", sai_api_id);
Expand Down
29 changes: 29 additions & 0 deletions meta/sai_meta.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1192,6 +1192,9 @@ sai_status_t meta_generic_validation_create(

// ACL END

case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
break;

case SAI_ATTR_VALUE_TYPE_UINT8_LIST:
VALIDATION_LIST(md, value.u8list);
break;
Expand All @@ -1216,6 +1219,9 @@ sai_status_t meta_generic_validation_create(
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
VALIDATION_LIST(md, value.tunnelmap);
break;
case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
VALIDATION_LIST(md, value.ipaddrlist);
break;

case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:

Expand Down Expand Up @@ -1863,6 +1869,9 @@ sai_status_t meta_generic_validation_set(

// ACL END

case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
break;

case SAI_ATTR_VALUE_TYPE_UINT8_LIST:
VALIDATION_LIST(md, value.u8list);
break;
Expand All @@ -1887,6 +1896,9 @@ sai_status_t meta_generic_validation_set(
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
VALIDATION_LIST(md, value.tunnelmap);
break;
case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
VALIDATION_LIST(md, value.ipaddrlist);
break;

case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:

Expand Down Expand Up @@ -2215,6 +2227,9 @@ sai_status_t meta_generic_validation_get(

// ACL END

case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
break;

case SAI_ATTR_VALUE_TYPE_UINT8_LIST:
VALIDATION_LIST(md, value.u8list);
break;
Expand All @@ -2239,6 +2254,9 @@ sai_status_t meta_generic_validation_get(
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
VALIDATION_LIST(md, value.tunnelmap);
break;
case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
VALIDATION_LIST(md, value.ipaddrlist);
break;

case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:
case SAI_ATTR_VALUE_TYPE_INT32_RANGE:
Expand Down Expand Up @@ -2560,6 +2578,8 @@ void meta_generic_validation_post_create(
case SAI_ATTR_VALUE_TYPE_INT32_LIST:
case SAI_ATTR_VALUE_TYPE_QOS_MAP_LIST:
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:
case SAI_ATTR_VALUE_TYPE_INT32_RANGE:
// no special action required
Expand Down Expand Up @@ -2695,6 +2715,8 @@ void meta_generic_validation_post_remove(
case SAI_ATTR_VALUE_TYPE_INT32_LIST:
case SAI_ATTR_VALUE_TYPE_QOS_MAP_LIST:
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:
case SAI_ATTR_VALUE_TYPE_INT32_RANGE:
// no special action required
Expand Down Expand Up @@ -2946,6 +2968,8 @@ void meta_generic_validation_post_set(
case SAI_ATTR_VALUE_TYPE_INT32_LIST:
case SAI_ATTR_VALUE_TYPE_QOS_MAP_LIST:
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:
case SAI_ATTR_VALUE_TYPE_INT32_RANGE:
// no special action required
Expand Down Expand Up @@ -3220,6 +3244,8 @@ void meta_generic_validation_post_get(

// ACL END

case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
break;
case SAI_ATTR_VALUE_TYPE_UINT8_LIST:
VALIDATION_LIST_GET(md, value.u8list);
break;
Expand All @@ -3244,6 +3270,9 @@ void meta_generic_validation_post_get(
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
VALIDATION_LIST_GET(md, value.tunnelmap);
break;
case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
VALIDATION_LIST_GET(md, value.ipaddrlist);
break;

case SAI_ATTR_VALUE_TYPE_UINT32_RANGE:

Expand Down
71 changes: 71 additions & 0 deletions meta/saiserialize.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,15 @@ sai_status_t transfer_attribute(
RETURN_ON_ERROR(transfer_list(src_attr.value.tunnelmap, dst_attr.value.tunnelmap, countOnly));
break;

case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
RETURN_ON_ERROR(transfer_list(src_attr.value.ipaddrlist, dst_attr.value.ipaddrlist, countOnly));
break;

case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
transfer_primitive(src_attr.value.ternaryfield.mask.u8, dst_attr.value.ternaryfield.mask.u8);
transfer_primitive(src_attr.value.ternaryfield.value.u8, dst_attr.value.ternaryfield.value.u8);
break;

/* ACL FIELD DATA */

case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_BOOL:
Expand Down Expand Up @@ -878,6 +887,15 @@ std::string sai_serialize_list(

}

std::string sai_serialize_ip_address_list(
_In_ const sai_ip_address_list_t& list,
_In_ bool countOnly)
{
SWSS_LOG_ENTER();

return sai_serialize_list(list, countOnly, [&](sai_ip_address_t item) { return sai_serialize_ip_address(item);} );
}

std::string sai_serialize_enum_list(
_In_ const sai_s32_list_t& list,
_In_ const sai_enum_metadata_t* meta,
Expand Down Expand Up @@ -1030,6 +1048,14 @@ std::string sai_serialize_range(
return sai_serialize_number(range.min) + "," + sai_serialize_number(range.max);
}

std::string sai_serialize_ternary_field(
_In_ const sai_ternary_field_t& ternary_field)
{
SWSS_LOG_ENTER();

return sai_serialize_number(ternary_field.value.u8) + "/" + sai_serialize_number(ternary_field.mask.u8);
}

std::string sai_serialize_acl_action(
_In_ const sai_attr_metadata_t& meta,
_In_ const sai_acl_action_data_t& action,
Expand Down Expand Up @@ -1251,6 +1277,12 @@ std::string sai_serialize_attr_value(
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
return sai_serialize_tunnel_map_list(attr.value.tunnelmap, countOnly);

case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
return sai_serialize_ip_address_list(attr.value.ipaddrlist, countOnly);

case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
return sai_serialize_ternary_field(attr.value.ternaryfield);

// ACL FIELD DATA

case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_BOOL:
Expand Down Expand Up @@ -1974,6 +2006,16 @@ void sai_deserialize_ip_address(
throw std::runtime_error("invalid ip address");
}

void sai_deserialize_ip_address_list(
_In_ const std::string& s,
_Out_ sai_ip_address_list_t& list,
_In_ bool countOnly)
{
SWSS_LOG_ENTER();

sai_deserialize_list(s, list, countOnly, [&](const std::string sitem, sai_ip_address_t& item) { sai_deserialize_ip_address(sitem, item);} );
}

template <typename T>
void sai_deserialize_range(
_In_ const std::string& s,
Expand All @@ -1993,6 +2035,24 @@ void sai_deserialize_range(
sai_deserialize_number(tokens[1], range.max);
}

void sai_deserialize_ternary_field(
_In_ const std::string& s,
_Out_ sai_ternary_field_t& field)
{
SWSS_LOG_ENTER();

auto tokens = swss::tokenize(s, '/');

if (tokens.size() != 2)
{
SWSS_LOG_ERROR("invalid ternary field %s", s.c_str());
throw std::runtime_error("invalid ternary field");
}

sai_deserialize_number(tokens[0], field.value.u8);
sai_deserialize_number(tokens[1], field.mask.u8);
}

void sai_deserialize_acl_field(
_In_ const std::string& s,
_In_ const sai_attr_metadata_t& meta,
Expand Down Expand Up @@ -2242,6 +2302,12 @@ void sai_deserialize_attr_value(
case SAI_ATTR_VALUE_TYPE_TUNNEL_MAP_LIST:
return sai_deserialize_tunnel_map_list(s, attr.value.tunnelmap, countOnly);

case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
return sai_deserialize_ip_address_list(s, attr.value.ipaddrlist, countOnly);

case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
return sai_deserialize_ternary_field(s, attr.value.ternaryfield);

// ACL FIELD DATA

case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_BOOL:
Expand Down Expand Up @@ -2655,6 +2721,7 @@ void sai_deserialize_free_attribute_value(
case SAI_ATTR_VALUE_TYPE_POINTER:
case SAI_ATTR_VALUE_TYPE_IP_ADDRESS:
case SAI_ATTR_VALUE_TYPE_OBJECT_ID:
case SAI_ATTR_VALUE_TYPE_TERNARY_FIELD:
break;

case SAI_ATTR_VALUE_TYPE_OBJECT_LIST:
Expand Down Expand Up @@ -2701,6 +2768,10 @@ void sai_deserialize_free_attribute_value(
sai_free_list(attr.value.tunnelmap);
break;

case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
sai_free_list(attr.value.ipaddrlist);
break;

/* ACL FIELD DATA */

case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_BOOL:
Expand Down
4 changes: 4 additions & 0 deletions saiplayer/saiplayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,10 @@ void match_list_lengths(
CHECK_LIST(value.tunnelmap);
break;

case SAI_ATTR_VALUE_TYPE_IP_ADDR_LIST:
CHECK_LIST(value.ipaddrlist);
break;

case SAI_ATTR_VALUE_TYPE_ACL_FIELD_DATA_OBJECT_LIST:
CHECK_LIST(value.aclfield.data.objlist);
break;
Expand Down
1 change: 1 addition & 0 deletions vslib/inc/sai_vs.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ extern const sai_udf_api_t vs_udf_api;
extern const sai_virtual_router_api_t vs_virtual_router_api;
extern const sai_vlan_api_t vs_vlan_api;
extern const sai_wred_api_t vs_wred_api;
extern const sai_dtel_api_t vs_dtel_api;

// CREATE

Expand Down
1 change: 1 addition & 0 deletions vslib/src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ libsaivs_la_SOURCES = \
sai_vs_fdb.cpp \
sai_vs_hash.cpp \
sai_vs_hostintf.cpp \
sai_vs_dtel.cpp \
sai_vs_interfacequery.cpp \
sai_vs_lag.cpp \
sai_vs_mirror.cpp \
Expand Down
15 changes: 15 additions & 0 deletions vslib/src/sai_vs_dtel.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "sai_vs.h"
#include "sai_vs_internal.h"

VS_GENERIC_QUAD(DTEL_QUEUE_REPORT,dtel_queue_report);
VS_GENERIC_QUAD(DTEL_INT_SESSION,dtel_int_session);
VS_GENERIC_QUAD(DTEL_REPORT_SESSION,dtel_report_session);
VS_GENERIC_QUAD(DTEL_EVENT,dtel_event);

const sai_dtel_api_t vs_dtel_api = {

VS_GENERIC_QUAD_API(dtel_queue_report)
VS_GENERIC_QUAD_API(dtel_int_session)
VS_GENERIC_QUAD_API(dtel_report_session)
VS_GENERIC_QUAD_API(dtel_event)
};
1 change: 1 addition & 0 deletions vslib/src/sai_vs_interfacequery.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ sai_status_t sai_api_query(
API_CASE(VIRTUAL_ROUTER,virtual_router);
API_CASE(VLAN,vlan);
API_CASE(WRED,wred);
API_CASE(DTEL,dtel);

default:
SWSS_LOG_ERROR("Invalid API type %d", sai_api_id);
Expand Down