BSSGP_Emulation: Fix inbound BVC-RESET
We cannot handle this in as_ptp_allstate(), as the respective clauses are never hit: In as_ptp_unblocked() we broadcast all BSSGP messages without a TLLI, "hiding" the BVC-RESET handling. Change-Id: Ie3e7a997554e6af42ae7e7294829b6f8d2447d60
This commit is contained in:
parent
239aa50e8c
commit
ab50cc295b
|
@ -994,6 +994,8 @@ private altstep as_ptp_blocked() runs on BSSGP_BVC_CT {
|
||||||
f_ptp_change_state(BVC_S_UNBLOCKED);
|
f_ptp_change_state(BVC_S_UNBLOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[] as_ptp_handle_inbound_reset();
|
||||||
|
|
||||||
[] g_T2.timeout {
|
[] g_T2.timeout {
|
||||||
/* BVC-RESET-ACK PDU was not received within T2: retransmit */
|
/* BVC-RESET-ACK PDU was not received within T2: retransmit */
|
||||||
f_ptp_sendReset(g_last_reset_cause);
|
f_ptp_sendReset(g_last_reset_cause);
|
||||||
|
@ -1041,6 +1043,8 @@ private altstep as_ptp_unblocked() runs on BSSGP_BVC_CT {
|
||||||
f_ptp_sendBlock(g_last_block_cause);
|
f_ptp_sendBlock(g_last_block_cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[] as_ptp_handle_inbound_reset();
|
||||||
|
|
||||||
/* simply acknowledge all per-BVC Flow Control Messages */
|
/* simply acknowledge all per-BVC Flow Control Messages */
|
||||||
[g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_FC_BVC, g_cfg.bvci)) -> value udi {
|
[g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_FC_BVC, g_cfg.bvci)) -> value udi {
|
||||||
var OCT1 tag := udi.bssgp.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value;
|
var OCT1 tag := udi.bssgp.pDU_BSSGP_FLOW_CONTROL_BVC.tag.unstructured_Value;
|
||||||
|
@ -1148,6 +1152,26 @@ private altstep as_ptp_unblocked() runs on BSSGP_BVC_CT {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private altstep as_ptp_handle_inbound_reset() runs on BSSGP_BVC_CT {
|
||||||
|
var NsUnitdataIndication udi;
|
||||||
|
/* we are a SGSN: BSS/PCU-originated RESET must have a cell ID */
|
||||||
|
[g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_RESET(?, g_cfg.bvci, g_cfg.cell_id), 0)) -> value udi {
|
||||||
|
log("Rx BVC-RESET from BVCI=", g_cfg.bvci);
|
||||||
|
/* Respond to RESET with correct BVCI but without CellID */
|
||||||
|
BVC.send(ts_ptp_BnsUdReq(ts_BVC_RESET_ACK(g_cfg.bvci, omit), 0, g_bvc_lsp));
|
||||||
|
/* FIXME: reset all state? What about clients? */
|
||||||
|
f_ptp_change_state(BVC_S_UNBLOCKED);
|
||||||
|
}
|
||||||
|
/* we are a BSS/PCU: SGSN-originated RESET must not have a cell ID */
|
||||||
|
[not g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_RESET(?, g_cfg.bvci, omit), 0)) -> value udi {
|
||||||
|
log("Rx BVC-RESET from BVCI=", g_cfg.bvci);
|
||||||
|
/* Respond to RESET with correct BVCI with CellID */
|
||||||
|
BVC.send(ts_ptp_BnsUdReq(ts_BVC_RESET_ACK(g_cfg.bvci, g_cfg.cell_id), 0, g_bvc_lsp));
|
||||||
|
/* FIXME: reset all state? What about clients? */
|
||||||
|
f_ptp_change_state(BVC_S_UNBLOCKED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Events permitted in all states */
|
/* Events permitted in all states */
|
||||||
private altstep as_ptp_allstate() runs on BSSGP_BVC_CT {
|
private altstep as_ptp_allstate() runs on BSSGP_BVC_CT {
|
||||||
var NsUnitdataIndication udi;
|
var NsUnitdataIndication udi;
|
||||||
|
@ -1171,23 +1195,6 @@ private altstep as_ptp_allstate() runs on BSSGP_BVC_CT {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we are a SGSN: BSS/PCU-originated RESET must have a cell ID */
|
|
||||||
[g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_RESET(?, g_cfg.bvci, g_cfg.cell_id), 0)) -> value udi {
|
|
||||||
log("Rx BVC-RESET from BVCI=", g_cfg.bvci);
|
|
||||||
/* Respond to RESET with correct BVCI but without CellID */
|
|
||||||
BVC.send(ts_ptp_BnsUdReq(ts_BVC_RESET_ACK(g_cfg.bvci, omit), 0, g_bvc_lsp));
|
|
||||||
/* FIXME: reset all state? What about clients? */
|
|
||||||
f_ptp_change_state(BVC_S_UNBLOCKED);
|
|
||||||
}
|
|
||||||
/* we are a BSS/PCU: SGSN-originated RESET must not have a cell ID */
|
|
||||||
[not g_sgsn_role] BVC.receive(tr_ptp_BnsUdInd(tr_BVC_RESET(?, g_cfg.bvci, omit), 0)) -> value udi {
|
|
||||||
log("Rx BVC-RESET from BVCI=", g_cfg.bvci);
|
|
||||||
/* Respond to RESET with correct BVCI with CellID */
|
|
||||||
BVC.send(ts_ptp_BnsUdReq(ts_BVC_RESET_ACK(g_cfg.bvci, g_cfg.cell_id), 0, g_bvc_lsp));
|
|
||||||
/* FIXME: reset all state? What about clients? */
|
|
||||||
f_ptp_change_state(BVC_S_UNBLOCKED);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Ignore those for now */
|
/* Ignore those for now */
|
||||||
[] BVC.receive(ASP_Event:?) { }
|
[] BVC.receive(ASP_Event:?) { }
|
||||||
[] BVC.receive(BssgpStatusIndication:?) { }
|
[] BVC.receive(BssgpStatusIndication:?) { }
|
||||||
|
|
Loading…
Reference in New Issue