Skip to content

Commit 47e9b2f

Browse files
[orchagent/dash]: Changes to support gNMI feedback for DASH objects (#3490)
* [orchagent/dash]: Changes to support gNMI feedback for DASH objects This PR makes the following changes: Write result of SAI API call to APP_STATE_DB for DASH objects as per sonic-net/SONiC#1759 Instantiate DpuOrchDaemon for smartswitch DPUs. Related PRs [doc]: Add gnmi feedback design for SmartSwitch SONiC#1759 [doc]: Init Smartswitch database High Level Design SONiC#1534 [dbconnect]: Support DPU database schema sonic-swss-common#845 What I did Changes to support gNMI feedback path for DASH objects on SmartSwitch DPUs
1 parent bf43775 commit 47e9b2f

20 files changed

+305
-73
lines changed

orchagent/dash/dashaclorch.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ inline void lexical_convert(const string &buffer, DashAclStage &stage)
7474

7575
}
7676

77-
DashAclOrch::DashAclOrch(DBConnector *db, const vector<string> &tables, DashOrch *dash_orch, ZmqServer *zmqServer) :
77+
DashAclOrch::DashAclOrch(DBConnector *db, const vector<string> &tables, DashOrch *dash_orch, DBConnector *app_state_db, ZmqServer *zmqServer) :
7878
ZmqOrch(db, tables, zmqServer),
7979
m_dash_orch(dash_orch),
8080
m_group_mgr(db, dash_orch, this),

orchagent/dash/dashaclorch.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class DashAclOrch : public ZmqOrch
3535
public:
3636
using TaskArgs = std::vector<swss::FieldValueTuple>;
3737

38-
DashAclOrch(swss::DBConnector *db, const std::vector<std::string> &tables, DashOrch *dash_orch, swss::ZmqServer *zmqServer);
38+
DashAclOrch(swss::DBConnector *db, const std::vector<std::string> &tables, DashOrch *dash_orch, swss::DBConnector *app_state_db, swss::ZmqServer *zmqServer);
3939
DashAclGroupMgr& getDashAclGroupMgr();
4040
DashTagMgr& getDashAclTagMgr();
4141

orchagent/dash/dashorch.cpp

+32-4
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,20 @@ static std::unordered_map<string, sai_dash_eni_mac_override_type_t> sMacOverride
4646
{ "dst_mac", SAI_DASH_ENI_MAC_OVERRIDE_TYPE_DST_MAC}
4747
};
4848

