Skip to content

Commit 9258978

Browse files
bocon13PINS Working Group
and
PINS Working Group
authored
[orchagent, cfgmgr] Add response publisher and state recording (#1992)
* Add response publisher , Add APPL STATE DB recording. Co-authored-by: PINS Working Group <[email protected]>
1 parent 3d862a7 commit 9258978

25 files changed

+815
-43
lines changed

cfgmgr/Makefile.am

+13-13
Original file line numberDiff line numberDiff line change
@@ -23,67 +23,67 @@ else
2323
DBGFLAGS = -g
2424
endif
2525

26-
vlanmgrd_SOURCES = vlanmgrd.cpp vlanmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
26+
vlanmgrd_SOURCES = vlanmgrd.cpp vlanmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
2727
vlanmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
2828
vlanmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
2929
vlanmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
3030

31-
teammgrd_SOURCES = teammgrd.cpp teammgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
31+
teammgrd_SOURCES = teammgrd.cpp teammgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
3232
teammgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
3333
teammgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
3434
teammgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
3535

36-
portmgrd_SOURCES = portmgrd.cpp portmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
36+
portmgrd_SOURCES = portmgrd.cpp portmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
3737
portmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
3838
portmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
3939
portmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
4040

41-
intfmgrd_SOURCES = intfmgrd.cpp intfmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/lib/subintf.cpp shellcmd.h
41+
intfmgrd_SOURCES = intfmgrd.cpp intfmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/lib/subintf.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
4242
intfmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
4343
intfmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
4444
intfmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
4545

46-
buffermgrd_SOURCES = buffermgrd.cpp buffermgr.cpp buffermgrdyn.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
46+
buffermgrd_SOURCES = buffermgrd.cpp buffermgr.cpp buffermgrdyn.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
4747
buffermgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
4848
buffermgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
4949
buffermgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
5050

51-
vrfmgrd_SOURCES = vrfmgrd.cpp vrfmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
51+
vrfmgrd_SOURCES = vrfmgrd.cpp vrfmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
5252
vrfmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
5353
vrfmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
5454
vrfmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
5555

56-
nbrmgrd_SOURCES = nbrmgrd.cpp nbrmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
56+
nbrmgrd_SOURCES = nbrmgrd.cpp nbrmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
5757
nbrmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI) $(LIBNL_CFLAGS)
5858
nbrmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI) $(LIBNL_CPPFLAGS)
5959
nbrmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS) $(LIBNL_LIBS)
6060

61-
vxlanmgrd_SOURCES = vxlanmgrd.cpp vxlanmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
61+
vxlanmgrd_SOURCES = vxlanmgrd.cpp vxlanmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
6262
vxlanmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
6363
vxlanmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
6464
vxlanmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
6565

66-
sflowmgrd_SOURCES = sflowmgrd.cpp sflowmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
66+
sflowmgrd_SOURCES = sflowmgrd.cpp sflowmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
6767
sflowmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
6868
sflowmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
6969
sflowmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
7070

71-
natmgrd_SOURCES = natmgrd.cpp natmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
71+
natmgrd_SOURCES = natmgrd.cpp natmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
7272
natmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
7373
natmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
7474
natmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
7575

76-
coppmgrd_SOURCES = coppmgrd.cpp coppmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
76+
coppmgrd_SOURCES = coppmgrd.cpp coppmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
7777
coppmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
7878
coppmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
7979
coppmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
8080

81-
tunnelmgrd_SOURCES = tunnelmgrd.cpp tunnelmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
81+
tunnelmgrd_SOURCES = tunnelmgrd.cpp tunnelmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
8282
tunnelmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
8383
tunnelmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
8484
tunnelmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)
8585

86-
macsecmgrd_SOURCES = macsecmgrd.cpp macsecmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp shellcmd.h
86+
macsecmgrd_SOURCES = macsecmgrd.cpp macsecmgr.cpp $(top_srcdir)/orchagent/orch.cpp $(top_srcdir)/orchagent/request_parser.cpp $(top_srcdir)/orchagent/response_publisher.cpp shellcmd.h
8787
macsecmgrd_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
8888
macsecmgrd_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_SAI)
8989
macsecmgrd_LDADD = $(COMMON_LIBS) $(SAIMETA_LIBS)

cfgmgr/buffermgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ bool gSwssRecord = false;
3333
bool gLogRotate = false;
3434
ofstream gRecordOfs;
3535
string gRecordFile;
36+
bool gResponsePublisherRecord = false;
37+
bool gResponsePublisherLogRotate = false;
38+
ofstream gResponsePublisherRecordOfs;
39+
string gResponsePublisherRecordFile;
3640
/* Global database mutex */
3741
mutex gDbMutex;
3842

