Actions
Bug #4999
closedns2: Don't transmit NS-RESET until link is fully recovered / available
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
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
Updated by laforge about 3 years ago
- % Done changed from 30 to 80
Implmemented by:
- https://gerrit.osmocom.org/c/libosmocore/+/22575
- https://gerrit.osmocom.org/c/libosmocore/+/22576
- https://gerrit.osmocom.org/c/libosmocore/+/22577
- https://gerrit.osmocom.org/c/libosmocore/+/22578
- https://gerrit.osmocom.org/c/libosmocore/+/22579
- https://gerrit.osmocom.org/c/libosmocore/+/22580
looks good so far in manual testing. No more transmit attempts until FR link + DLC is up, and no more tranmit attempts after a DLC/link is down until it recovers.
Updated by laforge about 3 years ago
- Status changed from In Progress to Resolved
- % Done changed from 80 to 100
patches fully merged
Actions