Skip to content
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
180 changes: 105 additions & 75 deletions dataplane/proto/sai/common.pb.go

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions dataplane/proto/sai/common.proto
Original file line number Diff line number Diff line change
Expand Up @@ -4567,6 +4567,9 @@ message SwitchAttribute {
optional uint32 max_icmp_echo_session = 219 [(attr_enum_value) = 235];
optional StatsCountMode stats_count_mode = 220 [(attr_enum_value) = 236];
repeated uint64 selective_counter_list = 221 [(attr_enum_value) = 237];
repeated DebugCounterType supported_debug_counter_type_list = 222 [(attr_enum_value) = 2112];
repeated InDropReason supported_ingress_drop_reason_list = 223 [(attr_enum_value) = 2113];
optional uint32 available_switch_ingress_drop_counters = 224 [(attr_enum_value) = 2118];
}

message SwitchTunnelAttribute {
Expand Down
24 changes: 24 additions & 0 deletions dataplane/standalone/entrypoint.cc
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,30 @@ sai_status_t sai_query_attribute_enum_values_capability(
_In_ sai_object_id_t switch_id, _In_ sai_object_type_t object_type,
_In_ sai_attr_id_t attr_id,
_Inout_ sai_s32_list_t *enum_values_capability) {
if (object_type == SAI_OBJECT_TYPE_DEBUG_COUNTER) {
if (attr_id == SAI_DEBUG_COUNTER_ATTR_TYPE) {
if (enum_values_capability->list == nullptr ||
enum_values_capability->count < 1) {
enum_values_capability->count = 1;
} else {
enum_values_capability->list[0] =
SAI_DEBUG_COUNTER_TYPE_SWITCH_IN_DROP_REASONS;
enum_values_capability->count = 1;
}
return SAI_STATUS_SUCCESS;
}
if (attr_id == SAI_DEBUG_COUNTER_ATTR_IN_DROP_REASON_LIST) {
if (enum_values_capability->list == nullptr ||
enum_values_capability->count < 2) {
enum_values_capability->count = 2;
} else {
enum_values_capability->list[0] = SAI_IN_DROP_REASON_LPM4_MISS;
enum_values_capability->list[1] = SAI_IN_DROP_REASON_LPM6_MISS;
enum_values_capability->count = 2;
}
return SAI_STATUS_SUCCESS;
}
}
return SAI_STATUS_NOT_IMPLEMENTED;
}

Expand Down
3 changes: 3 additions & 0 deletions dataplane/standalone/sai/debug_counter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,9 @@ sai_status_t l_get_debug_counter_attribute(sai_object_id_t debug_counter_id,
attr_list[i].value.s32list.list, resp.attr().out_drop_reason_list(),
&attr_list[i].value.s32list.count);
break;
default:
LOG(ERROR) << "Unhandled DebugCounter attribute ID: " << attr_list[i].id;
break;
}
}

Expand Down
31 changes: 29 additions & 2 deletions dataplane/standalone/sai/switch.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1510,6 +1510,29 @@ sai_status_t l_get_switch_attribute(sai_object_id_t switch_id,
resp.attr().selective_counter_list(),
&attr_list[i].value.objlist.count);
break;
case SAI_SWITCH_ATTR_SUPPORTED_DEBUG_COUNTER_TYPE_LIST:
if (attr_list[i].value.s32list.list == nullptr || attr_list[i].value.s32list.count < 1) {
attr_list[i].value.s32list.count = 1;
} else {
attr_list[i].value.s32list.list[0] = SAI_DEBUG_COUNTER_TYPE_SWITCH_IN_DROP_REASONS;
attr_list[i].value.s32list.count = 1;
}
break;
case SAI_SWITCH_ATTR_SUPPORTED_INGRESS_DROP_REASON_LIST:
if (attr_list[i].value.s32list.list == nullptr || attr_list[i].value.s32list.count < 2) {
attr_list[i].value.s32list.count = 2;
} else {
attr_list[i].value.s32list.list[0] = SAI_IN_DROP_REASON_LPM4_MISS;
attr_list[i].value.s32list.list[1] = SAI_IN_DROP_REASON_LPM6_MISS;
attr_list[i].value.s32list.count = 2;
}
break;
case SAI_SWITCH_ATTR_AVAILABLE_SWITCH_INGRESS_DROP_COUNTERS:
attr_list[i].value.u32 = 1000;
break;
default:
LOG(ERROR) << "Unhandled Switch attribute ID during get: " << attr_list[i].id;
break;
}
}

Expand All @@ -1528,7 +1551,11 @@ sai_status_t l_get_switch_stats(sai_object_id_t switch_id,
req.set_oid(switch_id);

for (uint32_t i = 0; i < number_of_counters; i++) {
req.add_counter_ids(convert_sai_switch_stat_t_to_proto(counter_ids[i]));
auto proto_id = convert_sai_switch_stat_t_to_proto(counter_ids[i]);
if (proto_id == lemming::dataplane::sai::SWITCH_STAT_UNSPECIFIED) {
LOG(ERROR) << "Lucius: Unhandled counter_id: " << counter_ids[i];
}
req.add_counter_ids(proto_id);
}
grpc::Status status = switch_->GetSwitchStats(&context, req, &resp);
if (!status.ok()) {
Expand All @@ -1555,7 +1582,7 @@ sai_status_t l_get_switch_stats_ext(sai_object_id_t switch_id,
sai_stats_mode_t mode, uint64_t* counters) {
LOG(INFO) << "Func: " << __PRETTY_FUNCTION__;

return SAI_STATUS_SUCCESS;
return l_get_switch_stats(switch_id, number_of_counters, counter_ids, counters);
}

sai_status_t l_clear_switch_stats(sai_object_id_t switch_id,
Expand Down
4 changes: 4 additions & 0 deletions dataplane/standalone/sai/switch.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ extern "C" {
#include "experimental/saiextensions.h"
}

#define SAI_SWITCH_ATTR_SUPPORTED_DEBUG_COUNTER_TYPE_LIST (sai_switch_attr_t)2112
#define SAI_SWITCH_ATTR_SUPPORTED_INGRESS_DROP_REASON_LIST (sai_switch_attr_t)2113
#define SAI_SWITCH_ATTR_AVAILABLE_SWITCH_INGRESS_DROP_COUNTERS (sai_switch_attr_t)2118

extern const sai_switch_api_t l_switch;

sai_status_t l_create_switch(sai_object_id_t* switch_id, uint32_t attr_count,
Expand Down
Loading