cfgmgr/coppmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ bool gSwssRecord = false;
2929
bool gLogRotate = false;
3030
ofstream gRecordOfs;
3131
string gRecordFile;
32+
bool gResponsePublisherRecord = false;
33+
bool gResponsePublisherLogRotate = false;
34+
ofstream gResponsePublisherRecordOfs;
35+
string gResponsePublisherRecordFile;
3236
/* Global database mutex */
3337
mutex gDbMutex;
3438

cfgmgr/intfmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ bool gSwssRecord = false;
2929
bool gLogRotate = false;
3030
ofstream gRecordOfs;
3131
string gRecordFile;
32+
bool gResponsePublisherRecord = false;
33+
bool gResponsePublisherLogRotate = false;
34+
ofstream gResponsePublisherRecordOfs;
35+
string gResponsePublisherRecordFile;
3236
/* Global database mutex */
3337
mutex gDbMutex;
3438

cfgmgr/macsecmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ bool gSwssRecord = false;
3838
bool gLogRotate = false;
3939
ofstream gRecordOfs;
4040
string gRecordFile;
41+
bool gResponsePublisherRecord = false;
42+
bool gResponsePublisherLogRotate = false;
43+
ofstream gResponsePublisherRecordOfs;
44+
string gResponsePublisherRecordFile;
4145
/* Global database mutex */
4246
mutex gDbMutex;
4347

cfgmgr/natmgrd.cpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ bool gSwssRecord = false;
5252
bool gLogRotate = false;
5353
ofstream gRecordOfs;
5454
string gRecordFile;
55+
bool gResponsePublisherRecord = false;
56+
bool gResponsePublisherLogRotate = false;
57+
ofstream gResponsePublisherRecordOfs;
58+
string gResponsePublisherRecordFile;
5559
mutex gDbMutex;
5660
NatMgr *natmgr = NULL;
5761

@@ -200,4 +204,3 @@ int main(int argc, char **argv)
200204
}
201205
return -1;
202206
}
203-

cfgmgr/nbrmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ bool gSwssRecord = false;
3333
bool gLogRotate = false;
3434
ofstream gRecordOfs;
3535
string gRecordFile;
36+
bool gResponsePublisherRecord = false;
37+
bool gResponsePublisherLogRotate = false;
38+
ofstream gResponsePublisherRecordOfs;
39+
string gResponsePublisherRecordFile;
3640
/* Global database mutex */
3741
mutex gDbMutex;
3842

cfgmgr/portmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ bool gSwssRecord = false;
2828
bool gLogRotate = false;
2929
ofstream gRecordOfs;
3030
string gRecordFile;
31+
bool gResponsePublisherRecord = false;
32+
bool gResponsePublisherLogRotate = false;
33+
ofstream gResponsePublisherRecordOfs;
34+
string gResponsePublisherRecordFile;
3135
/* Global database mutex */
3236
mutex gDbMutex;
3337

cfgmgr/sflowmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ bool gSwssRecord = false;
2828
bool gLogRotate = false;
2929
ofstream gRecordOfs;
3030
string gRecordFile;
31+
bool gResponsePublisherRecord = false;
32+
bool gResponsePublisherLogRotate = false;
33+
ofstream gResponsePublisherRecordOfs;
34+
string gResponsePublisherRecordFile;
3135
/* Global database mutex */
3236
mutex gDbMutex;
3337

cfgmgr/teammgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ bool gSwssRecord = false;
1717
bool gLogRotate = false;
1818
ofstream gRecordOfs;
1919
string gRecordFile;
20+
bool gResponsePublisherRecord = false;
21+
bool gResponsePublisherLogRotate = false;
22+
ofstream gResponsePublisherRecordOfs;
23+
string gResponsePublisherRecordFile;
2024

2125
bool received_sigterm = false;
2226

cfgmgr/tunnelmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ bool gSwssRecord = false;
3131
bool gLogRotate = false;
3232
ofstream gRecordOfs;
3333
string gRecordFile;
34+
bool gResponsePublisherRecord = false;
35+
bool gResponsePublisherLogRotate = false;
36+
ofstream gResponsePublisherRecordOfs;
37+
string gResponsePublisherRecordFile;
3438
/* Global database mutex */
3539
mutex gDbMutex;
3640

