Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Reed-Solomon Forward Error Correction (FEC) Schemes) to Experimental RFC

Igor Slepchin <igor@roundbox.com> Fri, 21 September 2007 20:19 UTC

Return-path: <rmt-bounces@ietf.org>
Received: from [127.0.0.1] (helo=stiedprmman1.va.neustar.com) by megatron.ietf.org with esmtp (Exim 4.43) id 1IYoy0-0003r8-9B; Fri, 21 Sep 2007 16:19:12 -0400
Received: from rmt by megatron.ietf.org with local (Exim 4.43) id 1IYoxz-0003r3-F8 for rmt-confirm+ok@megatron.ietf.org; Fri, 21 Sep 2007 16:19:11 -0400
Received: from [10.90.34.44] (helo=chiedprmail1.ietf.org) by megatron.ietf.org with esmtp (Exim 4.43) id 1IYoxz-0003ao-0m for rmt@ietf.org; Fri, 21 Sep 2007 16:19:11 -0400
Received: from mailman.roundbox.com ([208.122.3.166]) by chiedprmail1.ietf.org with esmtp (Exim 4.43) id 1IYoxm-0000hx-9M for rmt@ietf.org; Fri, 21 Sep 2007 16:18:58 -0400
Received: from localhost (localhost.localdomain [127.0.0.1]) by mailman.roundbox.com (Postfix) with ESMTP id C408E4D0005; Fri, 21 Sep 2007 16:19:07 -0400 (EDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Score: -2.58
X-Spam-Level:
X-Spam-Status: No, score=-2.58 tagged_above=-10 required=6.6 tests=[AWL=0.019, BAYES_00=-2.599]
Received: from mailman.roundbox.com ([127.0.0.1]) by localhost (mailman.roundbox.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id J1dQm8zOVKKp; Fri, 21 Sep 2007 16:18:52 -0400 (EDT)
Received: by mailman.roundbox.com (Postfix, from userid 100) id ECBDB4D0004; Fri, 21 Sep 2007 16:18:51 -0400 (EDT)
Received: from [192.168.1.175] (unknown [68.195.193.90]) by mailman.roundbox.com (Postfix) with ESMTP id 869154D0001; Fri, 21 Sep 2007 16:18:50 -0400 (EDT)
Message-ID: <46F4271E.6010408@roundbox.com>
Date: Fri, 21 Sep 2007 16:18:38 -0400
From: Igor Slepchin <igor@roundbox.com>
User-Agent: Thunderbird 1.5.0.12 (X11/20070719)
MIME-Version: 1.0
To: rmt@ietf.org
Subject: Re: [Rmt] Last Call: draft-ietf-rmt-bb-fec-rs (Reed-Solomon Forward Error Correction (FEC) Schemes) to Experimental RFC
References: <E1IYNrI-00035t-H5@stiedprstage1.ietf.org>
In-Reply-To: <E1IYNrI-00035t-H5@stiedprstage1.ietf.org>
Content-Type: text/plain; charset="ISO-8859-1"; format="flowed"
Content-Transfer-Encoding: 7bit
X-Copyrighted-Material: Please visit http://www.roundbox.com/privacy.htm
X-Spam-Score: 0.0 (/)
X-Scan-Signature: 3e15cc4fdc61d7bce84032741d11c8e5
Cc: jerome.lacan@ensica.fr, vincent.roca@inrialpes.fr, sami.peltotalo@tut.fi
X-BeenThere: rmt@ietf.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Reliable Multicast Transport <rmt.ietf.org>
List-Unsubscribe: <https://www1.ietf.org/mailman/listinfo/rmt>, <mailto:rmt-request@ietf.org?subject=unsubscribe>
List-Post: <mailto:rmt@ietf.org>
List-Help: <mailto:rmt-request@ietf.org?subject=help>
List-Subscribe: <https://www1.ietf.org/mailman/listinfo/rmt>, <mailto:rmt-request@ietf.org?subject=subscribe>
Errors-To: rmt-bounces@ietf.org

I realize Last Call is not the best time to bring up issues with a draft 
but here it goes...

As far as I can tell, the n-algorithm described in section 6.2 of 
draft-ietf-rmt-bb-fec-rs-03 is badly broken. Let's go through the steps:

1. Maximum source block length is computed as

B = min(max1_B, max2_B) where max1_B = 2^^m - 1 and max2_B is an 
additional limitation imposed by the codec that may or may not be there. 
Let's assume it's not there so B = 2^^m - 1.

2. Maximum number of encoding symbols for any block is defined by 
n-algorithm as

max_n = floor(B / rate). Given that rate is defined as k/n, its value is 
<= 1. Hence, max_n is >= B, i.e., max_n >= 2^^m - 1

3. Now, the next step of n-algorithm is:

if (max_n > 2^^m - 1) then return an error ("invalid code rate");

So n-algorithm will pretty much _always_ returns an error for 
non-trivial code rates in this scenario, even if the block partitioning 
algorithm produced source blocks of the length that allows generating 
the required number of repair symbols.

One way to fix step 3 is to redefine B as the maximum length of all 
source blocks _produced by the block partitioning algorithm_, i.e., as 
A_large. But even then the resulting number of repair symbols may be 
less than required by the input code rate due to the two "floor" 
operations. Am I missing anything?

That said, I don't think I understand the point of getting floor(B / 
rate) and then floor(k * max_n / B) in the first place. Why not just say 
that n = ceil(k/rate) and return an error if n turns out to be larger 
than 2^^m-1 for any of the source blocks? As mentioned in the draft 
itself, client does not need to know n so the value of max_n is 
irrelevant for the decoding operation. If we really want to give the 
client some rough idea of n, one could set max_n to ceil(A_large/rate).

Thank you,
Igor Slepchin

The IESG wrote:
> The IESG has received a request from the Reliable Multicast Transport WG
> (rmt) to consider the following document:
> 
> - 'Reed-Solomon Forward Error Correction (FEC) Schemes '
>    <draft-ietf-rmt-bb-fec-rs-03.txt> as an Experimental RFC
> <...>



CONFIDENTIALITY NOTICE:  This email message and any attachments contain proprietary and privileged information of Roundbox, Inc., which are provided for the sole and confidential use of the intended recipients.  Any review, use, disclosure or distribution of this information is restricted and must comply with the nondisclosure agreement between Roundbox, Inc. and you (or your company).  All other uses are prohibited.  If you are not an intended recipient, please contact the sender by reply email and promptly delete and otherwise destroy all copies of the message and its attachments.


_______________________________________________
Rmt mailing list
Rmt@ietf.org
https://www1.ietf.org/mailman/listinfo/rmt