Skip to content

Commit

Permalink
Addressing code review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
dgsudharsan committed Oct 21, 2021
1 parent fe1fe90 commit 7ddb0ab
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 21 deletions.
69 changes: 48 additions & 21 deletions orchagent/vxlanorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ extern PortsOrch* gPortsOrch;
extern sai_object_id_t gUnderlayIfId;
extern FlexManagerDirectory g_FlexManagerDirectory;

#define FLEX_COUNTER_UPD_INTERVAL 1

const map<MAP_T, uint32_t> vxlanTunnelMap =
{
{ MAP_T::VNI_TO_VLAN_ID, SAI_TUNNEL_MAP_TYPE_VNI_TO_VLAN_ID },
Expand Down Expand Up @@ -1190,6 +1192,7 @@ VxlanTunnelOrch::VxlanTunnelOrch(DBConnector *statedb, DBConnector *db, const st
FieldValueTuple fv;
string tunnel_rate_plugin = "tunnel_rates.lua";
m_counter_db = shared_ptr<DBConnector>(new DBConnector("COUNTERS_DB", 0));
m_asic_db = shared_ptr<DBConnector>(new DBConnector("ASIC_DB", 0));
try
{
string tunnel_rate_script = swss::loadLuaScript(tunnel_rate_plugin);
Expand All @@ -1207,28 +1210,53 @@ VxlanTunnelOrch::VxlanTunnelOrch(DBConnector *statedb, DBConnector *db, const st
m_tunnelNameTable = unique_ptr<Table>(new Table(m_counter_db.get(), COUNTERS_TUNNEL_NAME_MAP));
m_tunnelTypeTable = unique_ptr<Table>(new Table(m_counter_db.get(), COUNTERS_TUNNEL_TYPE_MAP));

m_vidToRidTable = unique_ptr<Table>(new Table(m_asic_db.get(), "VIDTORID"));

auto intervT = timespec { .tv_sec = FLEX_COUNTER_UPD_INTERVAL , .tv_nsec = 0 };
m_FlexCounterUpdTimer = new SelectableTimer(intervT);
auto executorT = new ExecutableTimer(m_FlexCounterUpdTimer, this, "FLEX_COUNTER_UPD_TIMER");
Orch::addExecutor(executorT);

}

void VxlanTunnelOrch::addTunnelToFlexCounter(sai_object_id_t oid, const string &name)
void VxlanTunnelOrch::doTask(SelectableTimer &timer)
{
SWSS_LOG_ENTER();
string type = "SAI_TUNNEL_TYPE_VXLAN";

string sai_oid = sai_serialize_object_id(oid);
vector<FieldValueTuple> tunnelNameFvs;
vector<FieldValueTuple> tunnelTypeFvs;
SWSS_LOG_DEBUG("Registering %" PRId64 " new tunnels", m_pendingAddToFlexCntr.size());
for (auto it = m_pendingAddToFlexCntr.begin(); it != m_pendingAddToFlexCntr.end(); )
{
string value;
const auto id = sai_serialize_object_id(it->first);

if (m_vidToRidTable->hget("", id, value))
{
SWSS_LOG_INFO("Registering %s, id %s", it->second.c_str(), id.c_str());
vector<FieldValueTuple> tunnelNameFvs;
vector<FieldValueTuple> tunnelTypeFvs;
string type = "SAI_TUNNEL_TYPE_VXLAN";

tunnelNameFvs.emplace_back(it->second, id);
tunnelTypeFvs.emplace_back(id, type);

tunnelNameFvs.emplace_back(name, sai_oid);
tunnelTypeFvs.emplace_back(sai_oid, type);
m_tunnelNameTable->set("", tunnelNameFvs);
m_tunnelTypeTable->set("", tunnelTypeFvs);
auto tunnel_stats = generateTunnelCounterStats();

m_tunnelNameTable->set("", tunnelNameFvs);
m_tunnelTypeTable->set("", tunnelTypeFvs);
tunnel_stat_manager->setCounterIdList(it->first, CounterType::TUNNEL,
tunnel_stats);
it = m_pendingAddToFlexCntr.erase(it);
}
else
{
++it;
}
}
}

auto tunnel_stats = generateTunnelCounterStats();
tunnel_stat_manager->setCounterIdList(oid, CounterType::TUNNEL,
tunnel_stats);
SWSS_LOG_DEBUG("Registered tunnel %s to Flex counter", name.c_str());
void VxlanTunnelOrch::addTunnelToFlexCounter(sai_object_id_t oid, const string &name)
{
m_pendingAddToFlexCntr[oid] = name;
}

void VxlanTunnelOrch::removeTunnelFromFlexCounter(sai_object_id_t oid, const string &name)
Expand All @@ -1241,6 +1269,12 @@ void VxlanTunnelOrch::removeTunnelFromFlexCounter(sai_object_id_t oid, const str
return;
}

if (m_pendingAddToFlexCntr.find(oid) != m_pendingAddToFlexCntr.end())
{
m_pendingAddToFlexCntr.erase(oid);
return;
}

string sai_oid = sai_serialize_object_id(oid);

m_tunnelNameTable->hdel("", name);
Expand All @@ -1267,14 +1301,7 @@ void VxlanTunnelOrch::generateTunnelCounterMap()
return;
}

for (const auto& it: vxlan_tunnel_table_)
{
auto tunnel_id = it.second.get()->getTunnelId();
if (tunnel_id != SAI_NULL_OBJECT_ID)
{
addTunnelToFlexCounter(it.second.get()->getTunnelId(), it.second.get()->getTunnelName());
}
}
m_FlexCounterUpdTimer->start();

m_isTunnelCounterMapGenerated = true;
}
Expand Down
6 changes: 6 additions & 0 deletions orchagent/vxlanorch.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include "request_parser.h"
#include "portsorch.h"
#include "vrforch.h"
#include "timer.h"

enum class MAP_T
{
Expand Down Expand Up @@ -345,18 +346,23 @@ class VxlanTunnelOrch : public Orch2
private:
virtual bool addOperation(const Request& request);
virtual bool delOperation(const Request& request);
void doTask(swss::SelectableTimer&);

VxlanTunnelTable vxlan_tunnel_table_;
VxlanTunnelRequest request_;
VxlanVniVlanMapTable vxlan_vni_vlan_map_table_;
VTEPTable vtep_table_;
Table m_stateVxlanTable;
std::map<sai_object_id_t, std::string> m_pendingAddToFlexCntr;
FlexCounterManager vxlan_tunnel_stat_manager;
bool m_isTunnelCounterMapGenerated = false;
FlexCounterManager *tunnel_stat_manager;
unique_ptr<Table> m_tunnelNameTable;
unique_ptr<Table> m_tunnelTypeTable;
unique_ptr<Table> m_vidToRidTable;
shared_ptr<DBConnector> m_counter_db;
shared_ptr<DBConnector> m_asic_db;
SelectableTimer* m_FlexCounterUpdTimer = nullptr;
};

const request_description_t vxlan_tunnel_map_request_description = {
Expand Down

0 comments on commit 7ddb0ab

Please sign in to comment.