Thread Links Date Links
Thread Prev Thread Next Thread Index Date Prev Date Next Date Index

Re: [RPRWG] CRC check in each node?



Title:
Angela, your question about assuring the validity of the TTL field is a good one.  First we must decide if this is a serious enough issue to take measures to protect against.  If we decide it is, then there are various ways to deal with it.  One way where we leave the TTL field unprotected by a CRC, is to write the TTL field twice.  If the two fields are not identical when received, we can take that as an error condition (and possibly equate that with a TTL expired condition).  Other solutions would create a TTL field that has valid values separated by a proper hamming distance so that single bit errors, and burst errors cannot produce a valid value.  Other solutions exist but I am not advocating any particular one.
 
Best regards,
 
Robert D. Love
Chair, Resilient Packet Ring Alliance
President, LAN Connect Consultants
7105 Leveret Circle     Raleigh, NC 27615
Phone: 919 848-6773       Mobile: 919 810-7816
email: rdlove@xxxxxxxx          Fax: 208 978-1187
----- Original Message -----
Sent: Friday, June 29, 2001 12:51 PM
Subject: Re: [RPRWG] CRC check in each node?

Bob
 
One question about the TTL: if the CRC Header does not cover TTL field, how do we know if the TTL is valid? Should it not be included in a CRC-header maybe because the probability of the TTL be corrupted and still have a in-range (i.e., valid) value is very low?
 
Thanks!
 
Angela
----- Original Message -----
Sent: Tuesday, June 26, 2001 12:17 PM
Subject: RE: [RPRWG] CRC check in each node?

David,
 
See comments to your email below. 
A basic question is whether RPR frames
with bad headers should continue on the ring
until their TTL expires, or should the packet
be stripped as soon as a bad header is detected?
Even in a cut-through implementation, the packet
header cannot be regenerated on the next ring segment
until the TTL is checked.  If the RPR frame supports
a header CRC this CRC would likely follow
right after the TTL.  It would be
worth performing the header CRC check and stripping
the packet if the header is bad.
 
 
    thanks,
 
    bob

Robert Castellano
Jedai Broadband Networks
rc@xxxxxxxxx <
mailto:rc@xxxxxxxxx>
(732) 758-9900 x236



-----Original Message-----
From: owner-stds-802-17@xxxxxxxxxxxxxxxxxx
[mailto:owner-stds-802-17@xxxxxxxxxxxxxxxxxx]On Behalf Of David V. James
Sent: Tuesday, June 26, 2001 12:08 AM
To: ieee 802.17 list; OLSSON,FREDRIK (A-SantaClara,ex1)
Cc: David V. James; dbg@xxxxxxxxxx
Subject: RE: [RPRWG] CRC check in each node?



Fredrik (et al),

I don't agree that updating the TTL counter implies a loss of
coverage in intermediate nodes. Let me address this and some
other points simultaneously. Under some topics, I have listed
Pro and Con arguments and personal preference.

1) Should the packet header and data have separate CRCs?
   PRO: The error is generally much longer than the header,
        so this would more frequently allow route-specific
        logging of errors (when the header is OK, but the
        data is corrupt).
   PRO: Its easier to modify the header, or insert extended
        headers, in various stages of bridge-like routing.
   CON: The packet is longer by approximately 4 bytes.
   ME:  The header(s) and data payload have separate CRCs.

rc - I agree header and data payload should have separate
CRCs for the two pro-reasons given.  It also removes
the header dependency on the tail end of the data packet which
is required for cut-through implementations.  The modified
CRC algorithm you mention below could allow the packet
to begin regeneration on the next ring segment, but do
we really want an errored packet to circulate on the
ring until its TTL expires? (see 2 below)

