From 3dd8355d7db8d3f204f9871cff2ce419c2d0785b Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 14 Sep 2020 11:38:01 +0200 Subject: NS_Emulation: Delay Tx of first NS-RESET until Provider tells us it's up Change-Id: I300cfeb120540940990a834596b0a83a539df080 --- library/NS_Emulation.ttcnpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/library/NS_Emulation.ttcnpp b/library/NS_Emulation.ttcnpp index dcc0e173..ee25d3e3 100644 --- a/library/NS_Emulation.ttcnpp +++ b/library/NS_Emulation.ttcnpp @@ -108,10 +108,6 @@ module NS_Emulation { } f_change_state(NSE_S_DEAD_BLOCKED); - /* Send the first NS-ALIVE to test the connection */ - if (not config.role_sgsn) { - f_sendReset(); - } } type component NS_Provider_CT { @@ -151,6 +147,7 @@ module NS_Emulation { timer Tns_alive := 3.0; timer Tns_test := 10.0; timer Tns_block := 10.0; + timer Tns_reset := 10.0; } type record NSConfigurationIP { @@ -185,6 +182,7 @@ module NS_Emulation { private function f_sendReset() runs on NS_CT { NSCP.send(ts_NS_RESET(NS_CAUSE_OM_INTERVENTION, config.nsvci, config.nsei)); + Tns_reset.start; g_state := NSE_S_WAIT_RESET; } @@ -219,12 +217,17 @@ module NS_Emulation { f_sendAlive(); } - [] NSCP.receive(NS_Provider_Evt:{link_status:=NS_PROV_LINK_STATUS_UP}) { + [config.role_sgsn] NSCP.receive(NS_Provider_Evt:{link_status:=NS_PROV_LINK_STATUS_UP}) { log("Provider Link came up: sending NS-ALIVE"); f_sendAlive(); Tns_test.start; } + [not config.role_sgsn] NSCP.receive(NS_Provider_Evt:{link_status:=NS_PROV_LINK_STATUS_UP}) { + log("Provider Link came up: sending NS-RESET"); + f_sendReset(); + } + /* Stop t_alive when receiving ALIVE-ACK */ [Tns_alive.running] NSCP.receive(t_NS_ALIVE_ACK) { log("NS-ALIVE-ACK received: stopping Tns-alive; starting Tns-test"); @@ -363,7 +366,14 @@ module NS_Emulation { private altstep as_wait_reset() runs on NS_CT { var PDU_NS rf; + [] Tns_reset.timeout { + /* If the sending entity of an NS-RESET PDU receives no NS-RESET-ACK PDU before timer + * Tns-reset expires the corresponding NS-VCs shall remain blocked and dead and the + * entire reset procedure shall be repeated */ + f_sendReset(); + } [] NSCP.receive(tr_NS_RESET_ACK(config.nsvci, config.nsei)) -> value rf { + Tns_reset.stop; f_change_state(NSE_S_ALIVE_BLOCKED); f_sendAlive(); f_sendUnblock(); -- cgit v1.2.3