gbproxy: Check SGSN-orignated BVC RESET if BSS BVC is gone
IF the BSS-BVC is gone gbproxy blocks the BVC towards the SGSN (this is the only thing it can do since there is no BVC-REMOVE). If the SGSN ever decides to reset that BVC the gbproxy should not ACK it, but instead consider the BVCI unknown. Change-Id: Ic57b39a77adf71abda99ef8af7da1592e2225a0d Related: SYS#5628, OS#5236
This commit is contained in:
parent
40a45d143f
commit
c5bbcc6279
|
@ -1158,6 +1158,21 @@ private function f_TC_ul_unitdata_pool_failure(charstring id) runs on BSSGP_Conn
|
|||
setverdict(pass);
|
||||
}
|
||||
|
||||
private function f_disable_ns_pcu(integer pcu_idx) runs on test_CT
|
||||
{
|
||||
var integer i;
|
||||
|
||||
connect(self:NS_CTRL, g_pcu[pcu_idx].vc_NS:NS_CTRL);
|
||||
for (i := 0; i < lengthof(mp_nsconfig_pcu[pcu_idx].nsvc); i := i + 1) {
|
||||
var uint16_t nsvci := mp_nsconfig_pcu[pcu_idx].nsvc[i].nsvci;
|
||||
var NsDisableVcRequest tx_disar;
|
||||
tx_disar.nsvci := nsvci;
|
||||
log(tx_disar);
|
||||
NS_CTRL.send(tx_disar);
|
||||
}
|
||||
disconnect(self:NS_CTRL, g_pcu[pcu_idx].vc_NS:NS_CTRL);
|
||||
}
|
||||
|
||||
testcase TC_ul_unitdata_pool_failure() runs on test_CT
|
||||
{
|
||||
var integer i;
|
||||
|
@ -2707,6 +2722,7 @@ private function f_reset_ptp_bvc_from_sgsn(integer pcu_idx, integer bvc_idx) run
|
|||
deactivate(d);
|
||||
setverdict(pass);
|
||||
}
|
||||
|
||||
/* Send a BVC-RESET for a PTP BVC from the SGSN side: expect it to propagate */
|
||||
testcase TC_bvc_reset_ptp_from_sgsn() runs on test_CT
|
||||
{
|
||||
|
@ -2716,6 +2732,41 @@ testcase TC_bvc_reset_ptp_from_sgsn() runs on test_CT
|
|||
f_cleanup();
|
||||
}
|
||||
|
||||
/* Send a BVC-RESET for a blocked PTP BVC from the SGSN side: expect NS-STATUS with cause BVCI unknown */
|
||||
testcase TC_bvc_reset_blocked_ptp_from_sgsn() runs on GlobalTest_CT
|
||||
{
|
||||
f_init();
|
||||
f_global_init();
|
||||
f_sleep(3.0);
|
||||
/* Make sure NS for BVC is down and try again */
|
||||
f_disable_ns_pcu(0);
|
||||
f_sleep(10.0);
|
||||
|
||||
var BssgpBvcConfig bvc_cfg := g_pcu[0].cfg.bvc[0];
|
||||
SGSN_MGMT.send(BssgpResetRequest:{cause:=BSSGP_CAUSE_OM_INTERVENTION}) to f_get_sgsn_bvc_ct(0, bvc_cfg.bvci);
|
||||
|
||||
/* Check for NS-STATUS with BVCI unknown, ignore other messages */
|
||||
var template (present) PDU_BSSGP exp_rx :=
|
||||
tr_BSSGP_STATUS(bvc_cfg.bvci, BSSGP_CAUSE_BVCI_UNKNOWN, ?);
|
||||
|
||||
alt {
|
||||
[] G_SGSN[0].receive(exp_rx) {
|
||||
setverdict(pass);
|
||||
}
|
||||
[] SGSN_MGMT.receive(BssgpStatusIndication:{*, bvc_cfg.bvci, BVC_S_UNBLOCKED}) {
|
||||
setverdict(fail, "BVC unblocked that should be gone on BSS side");
|
||||
}
|
||||
[] SGSN_MGMT.receive {
|
||||
repeat;
|
||||
}
|
||||
[] G_SGSN[0].receive {
|
||||
repeat;
|
||||
}
|
||||
}
|
||||
|
||||
f_cleanup();
|
||||
}
|
||||
|
||||
private altstep as_ignore_mgmt(BSSGP_BVC_MGMT_PT pt) {
|
||||
[] pt.receive {repeat; }
|
||||
}
|
||||
|
@ -3531,6 +3582,7 @@ control {
|
|||
execute( TC_bvc_reset_ptp_from_bss() );
|
||||
execute( TC_bvc_reset_sig_from_bss() );
|
||||
execute( TC_bvc_reset_ptp_from_sgsn() );
|
||||
execute( TC_bvc_reset_blocked_ptp_from_sgsn() );
|
||||
execute( TC_bvc_reset_sig_from_sgsn() );
|
||||
if (mp_enable_bss_load_sharing) {
|
||||
/* don't enable this by default, as we don't yet have any automatic test setup for FR with 4 NS-VC */
|
||||
|
|
|
@ -323,7 +323,9 @@ altstep as_sig_unblocked() runs on BSSGP_CT {
|
|||
|
||||
/* Messages with BVCI = 0 (Signaling) in BVCI field of NS */
|
||||
[] BSCP.receive(f_BnsUdInd(tr_GLOBAL_SIG, 0)) -> value udi {
|
||||
GLOBAL.send(udi.bssgp);
|
||||
if (GLOBAL.checkstate("Connected")) {
|
||||
GLOBAL.send(udi.bssgp);
|
||||
}
|
||||
}
|
||||
[] BSCP.receive(f_BnsUdInd(tr_RIM, 0)) -> value udi {
|
||||
if (RIM.checkstate("Connected")) {
|
||||
|
|
Loading…
Reference in New Issue