Skip to content

Commit 2c12aab

Browse files
authored
[Chassis][202405] Changes to read route tag value from Netlink Message and take appropriate action
What I did Cherry-pick pf PR: sonic-net/sonic-swss#3353
2 parents 857dd6a + a609f3e commit 2c12aab

File tree

7 files changed

+42
-7
lines changed

7 files changed

+42
-7
lines changed

.azure-pipelines/build-template.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ jobs:
104104
libzmq3-dev \
105105
swig4.0 \
106106
libdbus-1-dev \
107-
libteam-dev
107+
libteam-dev \
108+
libyaml-cpp-dev
108109
sudo pip3 install lcov_cobertura
109110
displayName: "Install dependencies"
110111
- task: DownloadPipelineArtifact@2

.azure-pipelines/docker-sonic-vs/Dockerfile

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ COPY ["debs", "/debs"]
1212
# same, even though contents have changed) are checked between the previous and current layer.
1313
RUN dpkg --purge libswsscommon python3-swsscommon sonic-db-cli libsaimetadata libsairedis libsaivs syncd-vs swss sonic-eventd libdashapi
1414

15-
RUN dpkg -i /debs/libdashapi_1.0.0_amd64.deb \
15+
RUN apt-get update
16+
17+
RUN apt install -y /debs/libdashapi_1.0.0_amd64.deb \
1618
/debs/libswsscommon_1.0.0_amd64.deb \
1719
/debs/python3-swsscommon_1.0.0_amd64.deb \
1820
/debs/sonic-db-cli_1.0.0_amd64.deb \

fpmsyncd/Makefile.am

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ fpmsyncd_SOURCES = fpmsyncd.cpp fpmlink.cpp routesync.cpp $(top_srcdir)/warmrest
1212

1313
fpmsyncd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN)
1414
fpmsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_ASAN)
15-
fpmsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lswsscommon
15+
fpmsyncd_LDADD = $(LDFLAGS_ASAN) -lnl-3 -lnl-route-3 -lswsscommon -lyaml-cpp
1616

1717
if GCOV_ENABLED
1818
fpmsyncd_SOURCES += ../gcovpreload/gcovpreload.cpp

fpmsyncd/routesync.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "converter.h"
1414
#include <string.h>
1515
#include <arpa/inet.h>
16+
#include <yaml-cpp/yaml.h>
1617

1718
using namespace std;
1819
using namespace swss;
@@ -86,6 +87,20 @@ RouteSync::RouteSync(RedisPipeline *pipeline) :
8687
m_nl_sock = nl_socket_alloc();
8788
nl_connect(m_nl_sock, NETLINK_ROUTE);
8889
rtnl_link_alloc_cache(m_nl_sock, AF_UNSPEC, &m_link_cache);
90+
91+
YAML::Node root;
92+
try
93+
{
94+
root = YAML::LoadFile("/etc/sonic/constants.yml");
95+
route_tag_not_to_appdb = root["constants"]["bgp"]["route_do_not_send_appdb_tag"].as<int>();
96+
route_tag_fallback_to_default_route = root["constants"]["bgp"]["route_eligible_for_fallback_to_default_tag"].as<int>();
97+
}
98+
catch (const exception &e)
99+
{
100+
cout << "Exception \"" << e.what() << "\" had been thrown in daemon in loading constants.yml" << endl;
101+
route_tag_not_to_appdb = 0xffffffff;
102+
route_tag_fallback_to_default_route = 0xffffffff;
103+
}
89104
}
90105

91106
char *RouteSync::prefixMac2Str(char *mac, char *buf, int size)
@@ -667,6 +682,8 @@ void RouteSync::onRouteMsg(int nlmsg_type, struct nl_object *obj, char *vrf)
667682
struct rtnl_route *route_obj = (struct rtnl_route *)obj;
668683
struct nl_addr *dip;
669684
char destipprefix[IFNAMSIZ + MAX_ADDR_SIZE + 2] = {0};
685+
uint32_t tag = 0;
686+
bool route_eligible_for_fallback_to_default_route = false;
670687

671688
if (vrf)
672689
{
@@ -693,6 +710,13 @@ void RouteSync::onRouteMsg(int nlmsg_type, struct nl_object *obj, char *vrf)
693710
destipprefix[strlen(vrf)] = ':';
694711
}
695712

