<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:DengXian;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@DengXian";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p
        {mso-style-priority:99;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;
        color:black;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";
        color:black;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";
        color:black;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi Salvatore</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>How about running two NFD instances?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-family:"Courier New"'>ndnpeek    ndnpoke<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>   |          |<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'> NFD1       NFD2<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>   |          |<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'> veth1      veth2<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>   |          |<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>   your program<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>You can have two NFD instances running on the same host by specifying different nfd.conf files on “--config” parameter. Each nfd.conf should have distinct Unix socket path and port numbers. If you need to edit nfd.conf in a script, check out <a href="https://github.com/NDN-Routing/infoedit">infoedit</a>.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Then, have ndnpeek and ndnpoke connect to different NFD instances by specifying different client.conf, like:</p><p class=MsoNormal><span style='font-family:"Courier New"'>mkdir -p /tmp/ndnpoke-home/.ndn<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>echo transport=unix:/var/run/nfd1.sock > /tmp/ndnpoke-home/.ndn/client.conf<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>HOME=/tmp/ndnpoke-home ndnpoke /A<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>mkdir -p /tmp/ndnpeek-home/.ndn<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>echo transport=unix:/var/run/nfd2.sock > /tmp/ndnpeek-home/.ndn/client.conf<o:p></o:p></span></p><p class=MsoNormal><span style='font-family:"Courier New"'>HOME=/tmp/ndnpeek-home ndnpeek /A<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman",serif'>Yours, Junxiao<o:p></o:p></span></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;border:none;padding:0in'><br><b>From: </b><a href="mailto:salvatore.signorello@uni.lu">Salvatore Signorello</a><br><b>Sent: </b>Wednesday, January 6, 2016 05:52<br><b>To: </b><a href="mailto:shijunxiao@email.arizona.edu">Junxiao Shi</a><br><b>Cc: </b><a href="mailto:nfd-dev@lists.cs.ucla.edu"><nfd-dev@lists.cs.ucla.edu></a><br><b>Subject: </b>Re: [Nfd-dev] generatation of NDN-like packets with Scapy</p></div><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman",serif'><o:p> </o:p></span></p><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:12.0pt;font-family:"Times New Roman",serif'>Hi Junxiao,<br><br>thanks again, but I forgot to tell that changing that piece of software is not worth doing (long and complex process), I must use it as it is. This brings us back to my original dilemma of writing an application that sends ndn packets to specific network interfaces or simply writing a module for a packet generator? How difficult would be to do the former?<br><br><br>Best,<br>Salvatore</span><span style='font-size:12.0pt;font-family:"Times New Roman",serif'><o:p></o:p></span></p><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal><span style='font-size:12.0pt;font-family:"Times New Roman",serif'>On Jan 6, 2016 01:40, "Salvatore Signorello" <<a href="mailto:salvatore.signorello@uni.lu">salvatore.signorello@uni.lu</a>> wrote:<o:p></o:p></span></p><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in'><div><p class=MsoNormal style='margin-bottom:12.0pt'><span style='font-size:12.0pt;font-family:"Times New Roman",serif'>Hi Junxiao,<br><br>thanks for your prompt feedback, below follows a short description of my quick&dirty "set-up" and then few more comments in-line:<br><br>Scenario in mind (caveat: I don't know if it makes sense, but that's what I need; so if you think of an alternative, as I guess you already did according to your previous suggestion, please feel free of throwing away what follows and propose sth else)<br>-----------------------<br>On the same machine where nfd is running, I use the ndnpeedk to generate an Interest with prefixA. My nfd has a rule that forwards Interests with prefixA out to a specific veth1. On that veth1 I have some software running that processes the Interest and then forwards the same Interest back to the nfd through a different interface, veth2. In the meantime I've started a local producer (ndnpoke -w) for that content that correctly receives the Interest(the 2nd one received on veth and not the 1st one issued by ndnpeek) and answers back with the Data. The nfd forwards the data back to veth2, the software processes it and then forwards it to nfd through veth1. Nfd forwards the data back to ndnpeek.<br><br>Why am I doing this? I need two applications, one consumer and one producer, like ndnpeek and ndnpoke that generate ndn packets. <br><br>The problems that I would like to avoid are the following:<br>- the pit record for the Interest issued by ndnpeek risks to  drop the Interest received on veth2 [SOLVED] I change the nonce when I process the Interest for the 2nd time.<br>- ndnpeek and ndnpoke cannot be started simultaneously, otherwise ndnpoke will provide the Data to ndnpeek in one step<br>- if the 1st Interest creates a PIT record, how to avoid that nfd will use it when receiving Data from ndnpoke? The daemon will have a PIT record like the following<br>        "prefixA/content ---- facex(local to ndnpeek), facey(to veth2)"<br>    and it should choose only facey<br>    <br>Quick and dirty workaround<br>-----------------------------------------<br>By now I simulate the scenario above in the following way:<br>1. Starting nfd and registering prefixA to veth1 with the nfdc cmd<br>2. Issuing an Interest for prefixA/content with ndnpeek<br>3. The Interest is correctly forwarded to my software through veth1 where I hold it for a while<br>4. After ndnpeek timeout, I unregister prefixA from nfd<br>5. Starting ndnpoke for prefixA/content with a long waiting time <br>6. Unpausing my software that forwards the original Interest to nfd through veth2<br>7. nfd forwards it to ndnpoke and I get the data back from veth2<br>8. holding again the Data<br>9. register prefixA again like done in 2<br>10. issuing a new Interest with ndnpeek<br>11. unpausing the Data to forwarded it back first to nfd and then to ndnpeek<br><br>Crazy, isn't it?<o:p></o:p></span></p></div></blockquote></div></blockquote></div></body></html>