2) Can packets be modified (TTL changes) without losing their
   error coverage during the change?
   YES: Rather than strip the CRC and recompute the CRC, a
        differential CRC is computed on the differential TTL
        value, (TTL-1)^TTL. This differential CRC is then
        EXOR'd with the value received at the input, thereby
        generating a revised transmit CRC without loss of
        converage. Nothing new, this was discussed when
        working on IEEE Std 1596 Scalable Coherent Interface
        (I believe it source was an IBM RAS (reliability,
        availability, and support) guy, but I'm not sure.
 
rc - I guess it depends on the strategy for dealing with
corrupted headers.  Should a packet with a corrupted
header be allowed to continue on the ring or
should the header be validated prior to regenerating
over the next ring segment.  If the header awaits completion
of the CRC check, then the station can simultaneously
perform check on the incoming header while generating
a new CRC based on the outgoing header with modified
TTL.

3) Can packets with bad CRCs be discarded?
   PRO: Because their contents cannot be trusted, its fine to
        discard them. A bad header can be discarded, since a
        0 valued TTL would cause the same effect. Discarding
        of a bad data block is OK, but only if the header could
        not be interpreted as a valid packet in the absence of
        its payload.
   PRO: The only penalty for discarding them is the loss of
        error-logging diagnostic information. However, is separate
        header and payload CRCs are provided, the header will
        usually (in a statistical sense) be preserved and the
        larger data payload will be corrupted. Hence, error
        logging is still possible.
   PRO: Error logging information, based on corrupted data,
        will itself become untrustworthy.
   PRO: Its easier for store-and-forward implementations to
        simply discard corrupted packets, rather than being
        forced to "stomp" them, as described in #4.
   CON: There is some loss of error checking on packet header
        corruption.
   ME:  These corrupted packets should be treated as effectively
        discarded, where a packet stomping (see point #4) has
        the same architectural effect as discarding the packet,
        i.e. the packet error is not logged again.
 
rc - I agree with pro 1/pro 2.  The error logging capability
in PRO3 is dependent on where the error checking is
done, and the nature of the payload at the place where
the checking is done.  For example, if the RPR header
provides enough addressing information to deliver a packet
to a client interface.  The SLA checking could be done
at the client interface.  If the SLA checking is performed
downstream of the client interface, where the client
requires certain portions of the data frame to reliably
forward the packet, then these subsequent headers
need to be protected by their own CRCs.



4) Do packets have to be checked, to uncover their bad CRCs,
   before being forwarded?
   NO:  The strategy at the receiver's CRC checking hardware
        is to compute the valid CRC while the initial portion
        of the packet is passing through. When the CRC is reached,
        the following algorithm is performed:

        #define CRC_STOMP 0X55555555  // A possible CRC_STOP value
        if (checkCRC!=packetCRC) {
            errorCount+= (packetCRC!= checkCRC^STOMP);
            packetCRC^= STOMP;
        }

   For those unfamiliar with "C", the CRC_STOMP value is a
   constant to be defined by this committee; the value shown
   is not necessarily the best value. If the packet's
   CRC is bad, but has not yet been "stomped", then an error
   count for that link is incremented. In any case, a packet
   with a bad CRC is always "stomped", by replacing the "bad"
   CRC with a particular bad CRC, namely the good CRC exclusive-OR'd
   with the STOMP value.

   Now while its possible for the "stomped" value to be generated
   by a coincidental transmission error, the chance of this is
   quite small, so that only a small number of errors (1 in 2**32)
   would be incorrectly logged.

   Note that operations (2) and (4) are logically independent
   actions, so neither interferes with the operation of the other.

I am an advocate of stomping which allows RPR stations
to gather their own link statistics while attempting to
deliver packets to aid downstream performance monitoring
functions.  The stomping function is what I described in
the mail message that I sent yesterday.
 
An alternative to addressing the store-forward limitation could be
to set the payload CRC to a specific error value, upon detection of a bad
CRC. This can be used to indicate to subsequent
stations that the payload error has already been detected and
accounted for. By using the CRC field, moves the error indication to the
end of the packet and addresses the head of the packet dependency
on receiving the entire packet and validating CRC. This provides
a mechanism for providing a user error indication, without
restricting a "cut-through" implementation.
 



DVJ (David Vernon James)



