fixes to npc (NormPrecoder) and updated its documentation. Include 'auto' block sizing' feature

pull/91/head
bebopagogo 2025-01-26 20:26:49 -05:00
parent 7a6c09ae17
commit b7b252fd55
3 changed files with 28 additions and 34 deletions

Binary file not shown.

View File

@ -35,12 +35,12 @@
content.</para>
<para>The Naval Research Laboratory (NRL) reference implementation of the
NORM protocol includes support for 8-bit (and very soon 16-bit)
Reed-Solomon FEC encoding with additional support for other coding
algorithms (e.g., Low-Density Parity Check (LDPC)) planned for the future.
The NORM specification allows for different FEC algorithms to be applied
within the protocol. The current Reed-Solomon NORM FEC algorithms in the
NRL implementation are limited to modest code block sizes (With 16-bit
NORM protocol includes support for 8-bit and 16-bit Reed-Solomon FEC
encoding with additional support for other coding algorithms (e.g.,
Low-Density Parity Check (LDPC)) planned for the future. The NORM
specification allows for different FEC algorithms to be applied within the
protocol. The current Reed-Solomon NORM FEC algorithms in the NRL
implementation are limited to modest code block sizes (With 16-bit
Reed-Solomon coding, larger block sizes will be allowed but very high data
rates may not be possible). For channels with random errors, the current
NORM FEC codecs are often adequate as there is flexibility in how the
@ -59,17 +59,10 @@
sizes).</para>
<para>The NORM protocol is described in Internet Engineering Task Force
(IETF) Request For Comments (RFC) RFC 3940 and RFC 3941. These are
experimental RFC standards. These documents have been revised in recent
Internet-Drafts and it should be noted that the Naval Research Laboratory
(NRL) implementation of NORM that is represented here has been updated to
reflect the revised protocol. In addition to this demonstration
application, NRL provides a NORM protocol library with a well-defined API
that it is suitable for application development. Additionally, the NRL
source code distribution supports building the NORM protocol as a
component into <emphasis>ns-2</emphasis> and OPNET network simulation
environments. Refer to the NRL NORM website &lt;<ulink
url="http://cs.itd.nrl.navy.mil/work/norm">http://cs.itd.nrl.navy.mil/work/norm</ulink>&gt;
(IETF) Request For Comments (RFC) RFC 5740 and RFC 5741. NRL provides a
NORM protocol library with a well-defined API that it is suitable for
application development. Refer to the NORM website &lt;<ulink
url="https://github.com/USNavalResearchLaboratory/norm">https://github.com/USNavalResearchLaboratory/norm</ulink>&gt;
for these other components as well as up-to-date versions of this
demonstration application and documentation.</para>
@ -203,12 +196,12 @@
<programlisting>npc encode input originalFile.txt</programlisting>
<para>The default npc configuration is XXX.</para>
<para>This will produce and output file named
"<filename>originalFile_txt.npc</filename>" in the current working
directory, The original file can be recovered (decoded) using the
syntax:</para>
directory. The default <command>npc</command> configuration is
"<command>auto 100.0</command>" providing 100% parity content which makes
the encoded file size roughly double the input file. The original file can
be recovered (decoded) using the syntax:</para>
<programlisting>npc decode input originalFile_txt.npc</programlisting>
@ -216,8 +209,8 @@
named "<filename>originalFile.txt"</filename> in the current working
directory. (The file name information was stored in first "meta data"
segment of the ".npc" file). This default naming convention can be
overridden by using the npc "output" option. For example, the
syntax:</para>
overridden by using the <command>npc</command> "<option>output</option>"
command. For example, the syntax:</para>
<programlisting>npc decode input originalFile_txt.npc output file.txt</programlisting>
@ -247,13 +240,13 @@
commands included to support transport of <command>npc</command> encoded
files. The distinction here is that a file that _fails_ NORM transport
might still be successfully decoded with <command>npc</command>. There
are two receiver-side norm demo application options that apply
here:</para>
are two receiver-side <command>norm</command> demo application options
that apply here:</para>
<orderedlist>
<listitem>
<para>The "<option>saveAborts</option>" command causes
<emphasis>norm</emphasis> to not delete (and attempt to postprocess)
<command>norm</command> to not delete (and attempt to postprocess)
"aborted" files (files that failed reliable NORM transport).</para>
</listitem>
@ -323,8 +316,8 @@
</option><parameter>&lt;numData&gt;</parameter></para></entry>
<entry><para>Specify the number of source data segments (packets)
per npc FEC coding block. (Default block sizing is
auto)</para></entry>
per <command>npc</command> FEC coding block. (Default block sizing
is auto)</para></entry>
</row>
<row>
@ -332,7 +325,7 @@
</option><parameter>&lt;numParity&gt;</parameter></para></entry>
<entry><para>Specify the number of FEC parity segments (packets)
added per npc FEC coding block. (Default is 2
added per <command>npc</command> FEC coding block. (Default is 2
segments).</para></entry>
</row>
@ -345,10 +338,10 @@
percentage of FEC parity segments to include per block. The "auto"
block sizing sets the block size as large as possible to treat the
entire files as one logical FEC block to maximize FEC performance.
The maximum possible block size currently supported by npc are
blocks where (numData + numParity) is less than or equal to 65536.
The maximum buffer size can be limited by using the
<option>bmax</option> command.</para></entry>
The maximum possible block size currently supported by
<command>npc</command> are blocks where (numData + numParity) is
less than or equal to 65536. The maximum buffer size can be
limited by using the <option>bmax</option> command.</para></entry>
</row>
<row>

View File

@ -112,7 +112,7 @@ const ProtoFile::Offset NormPrecodeApp::SEGMENT_MAX = 8192;
NormPrecodeApp::NormPrecodeApp()
: encode(true), segment_size(1024), num_data(196), num_parity(4),
parity_fraction(-1.0), b_max(65536),
parity_fraction(100.0), b_max(65536),
i_max(1000), i_buffer_max(1500000000)
{
in_file_path[0] = '\0';
@ -222,6 +222,7 @@ bool NormPrecodeApp::OnCommand(const char* cmd, const char* val)
return false;
}
num_data = numData;
parity_fraction = -1.0; // explicit block size overrides "auto" mode
}
else if (!strncmp("parity", cmd, len))
{