From bd945f673e0b2871debae5a951afd7de854d19f3 Mon Sep 17 00:00:00 2001 From: Hua Liu <58683130+liuh-80@users.noreply.github.com> Date: Thu, 24 Oct 2024 08:42:47 +0800 Subject: [PATCH] Add mgmt VRF support. (#3299) Add mgmt VRF support. #### Why I did it Fix following issue: https://github.com/sonic-net/sonic-buildimage/issues/19638 ### How I did it Add VRF parameter and bind ZMQ to VRF. #### How to verify it Pass all UT. Manually verify issue fixed. ### Description for the changelog Add mgmt VRF support. --- orchagent/main.cpp | 16 ++++++++++++---- tests/test_zmq.py | 17 +++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/orchagent/main.cpp b/orchagent/main.cpp index 556bb70892..d50508f6ce 100644 --- a/orchagent/main.cpp +++ b/orchagent/main.cpp @@ -73,7 +73,7 @@ uint32_t create_switch_timeout = 0; void usage() { - 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] [-q zmq_server_address] [-c mode] [-t create_switch_timeout]" << endl; + 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] [-q zmq_server_address] [-c mode] [-t create_switch_timeout] [-v VRF]" << endl; cout << " -h: display this message" << endl; cout << " -r record_type: record orchagent logs with type (default 3)" << endl; cout << " Bit 0: sairedis.rec, Bit 1: swss.rec, Bit 2: responsepublisher.rec. For example:" << endl; @@ -94,6 +94,7 @@ void usage() cout << " -q zmq_server_address: ZMQ server address (default disable ZMQ)" << endl; cout << " -c counter mode (traditional|asic_db), default: asic_db" << endl; cout << " -t Override create switch timeout, in sec" << endl; + cout << " -v vrf: VRF name (default empty)" << endl; } void sighup_handler(int signo) @@ -344,11 +345,12 @@ int main(int argc, char **argv) string swss_rec_filename = Recorder::SWSS_FNAME; string sairedis_rec_filename = Recorder::SAIREDIS_FNAME; string zmq_server_address = "tcp://127.0.0.1:" + to_string(ORCH_ZMQ_PORT); + string vrf; bool enable_zmq = false; string responsepublisher_rec_filename = Recorder::RESPPUB_FNAME; int record_type = 3; // Only swss and sairedis recordings enabled by default. - while ((opt = getopt(argc, argv, "b:m:r:f:j:d:i:hsz:k:q:c:t:")) != -1) + while ((opt = getopt(argc, argv, "b:m:r:f:j:d:i:hsz:k:q:c:t:v:")) != -1) { switch (opt) { @@ -442,6 +444,12 @@ int main(int argc, char **argv) case 't': create_switch_timeout = atoi(optarg); break; + case 'v': + if (optarg) + { + vrf = optarg; + } + break; default: /* '?' */ exit(EXIT_FAILURE); } @@ -486,8 +494,8 @@ int main(int argc, char **argv) shared_ptr zmq_server = nullptr; if (enable_zmq) { - SWSS_LOG_NOTICE("Instantiate ZMQ server : %s", zmq_server_address.c_str()); - zmq_server = make_shared(zmq_server_address.c_str()); + SWSS_LOG_NOTICE("Instantiate ZMQ server : %s, %s", zmq_server_address.c_str(), vrf.c_str()); + zmq_server = make_shared(zmq_server_address.c_str(), vrf.c_str()); } else { diff --git a/tests/test_zmq.py b/tests/test_zmq.py index 4894df0751..0f7e5359f3 100644 --- a/tests/test_zmq.py +++ b/tests/test_zmq.py @@ -103,3 +103,20 @@ def test_appliance(self, dvs): for fv in fvs.items(): if fv[0] == "SAI_VIP_ENTRY_ATTR_ACTION": assert fv[1] == "SAI_VIP_ENTRY_ACTION_ACCEPT" + + def test_vrf(self, dvs): + # Improve test code coverage, change orchagent to use VRF + dvs.runcmd("cp /usr/bin/orchagent.sh /usr/bin/orchagent.sh_vrf_ut_backup") + dvs.runcmd("sed -i.bak 's/\/usr\/bin\/orchagent /\/usr\/bin\/orchagent -v mgmt /g' /usr/bin/orchagent.sh") + dvs.stop_swss() + dvs.start_swss() + + # wait orchagent start + time.sleep(3) + process_statue = dvs.runcmd("ps -ef") + zmq_logger.debug("Process status: {}".format(process_statue)) + + # revert change + dvs.runcmd("cp /usr/bin/orchagent.sh_vrf_ut_backup /usr/bin/orchagent.sh") + dvs.stop_swss() + dvs.start_swss()