Project

General

Profile

Actions

Bug #4999

closed

ns2: Don't transmit NS-RESET until link is fully recovered / available

Added by laforge about 3 years ago. Updated about 3 years ago.

Status:
Resolved
Priority:
Normal
Assignee:
Category:
-
Target version:
-
Start date:
01/31/2021
Due date:
% Done:

100%

Spec Reference:

Description

Right now, a typical start-up sequence at a NS/FR user looks like this:

Stats timer started with interval 5 sec
Stats timer started with interval 5 sec
hdlc4: Creating frame relay link with role USER
BIND(fr-4) hdlc4: has correct frame relay mode and lmi
hdlc3: Creating frame relay link with role USER
BIND(fr-3) hdlc3: has correct frame relay mode and lmi
hdlc2: Creating frame relay link with role USER
BIND(fr-2) hdlc2: has correct frame relay mode and lmi
hdlc1: Creating frame relay link with role USER
BIND(fr-1) hdlc1: has correct frame relay mode and lmi
NSE(01001)-NSVC(01004) Tx NS RESET (cause=O&M intervention)
hdlc4: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS RESET (cause=O&M intervention)
hdlc3: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS RESET (cause=O&M intervention)
hdlc2: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS RESET (cause=O&M intervention)
hdlc1: Link is not reliable (yet), discarding Tx
Available via telnet 127.0.0.1 2222
BIND(fr-1) FR net-device 'hdlc1': Physical link state changed: UP
BIND(fr-2) FR net-device 'hdlc2': Physical link state changed: UP
BIND(fr-3) FR net-device 'hdlc3': Physical link state changed: UP
BIND(fr-4) FR net-device 'hdlc4': Physical link state changed: UP
Accept()ed new telnet connection r=127.0.0.1:36052<->l=127.0.0.1:2222
NSE(01001)-NSVC(01004) Tx NS RESET (cause=O&M intervention)
hdlc4: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS RESET (cause=O&M intervention)
hdlc3: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS RESET (cause=O&M intervention)
hdlc2: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS RESET (cause=O&M intervention)
hdlc1: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01004) Tx NS RESET (cause=O&M intervention)
hdlc4: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS RESET (cause=O&M intervention)
hdlc3: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS RESET (cause=O&M intervention)
hdlc2: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS RESET (cause=O&M intervention)
hdlc1: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01004) Tx NS RESET (cause=O&M intervention)
hdlc4: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS RESET (cause=O&M intervention)
hdlc3: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS RESET (cause=O&M intervention)
hdlc2: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS RESET (cause=O&M intervention)
hdlc1: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01004) Tx NS RESET (cause=O&M intervention)
hdlc4: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS RESET (cause=O&M intervention)
hdlc3: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS RESET (cause=O&M intervention)
hdlc2: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS RESET (cause=O&M intervention)
hdlc1: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01004) Tx NS RESET (cause=O&M intervention)
hdlc4: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS RESET (cause=O&M intervention)
hdlc3: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS RESET (cause=O&M intervention)
hdlc2: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS RESET (cause=O&M intervention)
hdlc1: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01004) Tx NS RESET (cause=O&M intervention)
hdlc4: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS RESET (cause=O&M intervention)
hdlc3: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS RESET (cause=O&M intervention)
hdlc2: Link is not reliable (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS RESET (cause=O&M intervention)
hdlc1: Link is not reliable (yet), discarding Tx
...

Then the HDLC links recover, but we continue to fail to tx:

hdlc4: Link recovered
hdlc3: Link recovered
hdlc2: Link recovered
hdlc1: Link recovered
NSE(01001)-NSVC(01004) Tx NS RESET ACK
hdlc4: DLCI 1004 is not active (yet), discarding Tx
NSE(01001)-NSVC(01004) Tx NS UNBLOCK
hdlc4: DLCI 1004 is not active (yet), discarding Tx
hdlc4: DLCI 1004 is not active (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS RESET ACK
hdlc3: DLCI 1003 is not active (yet), discarding Tx
NSE(01001)-NSVC(01003) Tx NS UNBLOCK
hdlc3: DLCI 1003 is not active (yet), discarding Tx
hdlc3: DLCI 1003 is not active (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS RESET ACK
hdlc2: DLCI 1002 is not active (yet), discarding Tx
NSE(01001)-NSVC(01002) Tx NS UNBLOCK
hdlc2: DLCI 1002 is not active (yet), discarding Tx
hdlc2: DLCI 1002 is not active (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS RESET ACK
hdlc1: DLCI 1001 is not active (yet), discarding Tx
NSE(01001)-NSVC(01001) Tx NS UNBLOCK
hdlc1: DLCI 1001 is not active (yet), discarding Tx
hdlc1: DLCI 1001 is not active (yet), discarding Tx
NSE(01001)-NSVC(01004) Tx NS UNBLOCK
hdlc4: DLCI 1004 is not active (yet), discarding Tx
hdlc4: DLCI 1004 is not active (yet), discarding Tx
NSE(01001)-NSVC(01004) Tx NS RESET ACK
hdlc4: DLCI 1004 is not active (yet), discarding Tx
...

until we finally get NS-STATUS indications about NSE + NSVC recovery:

NSE(01001) NS-STATUS.ind(bvci=00000): cause=NSE recovery, transfer=2, first=1
NSE(01001)-NSVC(01004) NS-STATUS.ind(bvci=00000): cause=NSVC recovery, transfer=2, first=0
NSE(01001)-NSVC(01003) NS-STATUS.ind(bvci=00000): cause=NSVC recovery, transfer=4, first=0
NSE(01001)-NSVC(01002) NS-STATUS.ind(bvci=00000): cause=NSVC recovery, transfer=6, first=0
NSE(01001)-NSVC(01001) NS-STATUS.ind(bvci=00000): cause=NSVC recovery, transfer=8, first=0

from whihc point onwards the NS-RESET can finaly be sent.

What we can actually also see tis that after the "link recovery" we get NS-RESET and other PDUs from the peer, but we cannot send RESET-ACK in response. This is due to the difference between link recovery and DLC reovery, and this is actually even described in Q.933 Annex A.

So what we should do, IMHO
  • drop any received PDUs coming up from FR until we receive a NS-STATUS / NSVC-recovery
  • do not start the NS-VC FSM (sending NS-RESET) until we receive a NS-STATUS NSVC-recovery
  • stop the NS-VC FSM (from sending NS-RESET) when we receive a NS-STATUS NSVC-failure
Actions #1

Updated by laforge about 3 years ago

  • Status changed from New to In Progress
  • Assignee changed from lynxis to laforge
  • % Done changed from 0 to 30
Actions #2

Updated by laforge about 3 years ago

  • % Done changed from 30 to 80
Actions #3

Updated by laforge about 3 years ago

  • Status changed from In Progress to Resolved
  • % Done changed from 80 to 100

patches fully merged

Actions

Also available in: Atom PDF

Add picture from clipboard (Maximum size: 48.8 MB)