OsmoPCU sends BVC-RESET over NS-VC which is still in state BLOCKED
- OsmoPCU is performing the NS-RESET procedure successfully
- OsmoPCU is performing the NS-ALIVE procedure successfully
- OsmoPCU is sending the BVC-RESET message before the NS-VC is unblocked using the NS-UNBLOCK procedure
This is too soon. A spec compliant implementation of the SGSN side will thus reject the (first) BVC-RESET due to this too early transmission
send NS_POUT_UNBLOCK_ACK before signalling S_NS_UNBLOCK
In gprs_ns_process_msg(), we were dispatching the S_NS_UNBLOCK
signal before sending out the NS_POUT_UNBLOCK_ACK message.
Signal handlers might send messages to the other side, assuming
that NS is now unblocked. However, since such messages will arrive
before the UNBLOCK_ACK message the receiver might discard them.
This problem has been observed with our TTCN3 BSSGP_Emulation
as a peer to osmo-pcu.
This patch makes TTCN3 PCU TC_paging() test pass regardless of
whether the test or osmo-pcu is started first. Before this patch,
this test would only pass if the test was started before osmo-pcu.
A remaining problem is that the test does not yet keep passing
reliably unless osmo-pcu is restarted between test runs.
document unblock-ack vs. signalling in gprs_ns_process_msg()
Since commit 797558ea1768e464f9559c5f7a4f3f4285c5de25 we send the
NS_UNBLOCK_ACK message before dispatching the NS_UNBLOCK signal,
instead of afterwards.
Add comments which explain the intended order of events.
update gbproxy test expected output
libosmocore commit 797558ea1768e464f9559c5f7a4f3f4285c5de25
changed the order of NS_UNBLOCK_ACK transmission dispatching
of the NS_UNBLOCK signal. Update expected output of gbproxy
tests accordingly to make these tests pass again.
#5 Updated by msuraev over 3 years ago
- Status changed from In Progress to Feedback
- Assignee changed from msuraev to laforge
I'm unable to reproduce this locally with current master of libosmocore, OsmoPCU and OsmoSGSN (I'm using osmo-bts-virtual):
20171129154912764 <0008> gprs_ns.c:266 NSVCI=65534 Creating NS-VC 20171129154912765 <0008> gprs_ns.c:1622 Listening for nsip packets from 10.9.1.105:23000 on 0.0.0.0:23100 20171129154912765 <0008> gprs_ns.c:1641 NS UDP socket at 0.0.0.0:23100 20171129154912765 <0008> gprs_ns.c:266 NSVCI=101 Creating NS-VC 20171129154912765 <0008> gprs_ns.c:1659 NSEI=101 RESET procedure based on API request 20171129154912765 <0008> gprs_ns.c:449 NSEI=101 Tx NS RESET (NSVCI=101, cause=O&M intervention) 20171129154912765 <0008> gprs_ns.c:1523 recv error Connection refused during NSIP recv 20171129154915765 <0008> gprs_ns.c:449 NSEI=101 Tx NS RESET (NSVCI=101, cause=O&M intervention) 20171129154915765 <0008> gprs_ns.c:1523 recv error Connection refused during NSIP recv 20171129154918765 <0008> gprs_ns.c:449 NSEI=101 Tx NS RESET (NSVCI=101, cause=O&M intervention) 20171129154918766 <0008> gprs_ns.c:998 NSVCI=101 Rx NS RESET ACK (NSEI=101, NSVCI=101) 20171129154918766 <0008> gprs_ns.c:558 NSEI=101 Tx NS UNBLOCK (NSVCI=101) 20171129154918766 <0008> gprs_ns.c:1420 NSEI=101 Rx NS UNBLOCK ACK 20171129154918767 <000a> gprs_bssgp_pcu.cpp:541 NS-VC 101 is unblocked. 20171129154918768 <0009> gprs_bssgp_bss.c:292 BSSGP (BVCI=0) Tx BVC-RESET CAUSE=O&M intervention 20171129154918768 <0009> gprs_bssgp_pcu.cpp:299 Rx BSSGP BVCI=-1 (SIGN) BVC_RESET_ACK 20171129154918768 <0009> gprs_bssgp_bss.c:292 BSSGP (BVCI=2) Tx BVC-RESET CAUSE=O&M intervention 20171129154918768 <0009> gprs_bssgp_pcu.cpp:299 Rx BSSGP BVCI=-1 (SIGN) BVC_RESET_ACK 20171129154918768 <0009> gprs_bssgp_bss.c:272 BSSGP (BVCI=2) Tx BVC-BLOCK 20171129154918769 <0009> gprs_bssgp_pcu.cpp:310 Rx BSSGP BVCI=-1 (SIGN) BVC_UNBLOCK_ACK
What kind of configs were used while taking this capture?
Which version were used?
Is there test system available?
#6 Updated by laforge over 3 years ago
- Status changed from Feedback to New
- Assignee changed from laforge to msuraev
this was done on a sysmoBTS while working on interconnection with a Quortus SGSN. Nobody made claims that this can be reproduced with unmodified OsmoSGSN.
You have to re-create the scenario yourself, i.e. make sure that the real or simulated SGSN performs NS-RESET and NS-ALIVE but never NS-UNBLOCKS. If you cannot reproduce then, and/or cannot see based on code review how this might happen, close/reject the ticket.