draft-ietf-tsvwg-rlc-fec-scheme-00.txt | draft-ietf-tsvwg-rlc-fec-scheme-01.txt | |||
---|---|---|---|---|
TSVWG V. Roca | TSVWG V. Roca | |||
Internet-Draft INRIA | Internet-Draft B. Teibi | |||
Intended status: Standards Track July 17, 2017 | Intended status: Standards Track INRIA | |||
Expires: January 18, 2018 | Expires: April 29, 2018 October 26, 2017 | |||
Sliding Window Random Linear Code (RLC) Forward Erasure Correction (FEC) | Sliding Window Random Linear Code (RLC) Forward Erasure Correction (FEC) | |||
Scheme for FECFRAME | Schemes for FECFRAME | |||
draft-ietf-tsvwg-rlc-fec-scheme-00 | draft-ietf-tsvwg-rlc-fec-scheme-01 | |||
Abstract | Abstract | |||
This document describes a fully-specified FEC scheme for the Sliding | This document describes two fully-specified FEC Schemes for Sliding | |||
Window Random Linear Codes (RLC) over GF(2^^m), where m equals 1 | Window Random Linear Codes (RLC), one for RLC over GF(2) (binary | |||
(binary case), 4 or 8, that can be used to protect arbitrary media | case), a second one for RLC over GF(2^^8), both of them with the | |||
streams along the lines defined by FECFRAME extended to sliding | possibility of controlling the code density. They are meant to | |||
window codes. These sliding window FEC codes rely on an encoding | protect arbitrary media streams along the lines defined by FECFRAME | |||
window that slides over the source symbols, generating new repair | extended to sliding window FEC codes. These sliding window FEC codes | |||
symbols whenever needed. Compared to block FEC codes, these sliding | rely on an encoding window that slides over the source symbols, | |||
window FEC codes offer key advantages with real-time flows in terms | generating new repair symbols whenever needed. Compared to block FEC | |||
of reduced FEC-related latency while often providing improved erasure | codes, these sliding window FEC codes offer key advantages with real- | |||
recovery capabilities. | time flows in terms of reduced FEC-related latency while often | |||
providing improved erasure recovery capabilities. | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on January 18, 2018. | This Internet-Draft will expire on April 29, 2018. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Limits of Block Codes with Real-Time Flows . . . . . . . 3 | 1.1. Limits of Block Codes with Real-Time Flows . . . . . . . 3 | |||
1.2. Lower Latency and Better Protection of Real-Time Flows | 1.2. Lower Latency and Better Protection of Real-Time Flows | |||
with the Sliding Window RLC Codes . . . . . . . . . . . . 3 | with the Sliding Window RLC Codes . . . . . . . . . . . . 4 | |||
1.3. Small Transmission Overheads with the Sliding Window RLC | 1.3. Small Transmission Overheads with the Sliding Window RLC | |||
FEC Scheme . . . . . . . . . . . . . . . . . . . . . . . 4 | FEC Scheme . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
1.4. Document Organization . . . . . . . . . . . . . . . . . . 5 | 1.4. Document Organization . . . . . . . . . . . . . . . . . . 5 | |||
2. Definitions and Abbreviations . . . . . . . . . . . . . . . . 5 | 2. Definitions and Abbreviations . . . . . . . . . . . . . . . . 6 | |||
3. Procedures . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Procedures . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
3.1. Parameters Derivation . . . . . . . . . . . . . . . . . . 6 | 3.1. Parameters Derivation . . . . . . . . . . . . . . . . . . 6 | |||
3.2. ADU, ADUI and Source Symbols Mappings . . . . . . . . . . 7 | 3.2. ADU, ADUI and Source Symbols Mappings . . . . . . . . . . 8 | |||
3.3. Encoding Window Management . . . . . . . . . . . . . . . 9 | 3.3. Encoding Window Management . . . . . . . . . . . . . . . 9 | |||
3.4. Pseudo-Random Number Generator . . . . . . . . . . . . . 9 | 3.4. Pseudo-Random Number Generator . . . . . . . . . . . . . 10 | |||
3.5. Coding Coefficients Generation Function . . . . . . . . . 10 | 3.5. Coding Coefficients Generation Function . . . . . . . . . 11 | |||
4. Sliding Window RLC FEC Scheme for Arbitrary ADU Flows . . . . 12 | 4. Sliding Window RLC FEC Scheme over GF(2) for Arbitrary ADU | |||
4.1. Formats and Codes . . . . . . . . . . . . . . . . . . . . 12 | Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 | |||
4.1.1. FEC Framework Configuration Information . . . . . . . 12 | 4.1. Formats and Codes . . . . . . . . . . . . . . . . . . . . 13 | |||
4.1.1. FEC Framework Configuration Information . . . . . . . 13 | ||||
4.1.2. Explicit Source FEC Payload ID . . . . . . . . . . . 13 | 4.1.2. Explicit Source FEC Payload ID . . . . . . . . . . . 13 | |||
4.1.3. Repair FEC Payload ID . . . . . . . . . . . . . . . . 13 | 4.1.3. Repair FEC Payload ID . . . . . . . . . . . . . . . . 14 | |||
4.1.4. Additional Procedures . . . . . . . . . . . . . . . . 15 | 4.1.4. Additional Procedures . . . . . . . . . . . . . . . . 14 | |||
5. FEC Code Specification . . . . . . . . . . . . . . . . . . . 15 | 5. Sliding Window RLC FEC Scheme over GF(2^^8) for Arbitrary ADU | |||
5.1. Encoding Side . . . . . . . . . . . . . . . . . . . . . . 15 | Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
5.2. Decoding Side . . . . . . . . . . . . . . . . . . . . . . 16 | 5.1. Formats and Codes . . . . . . . . . . . . . . . . . . . . 14 | |||
6. Implementation Status . . . . . . . . . . . . . . . . . . . . 16 | 5.1.1. FEC Framework Configuration Information . . . . . . . 14 | |||
7. Security Considerations . . . . . . . . . . . . . . . . . . . 17 | 5.1.2. Explicit Source FEC Payload ID . . . . . . . . . . . 15 | |||
7.1. Attacks Against the Data Flow . . . . . . . . . . . . . . 17 | 5.1.3. Repair FEC Payload ID . . . . . . . . . . . . . . . . 16 | |||
7.1.1. Access to Confidential Content . . . . . . . . . . . 17 | 5.1.4. Additional Procedures . . . . . . . . . . . . . . . . 17 | |||
7.1.2. Content Corruption . . . . . . . . . . . . . . . . . 17 | 6. FEC Code Specification . . . . . . . . . . . . . . . . . . . 17 | |||
7.2. Attacks Against the FEC Parameters . . . . . . . . . . . 17 | 6.1. Encoding Side . . . . . . . . . . . . . . . . . . . . . . 17 | |||
7.3. When Several Source Flows are to be Protected Together . 18 | 6.2. Decoding Side . . . . . . . . . . . . . . . . . . . . . . 18 | |||
7.4. Baseline Secure FEC Framework Operation . . . . . . . . . 18 | 7. Implementation Status . . . . . . . . . . . . . . . . . . . . 18 | |||
8. Operations and Management Considerations . . . . . . . . . . 18 | 8. Security Considerations . . . . . . . . . . . . . . . . . . . 19 | |||
8.1. Operational Recommendations: Finite Field Element Size (m | 8.1. Attacks Against the Data Flow . . . . . . . . . . . . . . 19 | |||
Parameter) . . . . . . . . . . . . . . . . . . . . . . . 19 | 8.1.1. Access to Confidential Content . . . . . . . . . . . 19 | |||
9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 19 | 8.1.2. Content Corruption . . . . . . . . . . . . . . . . . 19 | |||
10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 19 | 8.2. Attacks Against the FEC Parameters . . . . . . . . . . . 19 | |||
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 19 | 8.3. When Several Source Flows are to be Protected Together . 20 | |||
11.1. Normative References . . . . . . . . . . . . . . . . . . 19 | 8.4. Baseline Secure FEC Framework Operation . . . . . . . . . 20 | |||
11.2. Informative References . . . . . . . . . . . . . . . . . 20 | 9. Operations and Management Considerations . . . . . . . . . . 20 | |||
9.1. Operational Recommendations: Finite Field GF(2) Versus | ||||
Appendix A. Decoding Beyond Maximum Latency Optimization . . . . 22 | GF(2^^8) . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 22 | 9.2. Operational Recommendations: Coding Coefficients Density | |||
Threshold . . . . . . . . . . . . . . . . . . . . . . . . 21 | ||||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21 | ||||
11. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 22 | ||||
12.1. Normative References . . . . . . . . . . . . . . . . . . 22 | ||||
12.2. Informative References . . . . . . . . . . . . . . . . . 22 | ||||
Appendix A. Decoding Beyond Maximum Latency Optimization . . . . 24 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | ||||
1. Introduction | 1. Introduction | |||
Application-Level Forward Erasure Correction (AL-FEC) codes are a key | Application-Level Forward Erasure Correction (AL-FEC) codes are a key | |||
element of communication systems. They are used to recover from | element of communication systems. They are used to recover from | |||
packet losses (or erasures) during content delivery sessions to a | packet losses (or erasures) during content delivery sessions to a | |||
large number of receivers (multicast/broadcast transmissions). This | large number of receivers (multicast/broadcast transmissions). This | |||
is the case with the FLUTE/ALC protocol [RFC6726] in case of reliable | is the case with the FLUTE/ALC protocol [RFC6726] in case of reliable | |||
file transfers over lossy networks, and the FECFRAME protocol for | file transfers over lossy networks, and the FECFRAME protocol for | |||
reliable continuous media transfers over lossy networks. | reliable continuous media transfers over lossy networks. | |||
skipping to change at page 3, line 44 ¶ | skipping to change at page 4, line 8 ¶ | |||
which there is an incentive to increase the block size) and maximum | which there is an incentive to increase the block size) and maximum | |||
decoding latency (for which there is an incentive to decrease the | decoding latency (for which there is an incentive to decrease the | |||
block size). Therefore, with a multicast/broadcast session, the | block size). Therefore, with a multicast/broadcast session, the | |||
block code is dimensioned by considering the worst communication | block code is dimensioned by considering the worst communication | |||
channel one wants to support, and this choice impacts all receivers, | channel one wants to support, and this choice impacts all receivers, | |||
no matter their individual channel quality. | no matter their individual channel quality. | |||
1.2. Lower Latency and Better Protection of Real-Time Flows with the | 1.2. Lower Latency and Better Protection of Real-Time Flows with the | |||
Sliding Window RLC Codes | Sliding Window RLC Codes | |||
This document introduces a fully-specified FEC scheme that follows a | This document introduces two fully-specified FEC Schemes that follow | |||
totally different approach: the Sliding Window Random Linear Codes | a totally different approach: the Sliding Window Random Linear Codes | |||
(RLC) over GF(2^^m), where m equals 1, 4 or 8. This FEC scheme is | (RLC) over either Finite Field GF(2) or GF(8). These FEC Schemes are | |||
used to protect arbitrary media streams along the lines defined by | used to protect arbitrary media streams along the lines defined by | |||
FECFRAME extended to sliding window codes [fecframe-ext]. This FEC | FECFRAME extended to sliding window FEC codes [fecframe-ext]. These | |||
scheme is extremely efficient for instance with media that feature | FEC Schemes are extremely efficient for instance with media that | |||
real-time constraints sent within a multicast/broadcast session. | feature real-time constraints sent within a multicast/broadcast | |||
session. | ||||
The RLC codes belong to the broad class of sliding window AL-FEC | The RLC codes belong to the broad class of sliding window AL-FEC | |||
codes (A.K.A. convolutional codes). The encoding process is based on | codes (A.K.A. convolutional codes). The encoding process is based on | |||
an encoding window that slides over the set of source packets (in | an encoding window that slides over the set of source packets (in | |||
fact source symbols as we will see in Section 3.2), and which is | fact source symbols as we will see in Section 3.2), and which is | |||
either of fixed or variable size (elastic window). Repair packets | either of fixed or variable size (elastic window). Repair packets | |||
(symbols) are generated and sent on-the-fly, after computing a random | (symbols) are generated and sent on-the-fly, after computing a random | |||
linear combination of the source symbols present in the current | linear combination of the source symbols present in the current | |||
encoding window. | encoding window. | |||
skipping to change at page 4, line 29 ¶ | skipping to change at page 4, line 41 ¶ | |||
validity period (real-time constraints), as well as the associated | validity period (real-time constraints), as well as the associated | |||
equations they are involved in (Appendix A introduces an optimisation | equations they are involved in (Appendix A introduces an optimisation | |||
that extends the time a variable is considered in the system). | that extends the time a variable is considered in the system). | |||
Erased source symbols are then recovered thanks this linear system | Erased source symbols are then recovered thanks this linear system | |||
whenever its rank permits it. | whenever its rank permits it. | |||
With RLC codes (more generally with sliding window codes), the | With RLC codes (more generally with sliding window codes), the | |||
protection of a multicast/broadcast session also needs to be | protection of a multicast/broadcast session also needs to be | |||
dimensioned by considering the worst communication channel one wants | dimensioned by considering the worst communication channel one wants | |||
to support. However the receivers experiencing a good to medium | to support. However the receivers experiencing a good to medium | |||
channel quality observe a FEC-related latency close to zero [Roca16] | channel quality observe a FEC-related latency close to zero [Roca17] | |||
since an isolated erased source packet is quickly recovered by the | since an isolated erased source packet is quickly recovered by the | |||
following repair packet. On the opposite, with a block code, | following repair packet. On the opposite, with a block code, | |||
recovering an isolated erased source packet always requires waiting | recovering an isolated erased source packet always requires waiting | |||
the end of the block for the first repair packet to arrive. | the end of the block for the first repair packet to arrive. | |||
Additionally, under certain situations (e.g., with a limited FEC- | Additionally, under certain situations (e.g., with a limited FEC- | |||
related latency budget and with constant bit rate transmissions after | related latency budget and with constant bit rate transmissions after | |||
FECFRAME encoding), sliding window codes achieve more easily a target | FECFRAME encoding), sliding window codes achieve more easily a target | |||
transmission quality (e.g., measured by the residual loss after FEC | transmission quality (e.g., measured by the residual loss after FEC | |||
decoding) by sending fewer repair packets (i.e., higher code rate) | decoding) by sending fewer repair packets (i.e., higher code rate) | |||
than block codes. | than block codes. | |||
1.3. Small Transmission Overheads with the Sliding Window RLC FEC | 1.3. Small Transmission Overheads with the Sliding Window RLC FEC | |||
Scheme | Scheme | |||
The Sliding Window RLC FEC scheme is designed so as to reduce the | The Sliding Window RLC FEC Scheme is designed so as to reduce the | |||
transmission overhead. The main requirement is that each repair | transmission overhead. The main requirement is that each repair | |||
packet header must enable a receiver to reconstruct the list of | packet header must enable a receiver to reconstruct the list of | |||
source symbols and the associated random coefficients used during the | source symbols and the associated random coefficients used during the | |||
encoding process. In order to minimize packet overhead, the set of | encoding process. In order to minimize packet overhead, the set of | |||
symbols in the encoding window as well as the set of coefficients | symbols in the encoding window as well as the set of coefficients | |||
over GF(2^^m) used in the linear combination are not individually | over GF(2^^m) (where m is 1 or 8, depending on the FEC Scheme) used | |||
listed in the repair packet header. Instead, each FEC repair packet | in the linear combination are not individually listed in the repair | |||
header contains: | packet header. Instead, each FEC repair packet header contains: | |||
o the Encoding Symbol Identifier (ESI) of the first source symbol in | o the Encoding Symbol Identifier (ESI) of the first source symbol in | |||
the encoding window as well as the number of symbols (since this | the encoding window as well as the number of symbols (since this | |||
number may vary with a variable size, elastic window). These two | number may vary with a variable size, elastic window). These two | |||
pieces of information enable each receiver to easily reconstruct | pieces of information enable each receiver to easily reconstruct | |||
the set of source symbols considered during encoding, the only | the set of source symbols considered during encoding, the only | |||
constraint being that there cannot be any gap; | constraint being that there cannot be any gap; | |||
o the seed used by a coding coefficients generation function | o the seed used by a coding coefficients generation function | |||
(Section 3.5). This information enables each receiver to generate | (Section 3.5). This information enables each receiver to generate | |||
the same set of coding coefficients over GF(2^^m) as the sender; | the same set of coding coefficients over GF(2^^m) as the sender; | |||
Therefore, no matter the number of source symbols present in the | Therefore, no matter the number of source symbols present in the | |||
encoding window, each FEC repair packet features a fixed 64-bit long | encoding window, each FEC repair packet features a fixed 64-bit long | |||
header, called Repair FEC Payload ID (Figure 7). Similarly, each FEC | header, called Repair FEC Payload ID (Figure 7). Similarly, each FEC | |||
source packet features a fixed 32-bit long trailer, called Explicit | source packet features a fixed 32-bit long trailer, called Explicit | |||
Source FEC Payload ID (Figure 5), that contains the ESI of the first | Source FEC Payload ID (Figure 5), that contains the ESI of the first | |||
source symbol (see the ADUI and source symbol mapping, Section 3.2). | source symbol (see the ADUI and source symbol mapping, Section 3.2). | |||
1.4. Document Organization | 1.4. Document Organization | |||
This fully-specified FEC scheme follows the structure required by | This fully-specified FEC Scheme follows the structure required by | |||
[RFC6363], section 5.6. "FEC Scheme Requirements", namely: | [RFC6363], section 5.6. "FEC Scheme Requirements", namely: | |||
3. Procedures: This section describes procedures specific to this | 3. Procedures: This section describes procedures specific to this | |||
FEC scheme, namely: RLC parameters derivation, ADUI and source | FEC Scheme, namely: RLC parameters derivation, ADUI and source | |||
symbols mapping, pseudo-random number generator, and coding | symbols mapping, pseudo-random number generator, and coding | |||
coefficients generation function; | coefficients generation function; | |||
4. Formats and Codes: This section defines the Source FEC Payload | 4. Formats and Codes: This section defines the Source FEC Payload | |||
ID and Repair FEC Payload ID formats, carrying the signalling | ID and Repair FEC Payload ID formats, carrying the signalling | |||
information associated to each source or repair symbol. It also | information associated to each source or repair symbol. It also | |||
defines the FEC Framework Configuration Information (FFCI) | defines the FEC Framework Configuration Information (FFCI) | |||
carrying signalling information for the session; | carrying signalling information for the session; | |||
5. FEC Code Specification: Finally this section provides the code | 5. FEC Code Specification: Finally this section provides the code | |||
specification. | specification. | |||
skipping to change at page 5, line 50 ¶ | skipping to change at page 6, line 16 ¶ | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
This document uses the following definitions and abbreviations: | This document uses the following definitions and abbreviations: | |||
GF(q) denotes a finite field (also known as the Galois Field) with q | GF(q) denotes a finite field (also known as the Galois Field) with q | |||
elements. We assume that q = 2^^m in this document | elements. We assume that q = 2^^m in this document | |||
m defines the length of the elements in the finite field, in bits. | m defines the length of the elements in the finite field, in bits. | |||
In this document, m is equal to 1, 4 or 8 | In this document, m is equal to 1 or 8 | |||
ADU: Application Data Unit | ADU: Application Data Unit | |||
ADUI: Application Data Unit Information (includes the F, L and | ADUI: Application Data Unit Information (includes the F, L and | |||
padding fields in addition to the ADU) | padding fields in addition to the ADU) | |||
E: encoding symbol size (i.e., source or repair symbol), assumed | E: encoding symbol size (i.e., source or repair symbol), assumed | |||
fixed (in bytes) | fixed (in bytes) | |||
br_out: transmission bitrate at the output of the FECFRAME sender, | br_out: transmission bitrate at the output of the FECFRAME sender, | |||
assumed fixed (in bits/s) | assumed fixed (in bits/s) | |||
max_lat: maximum FEC-related latency within FECFRAME (in seconds) | max_lat: maximum FEC-related latency within FECFRAME (in seconds) | |||
cr: AL-FEC coding rate | cr: AL-FEC coding rate | |||
plr: packet loss rate on the erasure channel | plr: packet loss rate on the erasure channel | |||
skipping to change at page 6, line 28 ¶ | skipping to change at page 6, line 42 ¶ | |||
symbols) | symbols) | |||
ls_size: linear system current size (or width) at a receiver (in | ls_size: linear system current size (or width) at a receiver (in | |||
symbols) | symbols) | |||
PRNG: pseudo-random number generator | PRNG: pseudo-random number generator | |||
pmms_rand(maxv): PRNG defined in Section 3.4 and used in this | pmms_rand(maxv): PRNG defined in Section 3.4 and used in this | |||
specification, that returns a new random integer in [0; maxv-1] | specification, that returns a new random integer in [0; maxv-1] | |||
3. Procedures | 3. Procedures | |||
This section introduces the procedures that are used by this FEC | This section introduces the procedures that are used by this FEC | |||
scheme. | Scheme. | |||
3.1. Parameters Derivation | 3.1. Parameters Derivation | |||
The Sliding Window RLC FEC Scheme relies on several key internal | The Sliding Window RLC FEC Scheme relies on several key internal | |||
parameters: | parameters: | |||
Maximum FEC-related latency budget, max_lat (in seconds) A source | Maximum FEC-related latency budget, max_lat (in seconds) A source | |||
ADU flow can have real-time constraints, and therefore any | ADU flow can have real-time constraints, and therefore any | |||
FECFRAME related operation must take place within the validity | FECFRAME related operation must take place within the validity | |||
period of each ADU. When there are multiple flows with different | period of each ADU. When there are multiple flows with different | |||
skipping to change at page 10, line 43 ¶ | skipping to change at page 11, line 16 ¶ | |||
implements the Park-Miller "minimal standard" algorithm, defined | implements the Park-Miller "minimal standard" algorithm, defined | |||
above, and that scales the raw value between 0 and maxv-1 inclusive, | above, and that scales the raw value between 0 and maxv-1 inclusive, | |||
using the above scaling algorithm. | using the above scaling algorithm. | |||
Additionally, the pmms_srand(seed) function must be provided to | Additionally, the pmms_srand(seed) function must be provided to | |||
enable the initialization of the PRNG with a seed before calling | enable the initialization of the PRNG with a seed before calling | |||
pmms_rand(maxv) the first time. The seed is a 31-bit integer between | pmms_rand(maxv) the first time. The seed is a 31-bit integer between | |||
1 and 0x7FFFFFFE inclusive. In this specification, the seed is | 1 and 0x7FFFFFFE inclusive. In this specification, the seed is | |||
restricted to a value between 1 and 0xFFFF inclusive, as this is the | restricted to a value between 1 and 0xFFFF inclusive, as this is the | |||
Repair_Key 16-bit field value of the Repair FEC Payload ID | Repair_Key 16-bit field value of the Repair FEC Payload ID | |||
(Section 4.1.3). | (Section 5.1.3). | |||
3.5. Coding Coefficients Generation Function | 3.5. Coding Coefficients Generation Function | |||
The coding coefficients, used during the encoding process, are | The coding coefficients, used during the encoding process, are | |||
generated at the RLC encoder by the following function each time a | generated at the RLC encoder by the generate_coding_coefficients() | |||
new repair symbol needs to be produced: | function each time a new repair symbol needs to be produced. Note | |||
that the fraction of coefficients that are non zero (density) is | ||||
controlled by a dedicated parameter, DT (Density Threshold). When | ||||
this parameter equals 15, the maximum value, the function guaranties | ||||
that all coefficients are non zero (i.e., maximum density). When the | ||||
parameter is between 0 (minimum value) and strictly inferior to 15, | ||||
the average probability of having a non zero coefficients equals (DT | ||||
+1) / 16. The density is reduced in a controlled manner. | ||||
These considerations apply both the RLC over GF(2) and RLC over | ||||
GF(2^^8), the only difference being the value of the m parameter. | ||||
With the RLC over GF(2) FEC Scheme (Section 4), m MUST be equal to 1. | ||||
With RLC over GF(2^^8) FEC Scheme (Section 5), m MUST be equal to 8. | ||||
<CODE BEGINS> | <CODE BEGINS> | |||
/* | /* | |||
* Fills in the table of coding coefficients (of the right size) | * Fills in the table of coding coefficients (of the right size) | |||
* provided with the appropriate number of coding coefficients to | * provided with the appropriate number of coding coefficients to | |||
* use for the repair symbol key provided. | * use for the repair symbol key provided. | |||
* | * | |||
* (in) repair_key key associated to this repair symbol | * (in) repair_key key associated to this repair symbol | |||
* (in) cc_tab[] pointer to a table of the right size to store | * (in) cc_tab[] pointer to a table of the right size to store | |||
* coding coefficients. All coefficients are | * coding coefficients. All coefficients are | |||
* stored as bytes, regardless of the m parameter, | * stored as bytes, regardless of the m parameter, | |||
* upon return of this function. | * upon return of this function. | |||
* (in) cc_nb[] number of entries in the table. This value is | * (in) cc_nb[] number of entries in the table. This value is | |||
* equal to the current encoding window size. | * equal to the current encoding window size. | |||
* (in) m Finite Field GF(2^^m) parameter. | * (in) density_threshold value between 0 and 15 (inclusive) that | |||
* controls the density. With value 15, all | ||||
* coefficients are guaranteed to be non zero | ||||
* (i.e. equal to 1 with GF(2) and equal to a | ||||
* value in {1,... 255} with GF(2^^8)), otherwise | ||||
* a fraction of them will be 0. | ||||
* (in) m Finite Field GF(2^^m) parameter. In this | ||||
* version only 1 and 8 are considered. | ||||
* (out) returns an error code | * (out) returns an error code | |||
*/ | */ | |||
int generate_coding_coefficients (UINT16 repair_key, | int generate_coding_coefficients (UINT16 repair_key, | |||
UINT8 cc_tab[], | UINT8 cc_tab[], | |||
UINT16 cc_nb, | UINT16 cc_nb, | |||
UINT8 density_threshold, | ||||
UINT8 m) | UINT8 m) | |||
{ | { | |||
UINT32 i; | UINT32 i; | |||
if (repair_key == 0) { | if (repair_key == 0 || density_threshold > 15) { | |||
/* bad parameters */ | ||||
return SOMETHING_WENT_WRONG; | return SOMETHING_WENT_WRONG; | |||
} | } | |||
pmms_srand(repair_key); | pmms_srand(repair_key); | |||
if (m == 1) { | switch (m) { | |||
/* 0 is a valid coefficient value in binary GF */ | case 1: | |||
for (i = 0 ; i < cc_nb ; i ++) { | if (density_threshold == 15) { | |||
cc_tab[i] = (UINT8) pmms_rand(2); | /* all coefficients are 1 */ | |||
memset(cc_tab, 1, cc_nb); | ||||
} else { | ||||
for (i = 0 ; i < cc_nb ; i++) { | ||||
if (pmms_rand(16) <= density_threshold) { | ||||
cc_tab[i] = (UINT8) 1; | ||||
} else { | ||||
cc_tab[i] = (UINT8) 0; | ||||
} | ||||
} | ||||
} | } | |||
} else { | break; | |||
/* coefficient 0 is avoided in non-binary GF to consider each | ||||
* source symbol */ | case 8: | |||
UINT32 maxv; | if (density_threshold == 15) { | |||
maxv = get_gf_size(); /* i.e., 16 if m=4 or 256 if m=8 */ | /* coefficient 0 is avoided here in order to include | |||
for (i = 0 ; i < cc_nb ; i ++) { | * all the source symbols */ | |||
do { | for (i = 0 ; i < cc_nb ; i++) { | |||
cc_tab[i] = (UINT8) pmms_rand(maxv); | do { | |||
} while (cc_tab[i] == 0) | cc_tab[i] = (UINT8) pmms_rand(256); | |||
} while (cc_tab[i] == 0); | ||||
} | ||||
} else { | ||||
/* here a certain fraction of coefficients should be 0 */ | ||||
for (i = 0 ; i < cc_nb ; i++) { | ||||
if (pmms_rand(16) <= density_threshold) { | ||||
do { | ||||
cc_tab[i] = (UINT8) pmms_rand(256); | ||||
} while (cc_tab[i] == 0); | ||||
} else { | ||||
cc_tab[i] = 0; | ||||
} | ||||
} | ||||
} | } | |||
break; | ||||
default: | ||||
/* bad parameter m */ | ||||
return SOMETHING_WENT_WRONG; | ||||
} | } | |||
return EVERYTHING_IS_OKAY; | return EVERYTHING_IS_OKAY; | |||
} | } | |||
<CODE ENDS> | <CODE ENDS> | |||
Figure 2: Coding Coefficients Generation Function pseudo-code | Figure 2: Coding Coefficients Generation Function pseudo-code | |||
4. Sliding Window RLC FEC Scheme for Arbitrary ADU Flows | 4. Sliding Window RLC FEC Scheme over GF(2) for Arbitrary ADU Flows | |||
This fully-specified FEC Scheme defines the Sliding Window Random | ||||
Linear Codes (RLC) over GF(2) (binary case). | ||||
4.1. Formats and Codes | 4.1. Formats and Codes | |||
4.1.1. FEC Framework Configuration Information | 4.1.1. FEC Framework Configuration Information | |||
4.1.1.1. Mandatory Information | ||||
o FEC Encoding ID: the value assigned to this fully specified FEC | ||||
Scheme MUST be YYYY, as assigned by IANA (Section 10). | ||||
When SDP is used to communicate the FFCI, this FEC Encoding ID is | ||||
carried in the 'encoding-id' parameter. | ||||
4.1.1.2. FEC Scheme-Specific Information | ||||
All the considerations of Section 5.1.1.2 apply equally here. | ||||
4.1.2. Explicit Source FEC Payload ID | ||||
All the considerations of Section 5.1.1.2 apply equally here. | ||||
4.1.3. Repair FEC Payload ID | ||||
All the considerations of Section 5.1.1.2 apply equally here. | ||||
4.1.4. Additional Procedures | ||||
All the considerations of Section 5.1.1.2 apply equally here. | ||||
5. Sliding Window RLC FEC Scheme over GF(2^^8) for Arbitrary ADU Flows | ||||
This fully-specified FEC Scheme defines the Sliding Window Random | ||||
Linear Codes (RLC) over GF(2^^8). | ||||
5.1. Formats and Codes | ||||
5.1.1. FEC Framework Configuration Information | ||||
The FEC Framework Configuration Information (or FFCI) includes | The FEC Framework Configuration Information (or FFCI) includes | |||
information that MUST be communicated between the sender and | information that MUST be communicated between the sender and | |||
receiver(s). More specifically, it enables the synchronization of | receiver(s). More specifically, it enables the synchronization of | |||
the FECFRAME sender and receiver instances. It includes both | the FECFRAME sender and receiver instances. It includes both | |||
mandatory elements and scheme-specific elements, as detailed below. | mandatory elements and scheme-specific elements, as detailed below. | |||
4.1.1.1. Mandatory Information | 5.1.1.1. Mandatory Information | |||
o FEC Encoding ID: the value assigned to this fully specified FEC | o FEC Encoding ID: the value assigned to this fully specified FEC | |||
scheme MUST be XXXX, as assigned by IANA (Section 9). | Scheme MUST be XXXX, as assigned by IANA (Section 10). | |||
When SDP is used to communicate the FFCI, this FEC Encoding ID is | When SDP is used to communicate the FFCI, this FEC Encoding ID is | |||
carried in the 'encoding-id' parameter. | carried in the 'encoding-id' parameter. | |||
4.1.1.2. FEC Scheme-Specific Information | 5.1.1.2. FEC Scheme-Specific Information | |||
The FEC Scheme-Specific Information (FSSI) includes elements that are | The FEC Scheme-Specific Information (FSSI) includes elements that are | |||
specific to the present FEC scheme. More precisely: | specific to the present FEC Scheme. More precisely: | |||
Encoding symbol size (E): a non-negative integer that indicates the | Encoding symbol size (E): a non-negative integer that indicates the | |||
size of each encoding symbol in bytes; | size of each encoding symbol in bytes; | |||
m parameter (m): the length of the elements in the finite field, in | ||||
bits, where m is equal to 1, 4 or 8; | ||||
These elements are required both by the sender (RLC encoder) and the | This element is required both by the sender (RLC encoder) and the | |||
receiver(s) (RLC decoder). | receiver(s) (RLC decoder). | |||
When SDP is used to communicate the FFCI, this FEC scheme-specific | When SDP is used to communicate the FFCI, this FEC Scheme-specific | |||
information is carried in the 'fssi' parameter in textual | information is carried in the 'fssi' parameter in textual | |||
representation as specified in [RFC6364]. For instance: | representation as specified in [RFC6364]. For instance: | |||
fssi=E:1400,m:8 | fssi=E:1400 | |||
If another mechanism requires the FSSI to be carried as an opaque | If another mechanism requires the FSSI to be carried as an opaque | |||
octet string (for instance, after a Base64 encoding), the encoding | octet string (for instance, after a Base64 encoding), the encoding | |||
format consists of the following 2 octets: | format consists of the following 2 octets: | |||
Encoding symbol length (E): 16-bit field. | Encoding symbol length (E): 16-bit field. | |||
m parameter (m): 8-bit field. | ||||
0 1 2 | 0 1 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Encoding Symbol Length (E) | m | | | Encoding Symbol Length (E) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 3: FSSI Encoding Format | Figure 3: FSSI Encoding Format | |||
4.1.2. Explicit Source FEC Payload ID | 5.1.2. Explicit Source FEC Payload ID | |||
A FEC source packet MUST contain an Explicit Source FEC Payload ID | A FEC source packet MUST contain an Explicit Source FEC Payload ID | |||
that is appended to the end of the packet as illustrated in Figure 4. | that is appended to the end of the packet as illustrated in Figure 4. | |||
+--------------------------------+ | +--------------------------------+ | |||
| IP Header | | | IP Header | | |||
+--------------------------------+ | +--------------------------------+ | |||
| Transport Header | | | Transport Header | | |||
+--------------------------------+ | +--------------------------------+ | |||
| ADU | | | ADU | | |||
skipping to change at page 13, line 48 ¶ | skipping to change at page 16, line 5 ¶ | |||
wrapping to zero occurs. | wrapping to zero occurs. | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Encoding Symbol ID (ESI) | | | Encoding Symbol ID (ESI) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 5: Source FEC Payload ID Encoding Format | Figure 5: Source FEC Payload ID Encoding Format | |||
4.1.3. Repair FEC Payload ID | 5.1.3. Repair FEC Payload ID | |||
A FEC repair packet MUST contain a Repair FEC Payload ID that is | A FEC repair packet MUST contain a Repair FEC Payload ID that is | |||
prepended to the repair symbol as illustrated in Figure 6. There can | prepended to the repair symbol as illustrated in Figure 6. There can | |||
be one or more repair symbols per FEC repair packet. When this is | be one or more repair symbols per FEC repair packet. When this is | |||
the case, the number of repair symbols within this FEC repair packet | the case, the number of repair symbols within this FEC repair packet | |||
is easily deduced by comparing the known received FEC repair packet | is easily deduced by comparing the known received FEC repair packet | |||
size (equal to the UDP payload size when UDP is the underlying | size (equal to the UDP payload size when UDP is the underlying | |||
transport protocol) and the symbol size, E, communicated in the FFCI. | transport protocol) and the symbol size, E, communicated in the FFCI. | |||
When this is the case, all the repair symbols MUST have been | When this is the case, all the repair symbols MUST have been | |||
generated from the same encoding window. | generated from the same encoding window. | |||
skipping to change at page 14, line 35 ¶ | skipping to change at page 16, line 41 ¶ | |||
following fields (Figure 7): | following fields (Figure 7): | |||
Repair_Key (16-bit field): this unsigned integer is used as a seed | Repair_Key (16-bit field): this unsigned integer is used as a seed | |||
by the coefficient generation function (Section 3.5) in order to | by the coefficient generation function (Section 3.5) in order to | |||
generate the desired number of coding coefficients. Value 0 MUST | generate the desired number of coding coefficients. Value 0 MUST | |||
NOT be used. When a FEC repair packet contains several repair | NOT be used. When a FEC repair packet contains several repair | |||
symbols, this repair key value is that of the first repair symbol. | symbols, this repair key value is that of the first repair symbol. | |||
The remaining repair keys can be deduced by incrementing by 1 this | The remaining repair keys can be deduced by incrementing by 1 this | |||
value, up to a maximum value of 65535 after which it loops back to | value, up to a maximum value of 65535 after which it loops back to | |||
1 (note that 0 is not a valid value). | 1 (note that 0 is not a valid value). | |||
Number of Source Symbols in the Encoding Window, NSS (16-bit field): | Coding coefficients Density Threshold, DT (4-bit field): this | |||
unsigned integer carried the Density Threshold (DT) used by the | ||||
coding coefficient generation function Section 3.5. More | ||||
precisely, it controls the probability of having a non zero coding | ||||
coefficient, which equals (DT+1) / 16. When a FEC repair packet | ||||
contains several repair symbols, the DT value applies to all of | ||||
them; | ||||
Number of Source Symbols in the Encoding Window, NSS (12-bit field): | ||||
this unsigned integer indicates the number of source symbols in | this unsigned integer indicates the number of source symbols in | |||
the encoding window when this repair symbol was generated. When a | the encoding window when this repair symbol was generated. When a | |||
FEC repair packet contains several repair symbols, this NSS value | FEC repair packet contains several repair symbols, this NSS value | |||
applies to all of them; | applies to all of them; | |||
ESI of first source symbol in encoding window, FSS_ESI (32-bit | ESI of first source symbol in encoding window, FSS_ESI (32-bit | |||
field): | field): | |||
this unsigned integer indicates the ESI of the first source symbol | this unsigned integer indicates the ESI of the first source symbol | |||
in the encoding window when this repair symbol was generated. | in the encoding window when this repair symbol was generated. | |||
When a FEC repair packet contains several repair symbols, this | When a FEC repair packet contains several repair symbols, this | |||
FSS_ESI value applies to all of them; | FSS_ESI value applies to all of them; | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Repair_Key | NSS (# source symbols in ew) | | | Repair_Key | DT |NSS (# src symb in ew) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| FSS_ESI | | | FSS_ESI | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 7: Repair FEC Payload ID Encoding Format | Figure 7: Repair FEC Payload ID Encoding Format | |||
4.1.4. Additional Procedures | 5.1.4. Additional Procedures | |||
The following procedure applies: | The following procedure applies: | |||
o The ESI of source symbols MUST start with value 0 for the first | o The ESI of source symbols MUST start with value 0 for the first | |||
source symbol and MUST be managed sequentially. Wrapping to zero | source symbol and MUST be managed sequentially. Wrapping to zero | |||
will happen after reaching the maximum 32-bit value. | will happen after reaching the maximum 32-bit value. | |||
5. FEC Code Specification | 6. FEC Code Specification | |||
5.1. Encoding Side | 6.1. Encoding Side | |||
This section provides a high level description of a Sliding Window | This section provides a high level description of a Sliding Window | |||
RLC encoder. | RLC encoder. | |||
Whenever a new FEC repair packet is needed, the RLC encoder instance | Whenever a new FEC repair packet is needed, the RLC encoder instance | |||
first gathers the ew_size source symbols currently in the sliding | first gathers the ew_size source symbols currently in the sliding | |||
encoding window. Then it chooses a repair key, which can be a non | encoding window. Then it chooses a repair key, which can be a non | |||
zero monotonically increasing integer value, incremented for each | zero monotonically increasing integer value, incremented for each | |||
repair symbol up to a maximum value of 65535 (as it is carried within | repair symbol up to a maximum value of 65535 (as it is carried within | |||
a 16-bit field) after which it loops back to 1 (indeed, being used as | a 16-bit field) after which it loops back to 1 (indeed, being used as | |||
skipping to change at page 16, line 5 ¶ | skipping to change at page 18, line 11 ¶ | |||
is small and when there is an incentive to pack several repair | is small and when there is an incentive to pack several repair | |||
symbols within the same FEC Repair Packet, the appropriate number of | symbols within the same FEC Repair Packet, the appropriate number of | |||
repair symbols are computed. The only constraint is to increment by | repair symbols are computed. The only constraint is to increment by | |||
1 the repair key for each of them, keeping the same ew_size source | 1 the repair key for each of them, keeping the same ew_size source | |||
symbols, since only the first repair key will be carried in the | symbols, since only the first repair key will be carried in the | |||
Repair FEC Payload ID. The FEC repair packet can then be sent. The | Repair FEC Payload ID. The FEC repair packet can then be sent. The | |||
source versus repair FEC packet transmission order is out of scope of | source versus repair FEC packet transmission order is out of scope of | |||
this document and several approaches exist that are implementation | this document and several approaches exist that are implementation | |||
specific. | specific. | |||
5.2. Decoding Side | 6.2. Decoding Side | |||
This section provides a high level description of a Sliding Window | This section provides a high level description of a Sliding Window | |||
RLC decoder. | RLC decoder. | |||
A FECFRAME receiver needs to maintain a linear system whose variables | A FECFRAME receiver needs to maintain a linear system whose variables | |||
are the received and lost source symbols. Upon receiving a FEC | are the received and lost source symbols. Upon receiving a FEC | |||
repair packet, a receiver first extracts all the repair symbols it | repair packet, a receiver first extracts all the repair symbols it | |||
contains (in case several repair symbols are packed together). For | contains (in case several repair symbols are packed together). For | |||
each repair symbol, when at least one of the corresponding source | each repair symbol, when at least one of the corresponding source | |||
symbols it protects has been lost, the receiver adds an equation to | symbols it protects has been lost, the receiver adds an equation to | |||
skipping to change at page 16, line 41 ¶ | skipping to change at page 18, line 47 ¶ | |||
as this is an operational and management decision. | as this is an operational and management decision. | |||
With real-time flows, a lost ADU that is decoded after the maximum | With real-time flows, a lost ADU that is decoded after the maximum | |||
latency (or an ADU received far too late) should not be considered by | latency (or an ADU received far too late) should not be considered by | |||
the application. Instead the associated source symbols should be | the application. Instead the associated source symbols should be | |||
removed from the linear system maintained by the receiver(s). | removed from the linear system maintained by the receiver(s). | |||
Appendix A discusses a backward compatible optimization whereby those | Appendix A discusses a backward compatible optimization whereby those | |||
late source symbols may still be useful to improve the global loss | late source symbols may still be useful to improve the global loss | |||
recovery performance. | recovery performance. | |||
6. Implementation Status | 7. Implementation Status | |||
Editor's notes: RFC Editor, please remove this section motivated by | Editor's notes: RFC Editor, please remove this section motivated by | |||
RFC 6982 before publishing the RFC. Thanks. | RFC 6982 before publishing the RFC. Thanks. | |||
An implementation of the Sliding Window RLC FEC Scheme for FECFRAME | An implementation of the Sliding Window RLC FEC Scheme for FECFRAME | |||
exists: | exists: | |||
o Organisation: Inria | o Organisation: Inria | |||
o Description: This is an implementation of the Sliding Window RLC | o Description: This is an implementation of the Sliding Window RLC | |||
FEC Scheme. It relies on a modified version of our OpenFEC | FEC Scheme. It relies on a modified version of our OpenFEC | |||
(http://openfec.org) FEC code library. It is integrated in our | (http://openfec.org) FEC code library. It is integrated in our | |||
FECFRAME software (see [fecframe-ext]). | FECFRAME software (see [fecframe-ext]). | |||
o Maturity: prototype. | o Maturity: prototype. | |||
o Coverage: this software complies with the Sliding Window RLC FEC | o Coverage: this software complies with the Sliding Window RLC FEC | |||
Scheme (limited to m=8 as of June, 2017). | Scheme (limited to m=8 as of June, 2017). | |||
o Lincensing: proprietary. | o Lincensing: proprietary. | |||
o Contact: vincent.roca@inria.fr | o Contact: vincent.roca@inria.fr | |||
7. Security Considerations | 8. Security Considerations | |||
The FEC Framework document [RFC6363] provides a comprehensive | The FEC Framework document [RFC6363] provides a comprehensive | |||
analysis of security considerations applicable to FEC schemes. | analysis of security considerations applicable to FEC Schemes. | |||
Therefore, the present section follows the security considerations | Therefore, the present section follows the security considerations | |||
section of [RFC6363] and only discusses specific topics. | section of [RFC6363] and only discusses specific topics. | |||
7.1. Attacks Against the Data Flow | 8.1. Attacks Against the Data Flow | |||
7.1.1. Access to Confidential Content | 8.1.1. Access to Confidential Content | |||
The Sliding Window RLC FEC Scheme specified in this document does not | The Sliding Window RLC FEC Scheme specified in this document does not | |||
change the recommendations of [RFC6363]. To summarize, if | change the recommendations of [RFC6363]. To summarize, if | |||
confidentiality is a concern, it is RECOMMENDED that one of the | confidentiality is a concern, it is RECOMMENDED that one of the | |||
solutions mentioned in [RFC6363] is used with special considerations | solutions mentioned in [RFC6363] is used with special considerations | |||
to the way this solution is applied (e.g., is encryption applied | to the way this solution is applied (e.g., is encryption applied | |||
before or after FEC protection, within the end-system or in a | before or after FEC protection, within the end-system or in a | |||
middlebox) to the operational constraints (e.g., performing FEC | middlebox) to the operational constraints (e.g., performing FEC | |||
decoding in a protected environment may be complicated or even | decoding in a protected environment may be complicated or even | |||
impossible) and to the threat model. | impossible) and to the threat model. | |||
7.1.2. Content Corruption | 8.1.2. Content Corruption | |||
The Sliding Window RLC FEC Scheme specified in this document does not | The Sliding Window RLC FEC Scheme specified in this document does not | |||
change the recommendations of [RFC6363]. To summarize, it is | change the recommendations of [RFC6363]. To summarize, it is | |||
RECOMMENDED that one of the solutions mentioned in [RFC6363] is used | RECOMMENDED that one of the solutions mentioned in [RFC6363] is used | |||
on both the FEC Source and Repair Packets. | on both the FEC Source and Repair Packets. | |||
7.2. Attacks Against the FEC Parameters | 8.2. Attacks Against the FEC Parameters | |||
The FEC Scheme specified in this document defines parameters that can | The FEC Scheme specified in this document defines parameters that can | |||
be the basis of attacks. More specifically, the following parameters | be the basis of attacks. More specifically, the following parameters | |||
of the FFCI may be modified by an attacker who only targets receivers | of the FFCI may be modified by an attacker who only targets receivers | |||
(Section 4.1.1.2): | (Section 5.1.1.2): | |||
o FEC Encoding ID: changing this parameter leads the receivers to | o FEC Encoding ID: changing this parameter leads the receivers to | |||
consider a different FEC Scheme, which enables an attacker to | consider a different FEC Scheme, which enables an attacker to | |||
create a Denial of Service (DoS); | create a Denial of Service (DoS); | |||
o Encoding symbol length (E): setting this E parameter to a | o Encoding symbol length (E): setting this E parameter to a | |||
different value will confuse the receivers and create a DoS. More | different value will confuse the receivers and create a DoS. More | |||
precisely, the FEC Repair Packets received will probably no longer | precisely, the FEC Repair Packets received will probably no longer | |||
be multiple of E, leading receivers to reject them; | be multiple of E, leading receivers to reject them; | |||
o m parameter: changing this parameter triggers a DoS since the | ||||
receivers will generate a different set of coding coefficients. | ||||
The recovered source symbols (and thereafter ADUs) will be | ||||
corrupted. | ||||
An attacker who only targets a sender will achieve the same results. | An attacker who only targets a sender will achieve the same results. | |||
However if the attacker targets both sender and receivers at the same | However if the attacker targets both sender and receivers at the same | |||
time (the same wrong piece of information is communicated to | time (the same wrong piece of information is communicated to | |||
everybody), the results will be suboptimal but less severe. | everybody), the results will be suboptimal but less severe. | |||
It is therefore RECOMMENDED that security measures are taken to | It is therefore RECOMMENDED that security measures are taken to | |||
guarantee the FFCI integrity, as specified in [RFC6363]. How to | guarantee the FFCI integrity, as specified in [RFC6363]. How to | |||
achieve this depends on the way the FFCI is communicated from the | achieve this depends on the way the FFCI is communicated from the | |||
sender to the receiver, which is not specified in this document. | sender to the receiver, which is not specified in this document. | |||
Similarly, attacks are possible against the Explicit Source FEC | Similarly, attacks are possible against the Explicit Source FEC | |||
Payload ID and Repair FEC Payload ID: by modifying the Encoding | Payload ID and Repair FEC Payload ID: by modifying the Encoding | |||
Symbol ID (ESI), or the repair key, NSS or FSS_ESI. It is therefore | Symbol ID (ESI), or the repair key, NSS or FSS_ESI. It is therefore | |||
RECOMMENDED that security measures are taken to guarantee the FEC | RECOMMENDED that security measures are taken to guarantee the FEC | |||
Source and Repair Packets as stated in [RFC6363]. | Source and Repair Packets as stated in [RFC6363]. | |||
7.3. When Several Source Flows are to be Protected Together | 8.3. When Several Source Flows are to be Protected Together | |||
The Sliding Window RLC FEC Scheme specified in this document does not | The Sliding Window RLC FEC Scheme specified in this document does not | |||
change the recommendations of [RFC6363]. | change the recommendations of [RFC6363]. | |||
7.4. Baseline Secure FEC Framework Operation | 8.4. Baseline Secure FEC Framework Operation | |||
The Sliding Window RLC FEC Scheme specified in this document does not | The Sliding Window RLC FEC Scheme specified in this document does not | |||
change the recommendations of [RFC6363] concerning the use of the | change the recommendations of [RFC6363] concerning the use of the | |||
IPsec/ESP security protocol as a mandatory to implement (but not | IPsec/ESP security protocol as a mandatory to implement (but not | |||
mandatory to use) security scheme. This is well suited to situations | mandatory to use) security scheme. This is well suited to situations | |||
where the only insecure domain is the one over which the FEC | where the only insecure domain is the one over which the FEC | |||
Framework operates. | Framework operates. | |||
8. Operations and Management Considerations | 9. Operations and Management Considerations | |||
The FEC Framework document [RFC6363] provides a comprehensive | The FEC Framework document [RFC6363] provides a comprehensive | |||
analysis of operations and management considerations applicable to | analysis of operations and management considerations applicable to | |||
FEC schemes. Therefore, the present section only discusses specific | FEC Schemes. Therefore, the present section only discusses specific | |||
topics. | topics. | |||
8.1. Operational Recommendations: Finite Field Element Size (m | 9.1. Operational Recommendations: Finite Field GF(2) Versus GF(2^^8) | |||
Parameter) | ||||
The present document requires that m equals 1 (binary case), 4 or 8. | ||||
It is expected that m = 8 will be mostly used since it warrants a | ||||
high loss protection. Additionally, elements in the finite field are | ||||
8 bits long, which makes read/write memory operations aligned on | ||||
bytes during encoding and decoding. | ||||
An alternative when one can accommodate a lower loss protection is | The present document specifies two FEC Schemes that differ on the | |||
m = 4. Elements in the finite field are 4 bits long, so if 2 | associated Finite Field used for the coding coefficients. It is | |||
elements are accessed at a time, read/write memory operations are | expected that the RLC over GF(2^^8) FEC Scheme will be mostly used | |||
aligned on bytes during encoding and decoding. | since it warrants a high loss protection. Additionally, elements in | |||
the finite field are 8 bits long, which makes read/write memory | ||||
operations aligned on bytes during encoding and decoding. | ||||
Finally, in particular when dealing with large encoding windows, an | Finally, in particular when dealing with large encoding windows, an | |||
alternative is m = 1. In that case operations symbols can be | alternative is the RLC over GF(2) FEC Scheme. In that case | |||
directly XORed together which warrants high bitrate encoding and | operations symbols can be directly XORed together which warrants high | |||
decoding operations. | bitrate encoding and decoding operations. | |||
Since several values for the m parameter are possible, the use case | 9.2. Operational Recommendations: Coding Coefficients Density Threshold | |||
SHOULD define which value or values need to be supported. In any | ||||
case, any compliant implementation MUST support at least the default | ||||
m = 8 value. | ||||
9. IANA Considerations | In addition to the choice of the Finite Field, the two FEC Schemes | |||
define a coding coefficient density threshold parameter. This | ||||
parameter enables a sender to control the code density, i.e., the | ||||
proportion of coefficients that are non zero on average. With RLC | ||||
over GF(2^^8), it is recommended that small encoding windows be | ||||
associated to a density threshold equal to 15, the maximum value, in | ||||
order to warrant a high loss protection. | ||||
This document registers one value in the "FEC Framework (FECFRAME) | On the opposite, with large encoding windows, it it recommened that | |||
the density threshold be reduced. With large encoding windows, an | ||||
alternative can be to use RLC over GF(2) and a density threshold | ||||
equal to 8 (i.e., an average density equal to 1/2) or smaller. | ||||
Note also that using a density threshold equal to 15 with RLC over | ||||
GF(2) is equivalent to using code that XOR's all the source symbols | ||||
of the encoding window. In that case it follows that: (1) a single | ||||
repair symbol can be produced for a given encoding window, and (2) | ||||
the repair_key parameter is useless (the coding coefficients | ||||
generation function does not rely on the PRNG). | ||||
10. IANA Considerations | ||||
This document registers two values in the "FEC Framework (FECFRAME) | ||||
FEC Encoding IDs" registry [RFC6363] as follows: | FEC Encoding IDs" registry [RFC6363] as follows: | |||
o XXX refers to the Sliding Window Random Linear Codes (RLC) FEC | o YYYY refers to the Sliding Window Random Linear Codes (RLC) over | |||
Scheme for Arbitrary Packet Flows, as defined in Section XXX of | GF(2) FEC Scheme for Arbitrary Packet Flows, as defined in | |||
this document. | Section 4 of this document. | |||
o XXXX refers to the Sliding Window Random Linear Codes (RLC) over | ||||
GF(2^^8) FEC Scheme for Arbitrary Packet Flows, as defined in | ||||
Section 5 of this document. | ||||
10. Acknowledgments | 11. Acknowledgments | |||
The authors would like to thank Belkacem Teibi (Inria) who in | The authors would like to thank Marie-Jose Montpetit for her valuable | |||
particular implemented the RLC codec. The author would also like to | feedbacks on this document. | |||
thank Marie-Jose Montpetit for her valuable feedbacks on this | ||||
document. | ||||
11. References | 12. References | |||
11.1. Normative References | 12.1. Normative References | |||
[fecframe-ext] | [fecframe-ext] | |||
Roca, V. and A. Begen, "Forward Error Correction (FEC) | Roca, V. and A. Begen, "Forward Error Correction (FEC) | |||
Framework Extension to Sliding Window Codes", Transport | Framework Extension to Sliding Window Codes", Transport | |||
Area Working Group (TSVWG) draft-roca-tsvwg-fecframev2 | Area Working Group (TSVWG) draft-roca-tsvwg-fecframev2 | |||
(Work in Progress), June 2017, | (Work in Progress), June 2017, | |||
<https://tools.ietf.org/html/draft-roca-tsvwg-fecframev2>. | <https://tools.ietf.org/html/draft-roca-tsvwg-fecframev2>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error | [RFC6363] Watson, M., Begen, A., and V. Roca, "Forward Error | |||
Correction (FEC) Framework", RFC 6363, | Correction (FEC) Framework", RFC 6363, | |||
DOI 10.17487/RFC6363, October 2011, | DOI 10.17487/RFC6363, October 2011, | |||
<http://www.rfc-editor.org/info/rfc6363>. | <https://www.rfc-editor.org/info/rfc6363>. | |||
[RFC6364] Begen, A., "Session Description Protocol Elements for the | [RFC6364] Begen, A., "Session Description Protocol Elements for the | |||
Forward Error Correction (FEC) Framework", RFC 6364, | Forward Error Correction (FEC) Framework", RFC 6364, | |||
DOI 10.17487/RFC6364, October 2011, | DOI 10.17487/RFC6364, October 2011, | |||
<http://www.rfc-editor.org/info/rfc6364>. | <https://www.rfc-editor.org/info/rfc6364>. | |||
11.2. Informative References | 12.2. Informative References | |||
[CA90] Carta, D., "Two Fast Implementations of the Minimal | [CA90] Carta, D., "Two Fast Implementations of the Minimal | |||
Standard Random Number Generator", Communications of the | Standard Random Number Generator", Communications of the | |||
ACM, Vol. 33, No. 1, pp.87-88, January 1990. | ACM, Vol. 33, No. 1, pp.87-88, January 1990. | |||
[PM88] Park, S. and K. Miller, "Random Number Generators: Good | [PM88] Park, S. and K. Miller, "Random Number Generators: Good | |||
Ones are Hard to Find", Communications of the ACM, Vol. | Ones are Hard to Find", Communications of the ACM, Vol. | |||
31, No. 10, pp.1192-1201, 1988. | 31, No. 10, pp.1192-1201, 1988. | |||
[PTVF92] Press, W., Teukolsky, S., Vetterling, W., and B. Flannery, | [PTVF92] Press, W., Teukolsky, S., Vetterling, W., and B. Flannery, | |||
skipping to change at page 20, line 49 ¶ | skipping to change at page 23, line 13 ¶ | |||
University Press, ISBN: 0-521-43108-5, 1992. | University Press, ISBN: 0-521-43108-5, 1992. | |||
[rand31pmc] | [rand31pmc] | |||
Whittle, R., "31 bit pseudo-random number generator", | Whittle, R., "31 bit pseudo-random number generator", | |||
September 2005, <http://www.firstpr.com.au/dsp/rand31/ | September 2005, <http://www.firstpr.com.au/dsp/rand31/ | |||
rand31-park-miller-carta.cc.txt>. | rand31-park-miller-carta.cc.txt>. | |||
[RFC5170] Roca, V., Neumann, C., and D. Furodet, "Low Density Parity | [RFC5170] Roca, V., Neumann, C., and D. Furodet, "Low Density Parity | |||
Check (LDPC) Staircase and Triangle Forward Error | Check (LDPC) Staircase and Triangle Forward Error | |||
Correction (FEC) Schemes", RFC 5170, DOI 10.17487/RFC5170, | Correction (FEC) Schemes", RFC 5170, DOI 10.17487/RFC5170, | |||
June 2008, <http://www.rfc-editor.org/info/rfc5170>. | June 2008, <https://www.rfc-editor.org/info/rfc5170>. | |||
[RFC6726] Paila, T., Walsh, R., Luby, M., Roca, V., and R. Lehtonen, | [RFC6726] Paila, T., Walsh, R., Luby, M., Roca, V., and R. Lehtonen, | |||
"FLUTE - File Delivery over Unidirectional Transport", | "FLUTE - File Delivery over Unidirectional Transport", | |||
RFC 6726, DOI 10.17487/RFC6726, November 2012, | RFC 6726, DOI 10.17487/RFC6726, November 2012, | |||
<http://www.rfc-editor.org/info/rfc6726>. | <https://www.rfc-editor.org/info/rfc6726>. | |||
[RFC6816] Roca, V., Cunche, M., and J. Lacan, "Simple Low-Density | [RFC6816] Roca, V., Cunche, M., and J. Lacan, "Simple Low-Density | |||
Parity Check (LDPC) Staircase Forward Error Correction | Parity Check (LDPC) Staircase Forward Error Correction | |||
(FEC) Scheme for FECFRAME", RFC 6816, | (FEC) Scheme for FECFRAME", RFC 6816, | |||
DOI 10.17487/RFC6816, December 2012, | DOI 10.17487/RFC6816, December 2012, | |||
<http://www.rfc-editor.org/info/rfc6816>. | <https://www.rfc-editor.org/info/rfc6816>. | |||
[RFC6865] Roca, V., Cunche, M., Lacan, J., Bouabdallah, A., and K. | [RFC6865] Roca, V., Cunche, M., Lacan, J., Bouabdallah, A., and K. | |||
Matsuzono, "Simple Reed-Solomon Forward Error Correction | Matsuzono, "Simple Reed-Solomon Forward Error Correction | |||
(FEC) Scheme for FECFRAME", RFC 6865, | (FEC) Scheme for FECFRAME", RFC 6865, | |||
DOI 10.17487/RFC6865, February 2013, | DOI 10.17487/RFC6865, February 2013, | |||
<http://www.rfc-editor.org/info/rfc6865>. | <https://www.rfc-editor.org/info/rfc6865>. | |||
[Roca16] Roca, V., Teibi, B., Burdinat, C., Tran, T., and C. | [Roca16] Roca, V., Teibi, B., Burdinat, C., Tran, T., and C. | |||
Thienot, "Block or Convolutional AL-FEC Codes? A | Thienot, "Block or Convolutional AL-FEC Codes? A | |||
Performance Comparison for Robust Low-Latency | Performance Comparison for Robust Low-Latency | |||
Communications", Submitted for publication | Communications", HAL open-archive document,hal-01395937 | |||
https://hal.inria.fr/hal-01395937/en/, November 2016, < | https://hal.inria.fr/hal-01395937/en/, November 2016, < | |||
https://hal.inria.fr/hal-01395937/en/>. | https://hal.inria.fr/hal-01395937/en/>. | |||
[Roca17] Roca, V., Teibi, B., Burdinat, C., Tran, T., and C. | ||||
Thienot, "Less Latency and Better Protection with AL-FEC | ||||
Sliding Window Codes: a Robust Multimedia CBR Broadcast | ||||
Case Study", 13th IEEE International Conference on | ||||
Wireless and Mobile Computing, Networking and | ||||
Communications (WiMob17), October | ||||
2017 https://hal.inria.fr/hal-01571609v1/en/, October | ||||
2017, < https://hal.inria.fr/hal-01395937/en/>. | ||||
[WI08] Whittle, R., "Park-Miller-Carta Pseudo-Random Number | [WI08] Whittle, R., "Park-Miller-Carta Pseudo-Random Number | |||
Generator", http://www.firstpr.com.au/dsp/rand31/, | Generator", http://www.firstpr.com.au/dsp/rand31/, | |||
January 2008, <http://www.firstpr.com.au/dsp/rand31/>. | January 2008, <http://www.firstpr.com.au/dsp/rand31/>. | |||
Appendix A. Decoding Beyond Maximum Latency Optimization | Appendix A. Decoding Beyond Maximum Latency Optimization | |||
This annex introduces non normative considerations. They are | This annex introduces non normative considerations. They are | |||
provided as suggestions, without any impact on interoperability. For | provided as suggestions, without any impact on interoperability. For | |||
more information see [Roca16]. | more information see [Roca16]. | |||
skipping to change at page 22, line 46 ¶ | skipping to change at page 24, line 46 ¶ | |||
permitted by the application. It follows that these source symbols | permitted by the application. It follows that these source symbols | |||
SHOULD NOT be delivered to the application and SHOULD be dropped once | SHOULD NOT be delivered to the application and SHOULD be dropped once | |||
they are no longer needed. However, decoding these late symbols | they are no longer needed. However, decoding these late symbols | |||
significantly improves the global robustness in bad reception | significantly improves the global robustness in bad reception | |||
conditions and is therefore recommended for receivers experiencing | conditions and is therefore recommended for receivers experiencing | |||
bad channels[Roca16]. In any case whether or not to use this | bad channels[Roca16]. In any case whether or not to use this | |||
facility and what exact value to use for the ls_max_size parameter | facility and what exact value to use for the ls_max_size parameter | |||
are decisions made by each receiver independently, without any impact | are decisions made by each receiver independently, without any impact | |||
on others, neither the other receivers nor the source. | on others, neither the other receivers nor the source. | |||
Author's Address | Authors' Addresses | |||
Vincent Roca | Vincent Roca | |||
INRIA | INRIA | |||
Grenoble | Grenoble | |||
France | France | |||
EMail: vincent.roca@inria.fr | EMail: vincent.roca@inria.fr | |||
Belkacem Teibi | ||||
INRIA | ||||
Grenoble | ||||
France | ||||
EMail: belkacem.teibi@inria.fr | ||||
End of changes. 85 change blocks. | ||||
166 lines changed or deleted | 282 lines changed or added | |||
This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |