Re: (M2PA) Initial version of M2PA IG is Now Available

"Brian F. G. Bidulock" <[email protected]>
Newsgroups gmane.ietf.sigtran
Organization http://www.openss7.org/
Message-ID <[email protected]>
Andrew,

Forgive me for the long note, but I figured you were asking for
details...

Andrew Booth wrote:                           (Mon, 29 May 2006 16:03:59)
>
> I don't follow you here, perhaps we're talking about different scenarios.
> 
> If an MTP3 (or an "implementation specific management function") has
> sent "Local Processor Recovered" and "Flush" or "Resume" to MTP2 then it
> perceives the link as "In Service".  Hence T1 will either be cancelled
> (short duration LPO) or have expired. In neither case is T1 running when
> MTP3 starts to send Data on the link again. If at this point the remote
> M2PA doesn't provide the expected LSR then any messages from MTP3 are
> stuck in the M2PA TB, there is no primitive between M2PA and MTP3 that
> notifies MTP3 of this "funny" situation.

Several things you are missing:

- T1 is still running on the blocked link at the peer.  And the peer is
  still holding messages in preparation for changeover.

- The side sending LSPR cannot resume sending data messages until it has
  received the LS Ready.  This is in accordance with, for example, ANSI
  T1.111.3-2000 clause 8, which goes further to say that messages are
  not accepted from L3 until the procedure completes.

> The best you can hope for is that MTP3 will try to perform an SLT
> procedure (which will fail) at the end of LPO before performing a
> changeback, and hence will fail the link. I believe SLT is optional at
> the end of processor outage though, so this isn't a complete solution.
> If the SLT procedure is skipped, data from MTP3 will continue to
> accumulate in the M2PA TB until "false link congestion" takes the link
> out of service or another SLT procedure is fails (again, I IIRC the
> periodic SLT procedure is optional, but practically it is used fairly
> universally).

You should know that failing a link due to a failed SLT beyond the
initial SLT procedure is counter-recommended.

> Aside: AFAIK, MTP3 doesn't fail a link after a time controlled
> changeover, it just doesn't use it for traffic. Maybe that's just a
> difference in terminology.

The link is marked as failed when Out_of_Service is received from L2
regardless of whether the link is in time controlled changeover or not.


MTP2 is not permitted to accept messages from MTP3 until the Resume
procedure completes. (ANSI T1.111.3-2000 Clause 8), so there will be no
accumulation in the TB if the MTP3 is compliant with that standard.
These messages are queued in the hold buffer created when the link
became blocked and T1 was started and remain there until T1 expires, the
Resume procedure completes and they are drained to the current link, or
they are passed to an alternate link when a changeover procedure
completes.  In any case, as messages have been held while the link was
blocked any new messages for transmission on the link must be queued
behind already queued messages to preserve message order.

At the other end of the link T1 is running.  When M2PA at the other end
of the link receives LSPR it indicates remote processor recovered to
MTP3.  At this point, MTP3 either flushes buffers or resumes and is
bound by the same requirement to wait for the flush or resume procedure
to complete before sending messages on the link.  It too is holding
messages in a hold buffer an has T1 running.  When flush or resume is
received from MTP3, M2PA MUST send LS Ready, and only after the
procedure completes (again according to ANSI T1.111.3-2000 clause 8) can
is send further User data messages from the hold buffer followed by new
messages.

Consider the delayed LSPR.

It is resonable that, as the link was completely quiescent during
processor outage, the LSPR might be extraoridinarily delayed.  Level 2
bridges and Level 3 switches might have aged spanning tree information
or arp cache during the quiescent period, causing additional delays to
the LSPR message not be experienced by messages during normal operation.

If the processor outage is of a very short duration, SCTP can have User
Data messages delivered to it that have not been succesfully
acknowledged by the SCTP peer and the LSPR message will not even be
transmitted until these messages clear to the other side.  So for very
short outages it is still possible that the LSPR message is considerably
delayed.

SCTP's fast recovery algorithm relies on the appearance of subsequent
messages from the missing message (indicating a gap) and a SACK with a
gap report to invoke the FR algorithm.  As the LSPR is not followed by
any message until the LS Ready is received, CRC error or other loss of
the LSPR will require the sender to wait at least RTO_min before it is
retransmitted.  SCTP RTO_min is set to 1 second.  With the other
considerations it is quite easy for LSPR to be delayed over 1 second.
T7 is typically 1 second.

> It seems to me that this transport delay is a reasonable reason for
> taking the link out of service (provided we have data pending on the LSR).
> 
> After all, if the link were in service when a transport delay caused T7
> to expire then the link would fail. I don't see the two cases as
> substantially different.
> 
> Does that make any sense? Or am I missing something?

The remote end MUST send LS Ready in response to LSPR.  Broken
implementations aside, take a look at what happens at the proper
functioning remote end of the link when LPSR or its LS Ready gets
delayed in transit and a procedure is used to fail the link.

When the timer expires (node A) waiting for LS Ready after sending LSPR,
two conditions are possible at node A:

1. Node A follows ANSI T1.111.3-2000, in which case the signalling link
   has not been marked available at Level 3 until the Resume procedure
   completes, which includes syncrhonization of sequence numbers
   requiring it to wait for LS Ready.

2. Node A ignores ANSI T1.111.3-2000 and marks the link as available at
   Level 3 before the LS Ready is received.  (I think this is the case
   that you were considering.)

