<div dir="ltr"><div dir="ltr">Hi Sung<div><br></div><div>I had a quick look at your codebase, and I found a few strange things.</div><div>I'll only mention one below.</div><div><br></div><div>In mw-nfd/daemon/mw-nfd/mw-nfd-global.cpp file <font face="monospace">emitMwNfdcCommand </font>function contains the following code:</div><div><a href="https://github.com/etri/mw-nfd/blob/44fd00a55b1a80595c5e677f74762334a25d9a39/daemon/mw-nfd/mw-nfd-global.cpp#L127" target="_blank">https://github.com/etri/mw-nfd/blob/44fd00a55b1a80595c5e677f74762334a25d9a39/daemon/mw-nfd/mw-nfd-global.cpp#L127</a><br></div><div><font face="monospace">char buf[MW_NFD_CMD_BUF_SIZE]={0,};<br>mw_nfdc_ptr nfdc = (mw_nfdc_ptr)buf;<br>struct sockaddr_in worker, their;<br>auto params = make_shared<ndn::nfd::ControlParameters>(parameters);<br><br>for (i = 0; i < g_forwardingWorkers; i++) {<br>  // omitted code to assign 'worker' address<br><br>  nfdc->mgr = mgr;<br>  nfdc->verb = verb;<br>  nfdc->ret = MW_NFDC_CMD_OK;<br>  nfdc->netName = netName;<br>  nfdc->parameters = params;<br><br>  sendto(g_nfdcSocket, buf, sizeof(buf), 0, (struct sockaddr*)&worker, addr_len);<br>  setCommandRx(i, true);<br><br>  numbytes = recvfrom(g_nfdcSocket, buf, sizeof(buf), 0, (struct sockaddr*)&their, &addr_len);<br>  if (numbytes) {<br>    retval += nfdc->retval;<br>    ret = nfdc->ret;<br>  }<br>  setCommandRx(i, false);<br>}</font><br></div><div><br></div><div>The relevant data structure is:</div><div><font face="monospace">typedef struct mw_nfdc_cmd {<br>  int32_t mgr;<br>  int32_t verb;<br>  int32_t ret;<br>  size_t retval;<br>  bool netName;<br>  std::shared_ptr<ndn::Interest> interest;<br>  std::shared_ptr<ndn::nfd::ControlParameters> parameters;<br>} mw_nfdc, *mw_nfdc_ptr;</font><br></div><div><br></div><div>Effectively, you are sending the memory representation of <font face="monospace">std::shared_ptr<ndn::nfd::ControlParameters></font> instance over a UDP socket. I think this can cause undefined behavior.</div><div>I wonder why you chose to send the management command as a UDP packet to the worker thread, instead of sending an encoded command via a pair of message queues?<br></div><div><br></div><div>Also, many unit tests are failing. Please check them.</div><div>You should use AddressSanitizer to ensure there's no memory leak and undefined behavior.</div><div><br></div><div>Yours, Junxiao<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Feb 19, 2021 at 7:03 AM Sung Hyuk Byun via Nfd-dev <<a href="mailto:nfd-dev@lists.cs.ucla.edu" target="_blank">nfd-dev@lists.cs.ucla.edu</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="KO"><div><p class="MsoNormal"><span lang="EN-US">Deal all<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">We are pleased to announce the Multi-Worker NFD (MW-NFD) 0.7.1 which is an high-speed NDN forwarder fully compatible with NFD 0.7.1, and it can be downloaded from <a href="https://github.com/etri/mw-nfd" target="_blank">https://github.com/etri/mw-nfd</a>. <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">MW-NFD has parallel forwarding worker who keeps NFD's forwarding architecture, and can have multiple input threads dedicated to each physical port.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">We had demonstrated MW-NFD's forwarding performance in ACM ICN 2020 with the paper "MW-NFD (Multi-Worker NFD): An NFD-compatible High-speed NDN Forwarder" ( <a href="https://dl.acm.org/doi/10.1145/3405656.3420233" target="_blank">https://dl.acm.org/doi/10.1145/3405656.3420233</a> ) <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">MW-NFD support all management features with nfdc command, and all face types of NFD, except NDN-LP Reliability option in point-to-point faces, which will be supported in future release. <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">It also has additional forwarding enhancement features : dual_cs and pit-token-hash.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">More information can be found at <a href="https://github.com/etri/mw-nfd/blob/main/MW-NFD-CONFIG.md" target="_blank">https://github.com/etri/mw-nfd/blob/main/MW-NFD-CONFIG.md</a> .<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">If you have any questions, comments, or bug reports, please let us know through email or this mailing list. <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Regards, <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US">Sung Hyuk Byun <u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><a href="mailto:shbyun@etri.re.kr" target="_blank">shbyun@etri.re.kr</a> <u></u><u></u></span></p><p class="MsoNormal"><br></p></div></div>
</blockquote></div></div>