<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Dear members,</p>
<p>I am trying to understand how NACK packets look like in the
current NDN codebase. I am aware that the NACK functionality has
been extensively debated over time among this community, but I
have only partially followed this thread, so please bear with me
if I am missing any important point I should know. Your guidance
will be very much appreciated.<br>
</p>
<p><br>
</p>
<p>I am not sure whether that exact difference still holds or not,
but in my mind I am following the difference between
application(producer)-level NACK and forwarding-NACK which I have
learned from the "To NACK or not to NACK?" paper of Compagno et
al. And, conceptually that difference seems to hold in the NDN too
since I could find both application-level NACKs and network NACKs.<br>
</p>
<p><br>
</p>
<p> With regard to the former NACK type, according to the latest NDN
packet specification (<a moz-do-not-send="true"
href="https://named-data.net/doc/NDN-packet-spec/current/data.html#contenttype">0.3</a>)
and to this <a
href="https://redmine.named-data.net/projects/ndn-tlv/wiki/ContentType">link</a>
from the project specifications page on the NDN official website,
application-level NACKs are carried within Data packets with a
specific content type. The specification, however, does not
specify yet how exactly the NACK field/payload would look like.
More specifically, please see my question (a) below.</p>
<p><br>
</p>
<p>With regard to the latter NACK type, network NACKs are generated
through a Nack header field in NDNLPv2 packets carrying interests.
At first, by digging into the ndn-cxx 0.7.0 library (files
nack-header.cpp/hpp) it could find out that the network-level NACK
header is currently encoded with a single TLV, where the Value
contains a NACK code. But, afterwards, checking the NDNLPv2 <a
moz-do-not-send="true"
href="https://redmine.named-data.net/projects/nfd/wiki/NDNLPv2">spec</a>
it looks like that header is made of two nested TLVs instead,
where to specify a nack-type and a nack-reason. I am wondering
what's the difference between these two and what would a nack-type
mean a that level.<br>
</p>
<p><br>
</p>
<p>The above being said, I would have the two following questions:<br>
</p>
<p>(a) Is an application-level NACK supposed to carry an empty
payload in NDN? In particular I am wondering if an
application-level NACK could contain additional arbitrary data.<br>
</p>
<p>(b) any initial thoughts/considerations about what NDN routers
should/shouldn't do with application-level NACKs? Here, Is there
any reference I should look at?<br>
</p>
<p><br>
</p>
<p>Could you also please confirm that there are no amendments to be
done to the above discussion when talking about the latest NDNsim
version?<br>
</p>
<p><br>
</p>
<p>Thank you very much for your time,</p>
<p>regards,</p>
<p>Salvatore Signorello<br>
</p>
</body>
</html>