In case (1), Out_of_Service indication from L2 at node A will be ignored
(by TLAC) because T1 is  still running.  Because it failed, LSAC will
place the link in suspension (T32 or T34 for ANSI, 5 to 120 seconds).
After suspension, restoration will be attempted.  When T1 expires,
messages will be sent to the alternate link.  Because the link has
failed and buffers are not collected, they are discarded when the link
receives the Start command.  Because LSOS is sent by node A on Stream 0,
it is possible that LSOS is received by node B before the LSPR or data
messages preceding it, or it may arrive later.  Because LSPO is sent on
Stream 1 also, it is possible that LSOS is received on Stream 0 before
LSPO.

In case (2), Out_of_Service indication from L2 at node A will cause TLAC
to initiate sequenced changeover and a COO messages will be assembled
with BSNT/FSNC and sent to the other end and T2 will be started.  As the
COO message is sent via an alternate link, it might be received by node
B before or after the user data messages and LSPR queued on Stream 1 on
the affected association.  Again LSOS is sent by node A on Stream 0
(LSAC) and the link is placed into suspension (T32 or T34, 5 to 120
seconds).

Looking at node B, there are several possibilities visa vi LSOS:

- LSOS arrives before LSPO.  Node B initiates sequenced changeover and
  issues COO to node A.  If node A is case (1), it responds with ECA and
  messages are lost because node B cannot update its buffers.  If node A
  is case (2), it responds with COA and buffer updating is complete.

- LSOS arrives after LSPO but before LSPR.  Node B is already in
  changeover and the link is put into suspension.

- LSOS arrives after LSPR (i.e. after LS Ready is sent).  Node B
  initiates changeover procedures.  Again if node A is case (1), it
  responds with ECA and messages will be lost.  If node a is case (2),
  it responds with COA and buffer updating is completed.

In any case, when the LSOS is received, the link is put into suspension
and it will take up to several minutes for the link to be restored.

Looking at node B, there are several possibilitys visa vi COO (when node
is case (2) only).

- COO arrives before LSPO.  Node B initiates sequence changeover and
  issues COA to node A.   Node B issues Stop command to L2, the link is
  treated as failed, and is placed into suspension.  The other side will
  complete buffer updating.  It will take up to several minutes to
  restore the link from suspension.

- COO arrives after LSPO but before LSPR.  Node B is already in
  changeover and responds with ECA.  Node A will discard buffers.  The
  links is already in suspension.  When T1 expires at Node B, node B
  will clear buffers, discarding messages.

- COO arrives after LSPR.  Node B has the link back in service and will
  respondw ith COA.  Buffers will be updated,  Node B will place the
  link under suspension.

If, as is often the case for M2PA, the alternate link is in a different
link set, time-controlled changeover is chosen over sequenced (to avoid
missequencing of messages at the ultimate destination).  All COO/COA
exchanges above will result in the loss of buffered messages at both
ends.

Contrast this with just waiting.

When LSPR is received by node B before T1 timer expiry, the link is
resumed, LS Ready is sent (on Stream 1) and messages are transmitted on
the signalling link.  When message are sent, T7 is running.  If node A
does not receive the LS Ready in a timely manner, it will not receive
the messages queued behind it and T7 will expire and node B will stop
the link and initiate changeover.  If there are no User data messages
for node B to send, the link is quiescent and it does not matter how
long either side waits.  When the first message is sent by node B, T7 is
started and node A must respond.  If the SCTP association fails due to
excessive retransmissions or abort, node B will intiate changeover.

A node A in case (1), if T1 has not expired before receiving LS Ready,
the link will be resumed without message loss.  If T1 expires before LS
Ready arrives, changeover will occur and buffers will be flushed on the
link.  When the LS Ready eventually arrives, the link becomes available
and changeback can occur.

A node A in case (2) might have a problem, but placing the link out of
service an incurring message loss and full link suspension before
recovery is not a solution.  Case (2) is broken, even for SS7 links
because there is no guarantee that sequence number synchronization will
complete in a timely manner.

A better option if you are faced with such a broken implemenation might
be to use the old RPO/LPO latching option whereby when local processor
outage is requested when remote processor outage is received; that is,
LSPO is sent when LSPO is received, when LSPR is received, LSPR is sent.
That way node A is guaranteed to keep T1 running until the procedure
completes.  But this is an option already used in SS7 today and does not
require any alteration to M2PA to implement (when Remote_processor_outage
is indicated to L3, a MGMT function signals Local_processor_outage to
L2; when Remote_processor_recovered is indicated to L3, the MGMT
function signals Local_processor_recovered to L2.)

This is an L3/MGMT procedure that was used in the past to handle poorly
operating ITU-T MTP3 implementations (Red Book I think) and I don't
think that it is in use today because I don't believe there are any MTP3
implementations so broken that they do not leave T1 running until the
syncrhonization procedure is complete and L2 is fully ready to accept
MSUs.

It is quite possible to implement latching as a local matter to such a
case (2) implementation.  Your local M2PA/MGMT could indicate Remote
Processor Outage to L3 in response to Local Processor Outage, and
indicate Remote Processor Recovered only after LS Ready is received as
part of Local Processor Recovery.  This will hold your T1 timer running
until LS Ready is received.  This is completely a local matter.  ANSI
T1.111.3 completely removed local processor outage handling from the
SDLs for these very reasons.

So, by causing changeover and failing the link (sending LSOS), this T7
procedure causes buffer loss due to link failure, and buffer loss as
well as missequencing due to unnecessary changeovers, and long periods
of link suspension due to link failure.  All just because LSPR or LS
Ready might be delayed for a second or so which is fully reasonable
given SCTP's characteristics.  Although you are welcome to do this if
you want (the RFC does not forbid it), it cannot be recommended.

--brian

-- 
Brian F. G. Bidulock
[email protected]
http://www.openss7.org/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.