Correctly handle ALIVE/TEST procedure with FR/NS-over-IP without SNS
If IP-SNS is not used we should wait for the RESET procedure to finish before sending NS-ALIVE. For IP-SNS start NS-ALIVE in both roles (sgsn and bss) and don't handle NS-RESET. Also unified the log messages a bit (received -> Rx). Related: SYS#5002 Change-Id: Ie01fee70297255b3d9c091bc2cec75b0f915c588
This commit is contained in:
parent
5c5b276600
commit
654f85e2b8
|
@ -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));
|
||||
|
|
Loading…
Reference in New Issue