49-
DashOrch::DashOrch(DBConnector *db, vector<string> &tableName, ZmqServer *zmqServer) :
49+
DashOrch::DashOrch(DBConnector *db, vector<string> &tableName, DBConnector *app_state_db, ZmqServer *zmqServer) :
5050
ZmqOrch(db, tableName, zmqServer),
5151
m_eni_stat_manager(ENI_STAT_COUNTER_FLEX_COUNTER_GROUP, StatsMode::READ, ENI_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, false)
5252
{
5353
SWSS_LOG_ENTER();
5454

5555
m_asic_db = std::shared_ptr<DBConnector>(new DBConnector("ASIC_DB", 0));
5656
m_counter_db = std::shared_ptr<DBConnector>(new DBConnector("COUNTERS_DB", 0));
57-
m_eni_name_table = std::unique_ptr<Table>(new Table(m_counter_db.get(), COUNTERS_ENI_NAME_MAP));
57+
m_eni_name_table = make_unique<Table>(m_counter_db.get(), COUNTERS_ENI_NAME_MAP);
58+
dash_eni_result_table_ = make_unique<Table>(app_state_db, APP_DASH_ENI_TABLE_NAME);
59+
dash_eni_route_result_table_ = make_unique<Table>(app_state_db, APP_DASH_ENI_ROUTE_TABLE_NAME);
60+
dash_qos_result_table_ = make_unique<Table>(app_state_db, APP_DASH_QOS_TABLE_NAME);
61+
dash_appliance_result_table_ = make_unique<Table>(app_state_db, APP_DASH_APPLIANCE_TABLE_NAME);
62+
dash_routing_type_result_table_ = make_unique<Table>(app_state_db, APP_DASH_ROUTING_TYPE_TABLE_NAME);
5863

5964
if (gTraditionalFlexCounter)
6065
{
@@ -260,11 +265,13 @@ void DashOrch::doTaskApplianceTable(ConsumerBase& consumer)
260265
SWSS_LOG_ENTER();
261266

262267
auto it = consumer.m_toSync.begin();
268+
uint32_t result;
263269
while (it != consumer.m_toSync.end())
264270
{
265271
KeyOpFieldsValuesTuple t = it->second;
266272
string appliance_id = kfvKey(t);
267273
string op = kfvOp(t);
274+
result = DASH_RESULT_SUCCESS;
268275

269276
if (op == SET_COMMAND)
270277
{
@@ -283,14 +290,17 @@ void DashOrch::doTaskApplianceTable(ConsumerBase& consumer)
283290
}
284291
else
285292
{
293+
result = DASH_RESULT_FAILURE;
286294
it++;
287295
}
296+
writeResultToDB(dash_appliance_result_table_, appliance_id, result);
288297
}
289298
else if (op == DEL_COMMAND)
290299
{
291300
if (removeApplianceEntry(appliance_id))
292301
{
293302
it = consumer.m_toSync.erase(it);
303+
removeResultFromDB(dash_appliance_result_table_, appliance_id);
294304
}
295305
else
296306
{
@@ -342,12 +352,14 @@ void DashOrch::doTaskRoutingTypeTable(ConsumerBase& consumer)
342352
SWSS_LOG_ENTER();
343353

344354
auto it = consumer.m_toSync.begin();
355+
uint32_t result;
345356
while (it != consumer.m_toSync.end())
346357
{
347358
KeyOpFieldsValuesTuple t = it->second;
348359
string routing_type_str = kfvKey(t);
349360
string op = kfvOp(t);
350361
dash::route_type::RoutingType routing_type;
362+
result = DASH_RESULT_SUCCESS;
351363

352364
std::transform(routing_type_str.begin(), routing_type_str.end(), routing_type_str.begin(), ::toupper);
353365
routing_type_str = "ROUTING_TYPE_" + routing_type_str;
@@ -376,14 +388,17 @@ void DashOrch::doTaskRoutingTypeTable(ConsumerBase& consumer)
376388
}
377389
else
378390
{
391+
result = DASH_RESULT_FAILURE;
379392
it++;
380393
}
394+
writeResultToDB(dash_routing_type_result_table_, routing_type_str, result);
381395
}
382396
else if (op == DEL_COMMAND)
383397
{
384398
if (removeRoutingTypeEntry(routing_type))
385399
{
386400
it = consumer.m_toSync.erase(it);
401+
removeResultFromDB(dash_routing_type_result_table_, routing_type_str);
387402
}
388403
else
389404
{
@@ -677,14 +692,14 @@ void DashOrch::doTaskEniTable(ConsumerBase& consumer)
677692
{
678693
SWSS_LOG_ENTER();
679694

680-
const auto& tn = consumer.getTableName();
681-
682695
auto it = consumer.m_toSync.begin();
696+
uint32_t result;
683697
while (it != consumer.m_toSync.end())
684698
{
685699
auto t = it->second;
686700
string eni = kfvKey(t);
687701
string op = kfvOp(t);
702+
result = DASH_RESULT_SUCCESS;
688703
if (op == SET_COMMAND)
689704
{
690705
EniEntry entry;
@@ -702,14 +717,17 @@ void DashOrch::doTaskEniTable(ConsumerBase& consumer)
702717
}
703718
else
704719
{
720+
result = DASH_RESULT_FAILURE;
705721
it++;
706722
}
723+
writeResultToDB(dash_eni_result_table_, eni, result);
707724
}
708725
else if (op == DEL_COMMAND)
709726
{
710727
if (removeEni(eni))
711728
{
712729
it = consumer.m_toSync.erase(it);
730+
removeResultFromDB(dash_eni_result_table_, eni);
713731
}
714732
else
715733
{
@@ -756,11 +774,13 @@ bool DashOrch::removeQosEntry(const string& qos_name)
756774
void DashOrch::doTaskQosTable(ConsumerBase& consumer)
757775
{
758776
auto it = consumer.m_toSync.begin();
777+
uint32_t result;
759778
while (it != consumer.m_toSync.end())
760779
{
761780
KeyOpFieldsValuesTuple t = it->second;
762781
string qos_name = kfvKey(t);
763782
string op = kfvOp(t);
783+
result = DASH_RESULT_SUCCESS;
764784

765785
if (op == SET_COMMAND)
766786
{
@@ -779,14 +799,17 @@ void DashOrch::doTaskQosTable(ConsumerBase& consumer)
779799
}
780800
else
781801
{
802+
result = DASH_RESULT_FAILURE;
782803
it++;
783804
}
805+
writeResultToDB(dash_qos_result_table_, qos_name, result);
784806
}
785807
else if (op == DEL_COMMAND)
786808
{
787809
if (removeQosEntry(qos_name))
788810
{
789811
it = consumer.m_toSync.erase(it);
812+
removeResultFromDB(dash_qos_result_table_, qos_name);
790813
}
791814
else
792815
{
@@ -904,11 +927,13 @@ bool DashOrch::removeEniRoute(const std::string& eni)
904927
void DashOrch::doTaskEniRouteTable(ConsumerBase& consumer)
905928
{
906929
auto it = consumer.m_toSync.begin();
930+
uint32_t result;
907931
while (it != consumer.m_toSync.end())
908932
{
909933
KeyOpFieldsValuesTuple t = it->second;
910934
string eni = kfvKey(t);
911935
string op = kfvOp(t);
936+
result = DASH_RESULT_SUCCESS;
912937

913938
if (op == SET_COMMAND)
914939
{
@@ -927,14 +952,17 @@ void DashOrch::doTaskEniRouteTable(ConsumerBase& consumer)
927952
}
928953
else
929954
{
955+
result = DASH_RESULT_FAILURE;
930956
it++;
931957
}
958+
writeResultToDB(dash_eni_route_result_table_, eni, result);
932959
}
933960
else if (op == DEL_COMMAND)
934961
{
935962
if (removeEniRoute(eni))
936963
{
937964
it = consumer.m_toSync.erase(it);
965+
removeResultFromDB(dash_eni_route_result_table_, eni);
938966
}
939967
else
940968
{

orchagent/dash/dashorch.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
#define ENI_STAT_COUNTER_FLEX_COUNTER_GROUP "ENI_STAT_COUNTER"
2929
#define ENI_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS 10000
3030

31+
#define DASH_RESULT_SUCCESS 0
32+
#define DASH_RESULT_FAILURE 1
33+
3134
struct EniEntry
3235
{
3336
sai_object_id_t eni_id;
@@ -49,7 +52,7 @@ typedef std::map<std::string, dash::eni_route::EniRoute> EniRouteTable;
4952
class DashOrch : public ZmqOrch
5053
{
5154
public:
52-
DashOrch(swss::DBConnector *db, std::vector<std::string> &tables, swss::ZmqServer *zmqServer);
55+
DashOrch(swss::DBConnector *db, std::vector<std::string> &tables, swss::DBConnector *app_state_db, swss::ZmqServer *zmqServer);
5356
const EniEntry *getEni(const std::string &eni) const;
5457
bool getRouteTypeActions(dash::route_type::RoutingType routing_type, dash::route_type::RouteType& route_type);
5558
void handleFCStatusUpdate(bool is_enabled);
@@ -62,6 +65,11 @@ class DashOrch : public ZmqOrch
6265
EniTable eni_entries_;
6366
QosTable qos_entries_;
6467
EniRouteTable eni_route_entries_;
68+
std::unique_ptr<swss::Table> dash_eni_result_table_;
69+
std::unique_ptr<swss::Table> dash_qos_result_table_;
70+
std::unique_ptr<swss::Table> dash_appliance_result_table_;
71+
std::unique_ptr<swss::Table> dash_eni_route_result_table_;
72+
std::unique_ptr<swss::Table> dash_routing_type_result_table_;
6573
void doTask(ConsumerBase &consumer);
6674
void doTaskApplianceTable(ConsumerBase &consumer);
6775
void doTaskRoutingTypeTable(ConsumerBase &consumer);

0 commit comments

Comments
 (0)