cfgmgr/vlanmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ bool gSwssRecord = false;
3636
bool gLogRotate = false;
3737
ofstream gRecordOfs;
3838
string gRecordFile;
39+
bool gResponsePublisherRecord = false;
40+
bool gResponsePublisherLogRotate = false;
41+
ofstream gResponsePublisherRecordOfs;
42+
string gResponsePublisherRecordFile;
3943
/* Global database mutex */
4044
mutex gDbMutex;
4145

cfgmgr/vrfmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ bool gSwssRecord = false;
2929
bool gLogRotate = false;
3030
ofstream gRecordOfs;
3131
string gRecordFile;
32+
bool gResponsePublisherRecord = false;
33+
bool gResponsePublisherLogRotate = false;
34+
ofstream gResponsePublisherRecordOfs;
35+
string gResponsePublisherRecordFile;
3236
/* Global database mutex */
3337
mutex gDbMutex;
3438

cfgmgr/vxlanmgrd.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ bool gSwssRecord = false;
3434
bool gLogRotate = false;
3535
ofstream gRecordOfs;
3636
string gRecordFile;
37+
bool gResponsePublisherRecord = false;
38+
bool gResponsePublisherLogRotate = false;
39+
ofstream gResponsePublisherRecordOfs;
40+
string gResponsePublisherRecordFile;
3741
/* Global database mutex */
3842
mutex gDbMutex;
3943
MacAddress gMacAddress;

orchagent/Makefile.am

+2-1
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ orchagent_SOURCES = \
8989
macsecorch.cpp \
9090
lagid.cpp \
9191
bfdorch.cpp \
92-
srv6orch.cpp
92+
srv6orch.cpp \
93+
response_publisher.cpp
9394

9495
orchagent_SOURCES += flex_counter/flex_counter_manager.cpp flex_counter/flex_counter_stat_manager.cpp
9596
orchagent_SOURCES += debug_counter/debug_counter.cpp debug_counter/drop_counter.cpp

orchagent/main.cpp

+47-20
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ extern "C" {
1313
#include <getopt.h>
1414
#include <unistd.h>
1515
#include <inttypes.h>
16+
#include <sstream>
17+
#include <stdexcept>
1618
#include <stdlib.h>
1719
#include <string.h>
1820

@@ -54,8 +56,10 @@ int gBatchSize = DEFAULT_BATCH_SIZE;
5456

5557
bool gSairedisRecord = true;
5658
bool gSwssRecord = true;
59+
bool gResponsePublisherRecord = false;
5760
bool gLogRotate = false;
5861
bool gSaiRedisLogRotate = false;
62+
bool gResponsePublisherLogRotate = false;
5963
bool gSyncMode = false;
6064
sai_redis_communication_mode_t gRedisCommunicationMode = SAI_REDIS_COMMUNICATION_MODE_REDIS_ASYNC;
6165
string gAsicInstance;
@@ -64,6 +68,12 @@ extern bool gIsNatSupported;
6468

6569
ofstream gRecordOfs;
6670
string gRecordFile;
71+
ofstream gResponsePublisherRecordOfs;
72+
string gResponsePublisherRecordFile;
73+
74+
#define SAIREDIS_RECORD_ENABLE 0x1
75+
#define SWSS_RECORD_ENABLE (0x1 << 1)
76+
#define RESPONSE_PUBLISHER_RECORD_ENABLE (0x1 << 2)
6777

6878
string gMySwitchType = "";
6979
int32_t gVoqMySwitchId = -1;
@@ -77,10 +87,12 @@ void usage()
7787
cout << "usage: orchagent [-h] [-r record_type] [-d record_location] [-f swss_rec_filename] [-j sairedis_rec_filename] [-b batch_size] [-m MAC] [-i INST_ID] [-s] [-z mode] [-k bulk_size]" << endl;
7888
cout << " -h: display this message" << endl;
7989
cout << " -r record_type: record orchagent logs with type (default 3)" << endl;
90+
cout << " Bit 0: sairedis.rec, Bit 1: swss.rec, Bit 2: responsepublisher.rec. For example:" << endl;
8091
cout << " 0: do not record logs" << endl;
8192
cout << " 1: record SAI call sequence as sairedis.rec" << endl;
8293
cout << " 2: record SwSS task sequence as swss.rec" << endl;
8394
cout << " 3: enable both above two records" << endl;
95+
cout << " 7: enable sairedis.rec, swss.rec and responsepublisher.rec" << endl;
8496
cout << " -d record_location: set record logs folder location (default .)" << endl;
8597
cout << " -b batch_size: set consumer table pop operation batch size (default 128)" << endl;
8698
cout << " -m MAC: set switch MAC address" << endl;
@@ -99,6 +111,7 @@ void sighup_handler(int signo)
99111
*/
100112
gLogRotate = true;
101113
gSaiRedisLogRotate = true;
114+
gResponsePublisherLogRotate = true;
102115
}
103116

