bts: Really drop the BTS in case of an OML NACK
The previous code didn't work as expected. The trx and dst pointer are located in an union and in the case of the Abis code the dst is used to point to the signalling link timeslot and not the TRX. The is_ipaccess_bts always returned false because the dst was casted to a trx while it was no trx. This fix was tested with the nack_test/NACKTest.st of the test repo.
This commit is contained in:
parent
75172124e7
commit
de1674ab02
|
@ -185,6 +185,7 @@ struct nm_om2k_signal_data {
|
|||
|
||||
struct nm_nack_signal_data {
|
||||
struct msgb *msg;
|
||||
struct gsm_bts *bts;
|
||||
uint8_t mt;
|
||||
};
|
||||
|
||||
|
|
|
@ -548,6 +548,7 @@ static int abis_nm_rcvmsg_fom(struct msgb *mb)
|
|||
|
||||
nack_data.msg = mb;
|
||||
nack_data.mt = mt;
|
||||
nack_data.bts = sign_link->trx->bts;
|
||||
osmo_signal_dispatch(SS_NM, S_NM_NACK, &nack_data);
|
||||
abis_nm_queue_send_next(sign_link->trx->bts);
|
||||
return 0;
|
||||
|
|
|
@ -43,8 +43,6 @@ extern int hsl_setup(struct gsm_network *gsmnet);
|
|||
/* Callback function for NACK on the OML NM */
|
||||
static int oml_msg_nack(struct nm_nack_signal_data *nack)
|
||||
{
|
||||
struct gsm_bts *bts;
|
||||
|
||||
if (nack->mt == NM_MT_SET_BTS_ATTR_NACK) {
|
||||
|
||||
LOGP(DNM, LOGL_ERROR, "Failed to set BTS attributes. That is fatal. "
|
||||
|
@ -58,13 +56,13 @@ static int oml_msg_nack(struct nm_nack_signal_data *nack)
|
|||
return 0;
|
||||
|
||||
drop_bts:
|
||||
if (!nack->msg || !nack->msg->trx)
|
||||
if (!nack->bts) {
|
||||
LOGP(DNM, LOGL_ERROR, "Unknown bts. Can not drop it.\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
bts = nack->msg->trx->bts;
|
||||
|
||||
if (is_ipaccess_bts(bts))
|
||||
ipaccess_drop_oml(bts);
|
||||
if (is_ipaccess_bts(nack->bts))
|
||||
ipaccess_drop_oml(nack->bts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue