Skip to content

Commit 887d3df

Browse files
committed
Added support for debug counters in LPM4_MISS and LPM6_MISS in Lucius client
1 parent f097133 commit 887d3df

5 files changed

Lines changed: 60 additions & 2 deletions

File tree

dataplane/proto/sai/common.proto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4567,6 +4567,9 @@ message SwitchAttribute {
45674567
optional uint32 max_icmp_echo_session = 219 [(attr_enum_value) = 235];
45684568
optional StatsCountMode stats_count_mode = 220 [(attr_enum_value) = 236];
45694569
repeated uint64 selective_counter_list = 221 [(attr_enum_value) = 237];
4570+
repeated DebugCounterType supported_debug_counter_type_list = 222;
4571+
repeated InDropReason supported_ingress_drop_reason_list = 223;
4572+
optional uint32 available_switch_ingress_drop_counters = 224;
45704573
}
45714574

45724575
message SwitchTunnelAttribute {

dataplane/standalone/entrypoint.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,27 @@ sai_status_t sai_query_attribute_enum_values_capability(
500500
_In_ sai_object_id_t switch_id, _In_ sai_object_type_t object_type,
501501
_In_ sai_attr_id_t attr_id,
502502
_Inout_ sai_s32_list_t *enum_values_capability) {
503+
if (object_type == SAI_OBJECT_TYPE_DEBUG_COUNTER) {
504+
if (attr_id == SAI_DEBUG_COUNTER_ATTR_TYPE) {
505+
if (enum_values_capability->list == nullptr || enum_values_capability->count < 1) {
506+
enum_values_capability->count = 1;
507+
} else {
508+
enum_values_capability->list[0] = SAI_DEBUG_COUNTER_TYPE_SWITCH_IN_DROP_REASONS;
509+
enum_values_capability->count = 1;
510+
}
511+
return SAI_STATUS_SUCCESS;
512+
}
513+
if (attr_id == SAI_DEBUG_COUNTER_ATTR_IN_DROP_REASON_LIST) {
514+
if (enum_values_capability->list == nullptr || enum_values_capability->count < 2) {
515+
enum_values_capability->count = 2;
516+
} else {
517+
enum_values_capability->list[0] = SAI_IN_DROP_REASON_LPM4_MISS;
518+
enum_values_capability->list[1] = SAI_IN_DROP_REASON_LPM6_MISS;
519+
enum_values_capability->count = 2;
520+
}
521+
return SAI_STATUS_SUCCESS;
522+
}
523+
}
503524
return SAI_STATUS_NOT_IMPLEMENTED;
504525
}
505526

dataplane/standalone/sai/debug_counter.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ sai_status_t l_get_debug_counter_attribute(sai_object_id_t debug_counter_id,
197197
attr_list[i].value.s32list.list, resp.attr().out_drop_reason_list(),
198198
&attr_list[i].value.s32list.count);
199199
break;
200+
default:
201+
LOG(ERROR) << "Unhandled DebugCounter attribute ID: " << attr_list[i].id;
202+
break;
200203
}
201204
}
202205

dataplane/standalone/sai/switch.cc

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,6 +1510,29 @@ sai_status_t l_get_switch_attribute(sai_object_id_t switch_id,
15101510
resp.attr().selective_counter_list(),
15111511
&attr_list[i].value.objlist.count);
15121512
break;
1513+
case SAI_SWITCH_ATTR_SUPPORTED_DEBUG_COUNTER_TYPE_LIST:
1514+
if (attr_list[i].value.s32list.list == nullptr || attr_list[i].value.s32list.count < 1) {
1515+
attr_list[i].value.s32list.count = 1;
1516+
} else {
1517+
attr_list[i].value.s32list.list[0] = SAI_DEBUG_COUNTER_TYPE_SWITCH_IN_DROP_REASONS;
1518+
attr_list[i].value.s32list.count = 1;
1519+
}
1520+
break;
1521+
case SAI_SWITCH_ATTR_SUPPORTED_INGRESS_DROP_REASON_LIST:
1522+
if (attr_list[i].value.s32list.list == nullptr || attr_list[i].value.s32list.count < 2) {
1523+
attr_list[i].value.s32list.count = 2;
1524+
} else {
1525+
attr_list[i].value.s32list.list[0] = SAI_IN_DROP_REASON_LPM4_MISS;
1526+
attr_list[i].value.s32list.list[1] = SAI_IN_DROP_REASON_LPM6_MISS;
1527+
attr_list[i].value.s32list.count = 2;
1528+
}
1529+
break;
1530+
case SAI_SWITCH_ATTR_AVAILABLE_SWITCH_INGRESS_DROP_COUNTERS:
1531+
attr_list[i].value.u32 = 1000;
1532+
break;
1533+
default:
1534+
LOG(ERROR) << "Unhandled Switch attribute ID during get: " << attr_list[i].id;
1535+
break;
15131536
}
15141537
}
15151538

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

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

1558-
return SAI_STATUS_SUCCESS;
1585+
return l_get_switch_stats(switch_id, number_of_counters, counter_ids, counters);
15591586
}
15601587

15611588
sai_status_t l_clear_switch_stats(sai_object_id_t switch_id,

dataplane/standalone/sai/switch.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ extern "C" {
2323
#include "experimental/saiextensions.h"
2424
}
2525

26+
#define SAI_SWITCH_ATTR_SUPPORTED_DEBUG_COUNTER_TYPE_LIST (sai_switch_attr_t)2112
27+
#define SAI_SWITCH_ATTR_SUPPORTED_INGRESS_DROP_REASON_LIST (sai_switch_attr_t)2113
28+
#define SAI_SWITCH_ATTR_AVAILABLE_SWITCH_INGRESS_DROP_COUNTERS (sai_switch_attr_t)2118
29+
2630
extern const sai_switch_api_t l_switch;
2731

2832
sai_status_t l_create_switch(sai_object_id_t* switch_id, uint32_t attr_count,

0 commit comments

Comments
 (0)