104117
void syncd_apply_view()
@@ -115,7 +128,7 @@ void syncd_apply_view()
115128
{
116129
SWSS_LOG_ERROR("Failed to notify syncd APPLY_VIEW %d", status);
117130
exit(EXIT_FAILURE);
118-
}
131+
}
119132
}
120133

121134
/*
@@ -321,6 +334,8 @@ int main(int argc, char **argv)
321334
string record_location = ".";
322335
string swss_rec_filename = "swss.rec";
323336
string sairedis_rec_filename = "sairedis.rec";
337+
string responsepublisher_rec_filename = "responsepublisher.rec";
338+
int record_type = 3; // Only swss and sairedis recordings enabled by default.
324339

325340
while ((opt = getopt(argc, argv, "b:m:r:f:j:d:i:hsz:k:")) != -1)
326341
{
@@ -346,24 +361,10 @@ int main(int argc, char **argv)
346361
gMacAddress = MacAddress(optarg);
347362
break;
348363
case 'r':
349-
if (!strcmp(optarg, "0"))
350-
{
351-
gSairedisRecord = false;
352-
gSwssRecord = false;
353-
}
354-
else if (!strcmp(optarg, "1"))
355-
{
356-
gSwssRecord = false;
357-
}
358-
else if (!strcmp(optarg, "2"))
359-
{
360-
gSairedisRecord = false;
361-
}
362-
else if (!strcmp(optarg, "3"))
363-
{
364-
continue; /* default behavior */
365-
}
366-
else
364+
// Disable all recordings if atoi() fails i.e. returns 0 due to
365+
// invalid command line argument.
366+
record_type = atoi(optarg);
367+
if (record_type < 0 || record_type > 7)
367368
{
368369
usage();
369370
exit(EXIT_FAILURE);
@@ -434,6 +435,14 @@ int main(int argc, char **argv)
434435
attr.value.ptr = (void *)on_fdb_event;
435436
attrs.push_back(attr);
436437

438+
// Initialize recording parameters.
439+
gSairedisRecord =
440+
(record_type & SAIREDIS_RECORD_ENABLE) == SAIREDIS_RECORD_ENABLE;
441+
gSwssRecord = (record_type & SWSS_RECORD_ENABLE) == SWSS_RECORD_ENABLE;
442+
gResponsePublisherRecord =
443+
(record_type & RESPONSE_PUBLISHER_RECORD_ENABLE) ==
444+
RESPONSE_PUBLISHER_RECORD_ENABLE;
445+
437446
/* Disable/enable SwSS recording */
438447
if (gSwssRecord)
439448
{
@@ -447,6 +456,24 @@ int main(int argc, char **argv)
447456
gRecordOfs << getTimestamp() << "|recording started" << endl;
448457
}
449458

459+
// Disable/Enable response publisher recording.
460+
if (gResponsePublisherRecord)
461+
{
462+
gResponsePublisherRecordFile = record_location + "/" + responsepublisher_rec_filename;
463+
gResponsePublisherRecordOfs.open(gResponsePublisherRecordFile, std::ofstream::out | std::ofstream::app);
464+
if (!gResponsePublisherRecordOfs.is_open())
465+
{
466+
SWSS_LOG_ERROR("Failed to open Response Publisher recording file %s",
467+
gResponsePublisherRecordFile.c_str());
468+
gResponsePublisherRecord = false;
469+
}
470+
else
471+
{
472+
gResponsePublisherRecordOfs << getTimestamp() << "|recording started"
473+
<< endl;
474+
}
475+
}
476+
450477
attr.id = SAI_SWITCH_ATTR_PORT_STATE_CHANGE_NOTIFY;
451478
attr.value.ptr = (void *)on_port_state_change;
452479
attrs.push_back(attr);
@@ -644,7 +671,7 @@ int main(int argc, char **argv)
644671
}
645672
else
646673
{
647-
orchDaemon = make_shared<FabricOrchDaemon>(&appl_db, &config_db, &state_db, chassis_app_db.get());
674+
orchDaemon = make_shared<FabricOrchDaemon>(&appl_db, &config_db, &state_db, chassis_app_db.get());
648675
}
649676

650677
if (!orchDaemon->init())

0 commit comments

Comments
 (0)