Skip to content

Commit

Permalink
Fix IPv6 link-local address can't work in VRF
Browse files Browse the repository at this point in the history
Add/Delete IPv6 link-local route to me in VRF when VRF add/delete to trap packet to CPU
  • Loading branch information
link19430 committed Sep 30, 2024
1 parent 5fd7a05 commit 0f9ad52
Show file tree
Hide file tree
Showing 11 changed files with 1,090 additions and 2 deletions.
7 changes: 7 additions & 0 deletions orchagent/p4orch/tests/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,16 @@ p4orch_tests_SOURCES = $(ORCHAGENT_DIR)/orch.cpp \
fake_flowcounterrouteorch.cpp \
fake_dbconnector.cpp \
fake_producertable.cpp \
fake_producerstatetable.cpp \
fake_consumerstatetable.cpp \
fake_subscriberstatetable.cpp \
fake_notificationconsumer.cpp \
fake_fdborch.cpp \
fake_intfsorch.cpp \
fake_neighorch.cpp \
fake_fgnhgorch.cpp \
fake_srv6orch.cpp \
fake_routeorch.cpp \
fake_table.cpp \
p4oidmapper_test.cpp \
p4orch_util_test.cpp \
Expand Down
2 changes: 1 addition & 1 deletion orchagent/p4orch/tests/fake_dbconnector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace swss
{

static std::map<std::string, int> dbNameIdMap = {
{"APPL_DB", 0}, {"ASIC_DB", 1}, {"COUNTERS_DB", 2}, {"CONFIG_DB", 4}, {"FLEX_COUNTER_DB", 5}, {"STATE_DB", 6},
{"APPL_DB", 0}, {"ASIC_DB", 1}, {"COUNTERS_DB", 2}, {"CONFIG_DB", 4}, {"FLEX_COUNTER_DB", 5}, {"STATE_DB", 6}, {"CHASSIS_APP_DB", 12},
};

using DbDataT = std::map<int, std::map<std::string, std::map<std::string, std::string>>>;
Expand Down
94 changes: 94 additions & 0 deletions orchagent/p4orch/tests/fake_fdborch.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
#include "fdborch.h"

const int FdbOrch::fdborch_pri = 20;

FdbOrch::FdbOrch(DBConnector* applDbConnector, vector<table_name_with_pri_t> appFdbTables,
TableConnector stateDbFdbConnector, TableConnector stateDbMclagFdbConnector, PortsOrch *port) :
Orch(applDbConnector, appFdbTables),
m_portsOrch(port),
m_fdbStateTable(stateDbFdbConnector.first, stateDbFdbConnector.second),
m_mclagFdbStateTable(stateDbMclagFdbConnector.first, stateDbMclagFdbConnector.second)
{
}

bool FdbOrch::bake()
{
return true;
}

bool FdbOrch::storeFdbEntryState(const FdbUpdate& update)
{
return true;
}

void FdbOrch::clearFdbEntry(const FdbEntry& entry)
{
}

void FdbOrch::handleSyncdFlushNotif(const sai_object_id_t& bv_id,
const sai_object_id_t& bridge_port_id,
const MacAddress& mac,
const sai_fdb_entry_type_t& sai_fdb_type)
{
}

void FdbOrch::update(sai_fdb_event_t type,
const sai_fdb_entry_t* entry,
sai_object_id_t bridge_port_id,
const sai_fdb_entry_type_t &sai_fdb_type)
{
}

void FdbOrch::update(SubjectType type, void *cntx)
{
}

bool FdbOrch::getPort(const MacAddress& mac, uint16_t vlan, Port& port)
{
return true;
}

void FdbOrch::doTask(Consumer& consumer)
{
}

void FdbOrch::doTask(NotificationConsumer& consumer)
{
}

void FdbOrch::flushFDBEntries(sai_object_id_t bridge_port_oid,
sai_object_id_t vlan_oid)
{
}

void FdbOrch::notifyObserversFDBFlush(Port &port, sai_object_id_t& bvid)
{
}

void FdbOrch::updatePortOperState(const PortOperStateUpdate& update)
{
}

void FdbOrch::updateVlanMember(const VlanMemberUpdate& update)
{
}

bool FdbOrch::addFdbEntry(const FdbEntry& entry, const string& port_name,
FdbData fdbData)
{
return true;
}

bool FdbOrch::removeFdbEntry(const FdbEntry& entry, FdbOrigin origin)
{
return true;
}

void FdbOrch::deleteFdbEntryFromSavedFDB(const MacAddress &mac,
const unsigned short &vlanId, FdbOrigin origin, const string portName)
{
}

void FdbOrch::notifyTunnelOrch(Port& port)
{
}
146 changes: 146 additions & 0 deletions orchagent/p4orch/tests/fake_fgnhgorch.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
#include "fgnhgorch.h"

FgNhgOrch::FgNhgOrch(DBConnector *db, DBConnector *appDb, DBConnector *stateDb, vector<table_name_with_pri_t> &tableNames, NeighOrch *neighOrch, IntfsOrch *intfsOrch, VRFOrch *vrfOrch) :
Orch(db, tableNames),
m_neighOrch(neighOrch),
m_intfsOrch(intfsOrch),
m_vrfOrch(vrfOrch),
m_stateWarmRestartRouteTable(stateDb, STATE_FG_ROUTE_TABLE_NAME),
m_routeTable(appDb, APP_ROUTE_TABLE_NAME)
{
}

void FgNhgOrch::update(SubjectType type, void *cntx)
{
}

bool FgNhgOrch::bake()
{
return true;
}

void FgNhgOrch::calculateBankHashBucketStartIndices(FgNhgEntry *fgNhgEntry)
{
}

void FgNhgOrch::setStateDbRouteEntry(const IpPrefix &ipPrefix, uint32_t index, NextHopKey nextHop)
{
}

bool FgNhgOrch::writeHashBucketChange(FGNextHopGroupEntry *syncd_fg_route_entry, uint32_t index, sai_object_id_t nh_oid,
const IpPrefix &ipPrefix, NextHopKey nextHop)
{
return true;
}

bool FgNhgOrch::createFineGrainedNextHopGroup(FGNextHopGroupEntry &syncd_fg_route_entry, FgNhgEntry *fgNhgEntry,
const NextHopGroupKey &nextHops)
{
return true;
}

bool FgNhgOrch::removeFineGrainedNextHopGroup(FGNextHopGroupEntry *syncd_fg_route_entry)
{
return true;
}

bool FgNhgOrch::modifyRoutesNextHopId(sai_object_id_t vrf_id, const IpPrefix &ipPrefix, sai_object_id_t next_hop_id)
{
return true;
}

bool FgNhgOrch::validNextHopInNextHopGroup(const NextHopKey& nexthop)
{
return true;
}

bool FgNhgOrch::invalidNextHopInNextHopGroup(const NextHopKey& nexthop)
{
return true;
}

bool FgNhgOrch::setActiveBankHashBucketChanges(FGNextHopGroupEntry *syncd_fg_route_entry, FgNhgEntry *fgNhgEntry,
uint32_t bank, uint32_t syncd_bank, std::vector<BankMemberChanges> bank_member_changes,
std::map<NextHopKey,sai_object_id_t> &nhopgroup_members_set, const IpPrefix &ipPrefix)
{
return true;
}

bool FgNhgOrch::setInactiveBankToNextAvailableActiveBank(FGNextHopGroupEntry *syncd_fg_route_entry, FgNhgEntry *fgNhgEntry,
uint32_t bank, std::vector<BankMemberChanges> bank_member_changes,
std::map<NextHopKey,sai_object_id_t> &nhopgroup_members_set, const IpPrefix &ipPrefix)
{
return true;
}

bool FgNhgOrch::setInactiveBankHashBucketChanges(FGNextHopGroupEntry *syncd_fg_route_entry, FgNhgEntry *fgNhgEntry,
uint32_t bank,std::vector<BankMemberChanges> &bank_member_changes,
std::map<NextHopKey,sai_object_id_t> &nhopgroup_members_set, const IpPrefix &ipPrefix)
{
return true;
}

bool FgNhgOrch::computeAndSetHashBucketChanges(FGNextHopGroupEntry *syncd_fg_route_entry,
FgNhgEntry *fgNhgEntry, std::vector<BankMemberChanges> &bank_member_changes,
std::map<NextHopKey,sai_object_id_t> &nhopgroup_members_set,
const IpPrefix &ipPrefix)
{
return true;
}

bool FgNhgOrch::setNewNhgMembers(FGNextHopGroupEntry &syncd_fg_route_entry, FgNhgEntry *fgNhgEntry,
std::vector<BankMemberChanges> &bank_member_changes, std::map<NextHopKey,sai_object_id_t> &nhopgroup_members_set,
const IpPrefix &ipPrefix)
{
return true;
}

bool FgNhgOrch::isRouteFineGrained(sai_object_id_t vrf_id, const IpPrefix &ipPrefix, const NextHopGroupKey &nextHops)
{
return true;
}

bool FgNhgOrch::syncdContainsFgNhg(sai_object_id_t vrf_id, const IpPrefix &ipPrefix)
{
return true;
}

bool FgNhgOrch::setFgNhg(sai_object_id_t vrf_id, const IpPrefix &ipPrefix, const NextHopGroupKey &nextHops,
sai_object_id_t &next_hop_id, bool &isNextHopIdChanged)
{
return true;
}

bool FgNhgOrch::removeFgNhg(sai_object_id_t vrf_id, const IpPrefix &ipPrefix)
{
return true;
}

vector<FieldValueTuple> FgNhgOrch::generateRouteTableFromNhgKey(NextHopGroupKey nhg)
{
vector<FieldValueTuple> fvVector;
return fvVector;
}

void FgNhgOrch::cleanupIpInLinkToIpMap(const string &link, const IpAddress &ip, FgNhgEntry &fgNhg_entry)
{
}

bool FgNhgOrch::doTaskFgNhg(const KeyOpFieldsValuesTuple & t)
{
return true;
}

bool FgNhgOrch::doTaskFgNhgPrefix(const KeyOpFieldsValuesTuple & t)
{
return true;
}

bool FgNhgOrch::doTaskFgNhgMember(const KeyOpFieldsValuesTuple & t)
{
return true;
}

void FgNhgOrch::doTask(Consumer& consumer)
{
}
Loading

0 comments on commit 0f9ad52

Please sign in to comment.