BSSGP_Emulation: Handle FLUSH_LL_ACK differently

The BVCI that this message might contain should not be used to route it.
It referes to the BVCI that the PDUs were transferred to (BVCI (new)).

Instead broadcast to all components.

Change-Id: Ia1df35da44ef28d91501bb898e1059bf1390129b
This commit is contained in:
Daniel Willmann 2021-11-26 11:41:50 +01:00
parent b54acca15f
commit ef8e50ef30
1 changed files with 23 additions and 0 deletions

View File

@ -333,6 +333,16 @@ altstep as_sig_unblocked() runs on BSSGP_CT {
}
}
/* Broadcast FLUSH_LL_ACK no matter the BVCI */
[] BSCP.receive(f_BnsUdInd(tr_BSSGP_FLUSH_LL_ACK(?, ?, ?), 0)) -> value udi {
log("Rx FLUSH_LL_ACK: broadcasting");
for (var integer i := 0; i < lengthof(BvcTable); i := i+1) {
if (isbound(BvcTable[i].comp_ref) and BvcTable[i].comp_ref != null) {
BVC.send(udi) to BvcTable[i].comp_ref;
}
}
}
/* Route based on PTP BVCI in payload/IE of signaling PDU */
[] BSCP.receive(f_BnsUdInd(?, 0)) -> value udi {
var template (omit) BssgpBvci ptp_bvci := f_BSSGP_BVCI_get(udi.bssgp);
@ -1163,6 +1173,19 @@ private altstep as_ptp_unblocked() runs on BSSGP_BVC_CT {
}
}
[] BVC.receive(tr_ptp_BnsUdInd(tr_BSSGP_FLUSH_LL_ACK(?, ?, ?), 0)) -> value udi {
var BssgpDecoded dec := f_dec_bssgp(udi.bssgp);
log("Broadcasting FLUSH_LL_ACK ", dec);
/* broadcast this message to all components */
// TITAN DOESN'T DO THIS, *SIGH*: "BSSGP_SP.send(dec) to all component;"
for (var integer i := 0; i < sizeof(ClientTable); i := i+1) {
if (isbound(ClientTable[i].comp_ref) and ClientTable[i].comp_ref != null) {
f_send_bssgp_dec(dec, ClientTable[i].comp_ref, BSSGP_SP_SIG);
}
}
}
/* Any other SIG BSSGP message: If it has TLLI, route to component; otherwise broadcast */
[] BVC.receive(tr_ptp_BnsUdInd(?, 0)) -> value udi {
var BssgpDecoded dec := f_dec_bssgp(udi.bssgp);