NS_Emulation: Delay Tx of first NS-RESET until Provider tells us it's up

Change-Id: I300cfeb120540940990a834596b0a83a539df080
This commit is contained in:
Harald Welte 2020-09-14 11:38:01 +02:00
parent 4a6a663654
commit 3dd8355d7d
1 changed files with 15 additions and 5 deletions

View File

@ -108,10 +108,6 @@ module NS_Emulation {
} }
f_change_state(NSE_S_DEAD_BLOCKED); 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 { type component NS_Provider_CT {
@ -151,6 +147,7 @@ module NS_Emulation {
timer Tns_alive := 3.0; timer Tns_alive := 3.0;
timer Tns_test := 10.0; timer Tns_test := 10.0;
timer Tns_block := 10.0; timer Tns_block := 10.0;
timer Tns_reset := 10.0;
} }
type record NSConfigurationIP { type record NSConfigurationIP {
@ -185,6 +182,7 @@ module NS_Emulation {
private function f_sendReset() runs on NS_CT { private function f_sendReset() runs on NS_CT {
NSCP.send(ts_NS_RESET(NS_CAUSE_OM_INTERVENTION, config.nsvci, config.nsei)); NSCP.send(ts_NS_RESET(NS_CAUSE_OM_INTERVENTION, config.nsvci, config.nsei));
Tns_reset.start;
g_state := NSE_S_WAIT_RESET; g_state := NSE_S_WAIT_RESET;
} }
@ -219,12 +217,17 @@ module NS_Emulation {
f_sendAlive(); 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"); log("Provider Link came up: sending NS-ALIVE");
f_sendAlive(); f_sendAlive();
Tns_test.start; 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 */ /* Stop t_alive when receiving ALIVE-ACK */
[Tns_alive.running] NSCP.receive(t_NS_ALIVE_ACK) { [Tns_alive.running] NSCP.receive(t_NS_ALIVE_ACK) {
log("NS-ALIVE-ACK received: stopping Tns-alive; starting Tns-test"); 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 { private altstep as_wait_reset() runs on NS_CT {
var PDU_NS rf; 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 { [] NSCP.receive(tr_NS_RESET_ACK(config.nsvci, config.nsei)) -> value rf {
Tns_reset.stop;
f_change_state(NSE_S_ALIVE_BLOCKED); f_change_state(NSE_S_ALIVE_BLOCKED);
f_sendAlive(); f_sendAlive();
f_sendUnblock(); f_sendUnblock();