-----Original Message-----
From: owner-stds-802-17@xxxxxxxxxxxxxxxxxx
[mailto:owner-stds-802-17@xxxxxxxxxxxxxxxxxx]On Behalf Of OLSSON,FREDRIK
(A-SantaClara,ex1)
Sent: Friday, June 22, 2001 1:36 PM
To: ieee 802.17 list
Subject: RE: [RPRWG] CRC check in each node?




My two cents worth:

As mentioned in a previous email, I agree that it is preferable not to
regenerate the payload CRC at intermediate nodes to allow a real end-to-end
protection of the payload.
Then a separate CRC is required for the destination address and TTL counter,
so non-routable frames can be discarded.

One Ethernet encasulation protocol already defined with a separate header
CRC is GFP (Generic Framing Procedure). It is pushed both in T1X1 and ITU-T.
I think it deserves a second look at, and could maybe serve as a base with a
new RPR header we define. The frame mapped version with a modified ring mode
header may be close to what we need.

The latest GFP copy can be downloaded at:

 <ftp://ftp.t1.org/T1X1/X1.5/1x150243.doc> File name: 1x150243.doc
http://www.t1.org/filemgr/FileList.taf?Directory=t1x1%5Cx1.5
<http://www.t1.org/filemgr/FileList.taf?Directory=t1x1%5Cx1.5&ShowTitle=New%
20T1X1.5%20Files> &ShowTitle=New%20T1X1.5%20Files

GFP as is would work fine for SONET and OTN PHY's. To work with Ethernet
PHY's it may be possible to make the frame "Ethernet-like" by just adding a
PA and SFD?

Regards,
Fredrik Olsson
Agilent Technologies


-----Original Message-----
From: Nader Vijeh [mailto:nader@xxxxxxxxxxxxxx]
Sent: Friday, June 22, 2001 12:25 PM
To: ieee 802.17 list
Subject: RE: [RPRWG] CRC check in each node?


I agree with Harry on not discarding packets with bad CRC. Not only carriers
will not like this, but it also goes against the fact that MAC is not
actually "receiving" packets in transit. Packet discard due to CRC error is
defined as part of the "receive function" in the 802 MACs.

To answer Mike's question on Ethernet MACs, they all have a "promiscuous"
mode that allows them to receive all packets on the media, this mode is
normally used in bridges, allowing the bridge to make the decision on
forwarding.

-----Original Message-----
From: Harry Peng [mailto:hpeng@xxxxxxxxxxxxxxxxxx]
Sent: Friday, June 22, 2001 10:03 AM
To: ieee 802.17 list
Subject: RE: [RPRWG] CRC check in each node?



Ray, Mike, Raj, Angela:


There are two issues here:
1) If there is only one CRC that covers the ring header (DA) and the
payload, then you don't
   known if the error occurred in the header (un-routable packet) or in the
payload.
   If the TTL is also covered by the CRC then the only way TTL can remove
packet
   is because the DA is unknown to all the stations on the ring. This TTL is
rather useless.

   all error packets must be discarded.

   This violate the Transparent Lan Service model. Error packet is delivered
to the
   customer for SLA reasons. Any packet discarded will have to be able to be
validate
   at the receive end. Keeping statistics on the ring becomes a big scaling
problem.

   This also prevents any of you out there who want to do transparent
mapping.

2) in the cut through mode, error packet are delivered to its destination
which may
   decide to discard or not and keep stats accordingly.

   In cut-through the header will have to processed for source removal,
destination strip,
   and TTL processing.

   In either case, Adding a ring header error checking can be used to
validate the correctly
   of the header. If the packet is routable, forward it.

   For store and forward mode, you can check if the packet CRC is correct
and discard the packet depending on the
   configuration of the MAC and the service the box is offering.

Recommendation:
   Header error checking is valuable, there is an error floor rate for any
transmission medium.

   For all possible services that the ring can offer, and for RPR to be
   payload agnostic then it shall not drop any error packet. Unless a header
error is detected.
   Un-routable packet is a given, there is not much one can do but to
discard it!
   Remove un-routable packet so it does not circulate on the ring forever.


Regards,

Harry





