diff --git a/library/NS_Emulation.ttcnpp b/library/NS_Emulation.ttcnpp index 5fb2aa67a..4d3db4cd4 100644 --- a/library/NS_Emulation.ttcnpp +++ b/library/NS_Emulation.ttcnpp @@ -217,20 +217,9 @@ module NS_Emulation { f_sendAlive(); } - [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"); + log("Rx NS-ALIVE-ACK: stopping Tns-alive; starting Tns-test"); Tns_alive.stop; Tns_test.start; } @@ -246,17 +235,7 @@ module NS_Emulation { /* FIXME */ } - /* Respond to RESET with correct NSEI/NSVCI */ - [] NSCP.receive(tr_NS_RESET(?, config.nsvci, config.nsei)) -> value rf { - f_change_state(NSE_S_ALIVE_BLOCKED); - NSCP.send(ts_NS_RESET_ACK(config.nsvci, config.nsei)); - } - - /* Respond to RESET with wrong NSEI/NSVCI */ - [] NSCP.receive(tr_NS_RESET(?, ?, ?)) -> value rf { - log("Rx NS-RESET for unknown NSEI/NSVCI"); - /* FIXME */ - } + [not config.handle_sns] as_handle_reset(); [config.role_sgsn and config.handle_sns and ischosen(config.provider.ip)] as_sns_sgsn(); @@ -267,10 +246,48 @@ module NS_Emulation { } } + private altstep as_handle_reset() runs on NS_CT { + var PDU_NS rf; + + [config.role_sgsn] NSCP.receive(NS_Provider_Evt:{link_status:=NS_PROV_LINK_STATUS_UP}) { + log("Provider Link came up: waiting for NS-RESET"); + } + + [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(); + } + + /* Respond to RESET with correct NSEI/NSVCI */ + [] NSCP.receive(tr_NS_RESET(?, config.nsvci, config.nsei)) -> value rf { + f_change_state(NSE_S_ALIVE_BLOCKED); + NSCP.send(ts_NS_RESET_ACK(config.nsvci, config.nsei)); + log("Rx NS-RESET: Sending NS-ALIVE"); + f_sendAlive(); + Tns_test.start; + } + + /* Respond to RESET with wrong NSEI/NSVCI */ + [] NSCP.receive(tr_NS_RESET(?, ?, ?)) -> value rf { + log("Rx NS-RESET for unknown NSEI/NSVCI"); + /* FIXME */ + } + } + /* simple IP Sub-Network Service responder for the SGSN side. This is not a full implementation * of the protocol, merely sufficient to make the PCU/BSS side happy to proceed */ private altstep as_sns_sgsn() runs on NS_CT { var PDU_NS rf; + [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(); + } + + [not 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(); + } + [] NSCP.receive(tr_SNS_SIZE(config.nsei)) -> value rf { /* blindly acknowledge whatever the PCU sends */ NSCP.send(ts_SNS_SIZE_ACK(config.nsei, omit));