713+
tag = rtnl_route_get_priority(route_obj);
714+
715+
if (tag == route_tag_not_to_appdb)
716+
return;
717+
else if (tag == route_tag_fallback_to_default_route)
718+
route_eligible_for_fallback_to_default_route = true;
719+
696720
dip = rtnl_route_get_dst(route_obj);
697721
nl_addr2str(dip, destipprefix + strlen(destipprefix), MAX_ADDR_SIZE);
698722

@@ -833,6 +857,12 @@ void RouteSync::onRouteMsg(int nlmsg_type, struct nl_object *obj, char *vrf)
833857
fvVector.push_back(wt);
834858
}
835859

860+
if (route_eligible_for_fallback_to_default_route)
861+
{
862+
FieldValueTuple tag("fallback_to_default_route", "true");
863+
fvVector.push_back(tag);
864+
}
865+
836866
if (!warmRestartInProgress)
837867
{
838868
m_routeTable.set(destipprefix, fvVector);

fpmsyncd/routesync.h

+2
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ class RouteSync : public NetMsg
7777
ProducerStateTable m_vnet_tunnelTable;
7878
struct nl_cache *m_link_cache;
7979
struct nl_sock *m_nl_sock;
80+
uint32_t route_tag_not_to_appdb;
81+
uint32_t route_tag_fallback_to_default_route;
8082

8183
bool m_isSuppressionEnabled{false};
8284
FpmInterface* m_fpmInterface {nullptr};

tests/Makefile.am

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ tests_SOURCES = swssnet_ut.cpp request_parser_ut.cpp ../orchagent/request_parser
2525
tests_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI)
2626
tests_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI) -I../orchagent
2727
tests_LDADD = $(LDADD_GTEST) -lnl-genl-3 -lhiredis -lhiredis -lpthread \
28-
-lswsscommon -lswsscommon -lgtest -lgtest_main
28+
-lswsscommon -lswsscommon -lyaml-cpp -lgtest -lgtest_main

tests/mock_tests/Makefile.am

+3-3
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ tests_teammgrd_INCLUDES = $(tests_INCLUDES) -I$(top_srcdir)/cfgmgr -I$(top_srcdi
223223
tests_teammgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI)
224224
tests_teammgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI) $(tests_teammgrd_INCLUDES)
225225
tests_teammgrd_LDADD = $(LDADD_GTEST) $(LDADD_SAI) -lnl-genl-3 -lhiredis -lhiredis \
226-
-lswsscommon -lswsscommon -lgtest -lgtest_main -lzmq -lnl-3 -lnl-route-3 -lpthread -lgmock -lgmock_main
226+
-lswsscommon -lswsscommon -lyaml-cpp -lgtest -lgtest_main -lzmq -lnl-3 -lnl-route-3 -lpthread -lgmock -lgmock_main
227227

228228
## fpmsyncd unit tests
229229

@@ -243,7 +243,7 @@ tests_fpmsyncd_INCLUDES = $(tests_INCLUDES) -I$(top_srcdir)/tests_fpmsyncd -I$(t
243243
tests_fpmsyncd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI)
244244
tests_fpmsyncd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI) $(tests_fpmsyncd_INCLUDES)
245245
tests_fpmsyncd_LDADD = $(LDADD_GTEST) $(LDADD_SAI) -lnl-genl-3 -lhiredis -lhiredis \
246-
-lswsscommon -lswsscommon -lgtest -lgtest_main -lzmq -lnl-3 -lnl-route-3 -lpthread -lgmock -lgmock_main
246+
-lswsscommon -lswsscommon -lyaml-cpp -lgtest -lgtest_main -lzmq -lnl-3 -lnl-route-3 -lpthread -lgmock -lgmock_main
247247

248248
## response publisher unit tests
249249

@@ -260,5 +260,5 @@ tests_response_publisher_INCLUDES = $(tests_INCLUDES)
260260
tests_response_publisher_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI)
261261
tests_response_publisher_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI) $(tests_response_publisher_INCLUDES)
262262
tests_response_publisher_LDADD = $(LDADD_GTEST) $(LDADD_SAI) -lnl-genl-3 -lhiredis -lhiredis \
263-
-lswsscommon -lswsscommon -lgtest -lgtest_main -lzmq -lnl-3 -lnl-route-3 -lpthread
263+
-lswsscommon -lswsscommon -lyaml-cpp -lgtest -lgtest_main -lzmq -lnl-3 -lnl-route-3 -lpthread
264264

0 commit comments

Comments
 (0)