-----Original Message-----
From: Ray Zeisz [ mailto:Zeisz@xxxxxxxx <mailto:Zeisz@xxxxxxxx> ]
Sent: Friday, June 22, 2001 7:23 AM
To: 'Mike Takefman'; Raj Sharma
Cc: 'Angela T. Faber'; ieee 802.17 list
Subject: RE: [RPRWG] CRC check in each node?



There are plenty of Ethernet switches that operate in (gasp!) cut-through
mode.  These switches propagate CRC errored frames because they switch from
one port to another after only receiving the MAC header.  The original
Ethernet switch (Kalpana) operated this way...and received a lot of
criticism.  From my perspective, it appears that most of the Ethernet switch

industry is moving away from this and not propagating CRC errors.  This is
largely due to the fact that the industry is moving away from shared bus
architectures.

Today, most Ethernet MACs and Network Processors have control bits that
allow you to selectively receive or discard packets that are CRC errored,
too long or runt (too short).

I believe that Raj mentioned some services that require errored packets to
be delivered at the Orlando meeting.  Maybe he could tell us more about
these and what the errored packets provide to the end station.


FYI: IBM has a patent for adaptively running in cut-through or
store-and-forward based on the bit error ratio over a period of time, on a
per link basis.

Ray Zeisz

LVL7 Systems
http://www.LVL7.com <http://www.LVL7.com>
(919) 865-2735




-----Original Message-----
From: Mike Takefman [ mailto:tak@xxxxxxxxx <mailto:tak@xxxxxxxxx> ]
Sent: Thursday, June 21, 2001 9:05 PM
To: Raj Sharma
Cc: 'Angela T. Faber'; ieee 802.17 list
Subject: Re: [RPRWG] CRC check in each node?



Raj,

It is not clear to me that the ttl has to be within the packet, and
protected by the crc. There are successful implementations that
have the ttl protected outside of the packet. There are advantages
to doing this in terms of the complexity of the implementation.

I do come down on the camp of removing the packet from the ring
once there is corruption. There is no reason to waste BW with
a packet that will be dropped once it is received.

I would be interested to know if there are any Ethernet MAC/
Switch chips sets that do not drop CRC errored packets
when received or any that do it selectively.  I would be interested
in understanding the mechanism for differentiating drop behaviour
to understand if it belongs in the transit path.

cheers,

mike


Raj Sharma wrote:
> Angela,
>
> This is an intesting question and is sort of the tip of an iceberg
> (pardon the cliché - I feel the answer to this question is loaded)
>
> There are fundamentally 2 issues here. Misrouting of packets due
> to errors and corruption of the payload.
>
> IMHO, packets whose headers are corrupted must be discarded
> in order to prevent misrouting. The question is whether the misrouting
> prevention is limited between RPR MACs or to the ultimate destination
> entity connected to a RPR MAC. I am assuming that a RPR MAC has
> multiple clients.
>
> Certain services require persistent delivery of frames. Such services
> will make their won decision on what to do with corrupted frames.
> For these services it may require that corrupted frames be still delivered

> to the specific MAC client.
>
> Now, it maybe of significant value in debugging networks and from
> an operational perspective to know over which span on the ring the
> frame got corrupted. Hence CRC recomputation at every node may
> have some value from an operational perspective. Also, since the TTL
> field is part of the frame CRC recomputation cannot be avoided at least
for
> the header.
>
> raj
>
>
>
>      -----Original Message-----
>      From: Angela T. Faber [ mailto:afaber@xxxxxxxxxxxxx
<mailto:afaber@xxxxxxxxxxxxx> ]
>      Sent: Thursday, June 21, 2001 12:44 PM
>      To: ieee 802.17 list
>      Subject: [RPRWG] CRC check in each node?
>
>      Folks
>
>      One question regarding CRC check: are we assuming CRC will be checked

at every node (as the frame is
>      forwarded) or it will be checked only at the destination/source node?

>      My initial thought on this is that, if we don't do it at every node,
than how do we remove the frame from ring if the
>      source and destination addresses are corrupted? On the other hand I
assume that if every node checks it, more
>      time is spent with forwarding it....
>
>      Any insights are welcomed.
>      Thanks!
>
>      Angela
>