fixes to npc (NormPrecoder) and updated its documentation. Include 'auto' block sizing' feature
parent
7a6c09ae17
commit
b7b252fd55
Binary file not shown.
|
|
@ -35,12 +35,12 @@
|
||||||
content.</para>
|
content.</para>
|
||||||
|
|
||||||
<para>The Naval Research Laboratory (NRL) reference implementation of the
|
<para>The Naval Research Laboratory (NRL) reference implementation of the
|
||||||
NORM protocol includes support for 8-bit (and very soon 16-bit)
|
NORM protocol includes support for 8-bit and 16-bit Reed-Solomon FEC
|
||||||
Reed-Solomon FEC encoding with additional support for other coding
|
encoding with additional support for other coding algorithms (e.g.,
|
||||||
algorithms (e.g., Low-Density Parity Check (LDPC)) planned for the future.
|
Low-Density Parity Check (LDPC)) planned for the future. The NORM
|
||||||
The NORM specification allows for different FEC algorithms to be applied
|
specification allows for different FEC algorithms to be applied within the
|
||||||
within the protocol. The current Reed-Solomon NORM FEC algorithms in the
|
protocol. The current Reed-Solomon NORM FEC algorithms in the NRL
|
||||||
NRL implementation are limited to modest code block sizes (With 16-bit
|
implementation are limited to modest code block sizes (With 16-bit
|
||||||
Reed-Solomon coding, larger block sizes will be allowed but very high data
|
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
|
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
|
NORM FEC codecs are often adequate as there is flexibility in how the
|
||||||
|
|
@ -59,17 +59,10 @@
|
||||||
sizes).</para>
|
sizes).</para>
|
||||||
|
|
||||||
<para>The NORM protocol is described in Internet Engineering Task Force
|
<para>The NORM protocol is described in Internet Engineering Task Force
|
||||||
(IETF) Request For Comments (RFC) RFC 3940 and RFC 3941. These are
|
(IETF) Request For Comments (RFC) RFC 5740 and RFC 5741. NRL provides a
|
||||||
experimental RFC standards. These documents have been revised in recent
|
NORM protocol library with a well-defined API that it is suitable for
|
||||||
Internet-Drafts and it should be noted that the Naval Research Laboratory
|
application development. Refer to the NORM website <<ulink
|
||||||
(NRL) implementation of NORM that is represented here has been updated to
|
url="https://github.com/USNavalResearchLaboratory/norm">https://github.com/USNavalResearchLaboratory/norm</ulink>>
|
||||||
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 <<ulink
|
|
||||||
url="http://cs.itd.nrl.navy.mil/work/norm">http://cs.itd.nrl.navy.mil/work/norm</ulink>>
|
|
||||||
for these other components as well as up-to-date versions of this
|
for these other components as well as up-to-date versions of this
|
||||||
demonstration application and documentation.</para>
|
demonstration application and documentation.</para>
|
||||||
|
|
||||||
|
|
@ -203,12 +196,12 @@
|
||||||
|
|
||||||
<programlisting>npc encode input originalFile.txt</programlisting>
|
<programlisting>npc encode input originalFile.txt</programlisting>
|
||||||
|
|
||||||
<para>The default npc configuration is XXX.</para>
|
|
||||||
|
|
||||||
<para>This will produce and output file named
|
<para>This will produce and output file named
|
||||||
"<filename>originalFile_txt.npc</filename>" in the current working
|
"<filename>originalFile_txt.npc</filename>" in the current working
|
||||||
directory, The original file can be recovered (decoded) using the
|
directory. The default <command>npc</command> configuration is
|
||||||
syntax:</para>
|
"<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>
|
<programlisting>npc decode input originalFile_txt.npc</programlisting>
|
||||||
|
|
||||||
|
|
@ -216,8 +209,8 @@
|
||||||
named "<filename>originalFile.txt"</filename> in the current working
|
named "<filename>originalFile.txt"</filename> in the current working
|
||||||
directory. (The file name information was stored in first "meta data"
|
directory. (The file name information was stored in first "meta data"
|
||||||
segment of the ".npc" file). This default naming convention can be
|
segment of the ".npc" file). This default naming convention can be
|
||||||
overridden by using the npc "output" option. For example, the
|
overridden by using the <command>npc</command> "<option>output</option>"
|
||||||
syntax:</para>
|
command. For example, the syntax:</para>
|
||||||
|
|
||||||
<programlisting>npc decode input originalFile_txt.npc output file.txt</programlisting>
|
<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
|
commands included to support transport of <command>npc</command> encoded
|
||||||
files. The distinction here is that a file that _fails_ NORM transport
|
files. The distinction here is that a file that _fails_ NORM transport
|
||||||
might still be successfully decoded with <command>npc</command>. There
|
might still be successfully decoded with <command>npc</command>. There
|
||||||
are two receiver-side norm demo application options that apply
|
are two receiver-side <command>norm</command> demo application options
|
||||||
here:</para>
|
that apply here:</para>
|
||||||
|
|
||||||
<orderedlist>
|
<orderedlist>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>The "<option>saveAborts</option>" command causes
|
<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>
|
"aborted" files (files that failed reliable NORM transport).</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
|
|
||||||
|
|
@ -323,8 +316,8 @@
|
||||||
</option><parameter><numData></parameter></para></entry>
|
</option><parameter><numData></parameter></para></entry>
|
||||||
|
|
||||||
<entry><para>Specify the number of source data segments (packets)
|
<entry><para>Specify the number of source data segments (packets)
|
||||||
per npc FEC coding block. (Default block sizing is
|
per <command>npc</command> FEC coding block. (Default block sizing
|
||||||
auto)</para></entry>
|
is auto)</para></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
|
|
@ -332,7 +325,7 @@
|
||||||
</option><parameter><numParity></parameter></para></entry>
|
</option><parameter><numParity></parameter></para></entry>
|
||||||
|
|
||||||
<entry><para>Specify the number of FEC parity segments (packets)
|
<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>
|
segments).</para></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
|
|
@ -345,10 +338,10 @@
|
||||||
percentage of FEC parity segments to include per block. The "auto"
|
percentage of FEC parity segments to include per block. The "auto"
|
||||||
block sizing sets the block size as large as possible to treat the
|
block sizing sets the block size as large as possible to treat the
|
||||||
entire files as one logical FEC block to maximize FEC performance.
|
entire files as one logical FEC block to maximize FEC performance.
|
||||||
The maximum possible block size currently supported by npc are
|
The maximum possible block size currently supported by
|
||||||
blocks where (numData + numParity) is less than or equal to 65536.
|
<command>npc</command> are blocks where (numData + numParity) is
|
||||||
The maximum buffer size can be limited by using the
|
less than or equal to 65536. The maximum buffer size can be
|
||||||
<option>bmax</option> command.</para></entry>
|
limited by using the <option>bmax</option> command.</para></entry>
|
||||||
</row>
|
</row>
|
||||||
|
|
||||||
<row>
|
<row>
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ const ProtoFile::Offset NormPrecodeApp::SEGMENT_MAX = 8192;
|
||||||
|
|
||||||
NormPrecodeApp::NormPrecodeApp()
|
NormPrecodeApp::NormPrecodeApp()
|
||||||
: encode(true), segment_size(1024), num_data(196), num_parity(4),
|
: 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)
|
i_max(1000), i_buffer_max(1500000000)
|
||||||
{
|
{
|
||||||
in_file_path[0] = '\0';
|
in_file_path[0] = '\0';
|
||||||
|
|
@ -222,6 +222,7 @@ bool NormPrecodeApp::OnCommand(const char* cmd, const char* val)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
num_data = numData;
|
num_data = numData;
|
||||||
|
parity_fraction = -1.0; // explicit block size overrides "auto" mode
|
||||||
}
|
}
|
||||||
else if (!strncmp("parity", cmd, len))
|
else if (!strncmp("parity", cmd, len))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue