a_iface: Announce Osmux support on RESET (ACK) send

Related: OS#2551
Depends: libosmocore.git I28f83e2e32b9533c99e65ccc1562900ac2aec74e
Change-Id: Id607f60749e923755cb38179bc283a7957670653
This commit is contained in:
Pau Espin 2019-05-07 12:23:49 +02:00 committed by Harald Welte
parent f9f38b568c
commit c9ba754235
1 changed files with 24 additions and 2 deletions

View File

@ -34,6 +34,7 @@
#include <osmocom/msc/debug.h>
#include <osmocom/msc/ran_msg_a.h>
#include <osmocom/msc/sccp_ran.h>
#include <osmocom/msc/gsm_data.h>
#define LOG_RAN_A_DEC(RAN_DEC, level, fmt, args...) \
LOG_RAN_DEC(RAN_DEC, DBSSAP, level, "BSSMAP: " fmt, ## args)
@ -1239,16 +1240,37 @@ enum reset_msg_type bssmap_is_reset_msg(const struct sccp_ran_inst *sri, const s
}
}
/* Patch regular BSSMAP RESET to add extra T to announce Osmux support (osmocom extension) */
static void _gsm0808_extend_announce_osmux(struct msgb *msg)
{
OSMO_ASSERT(msg->l3h[1] == msgb_l3len(msg) - 2); /*TL not in len */
msgb_put_u8(msg, GSM0808_IE_OSMO_OSMUX_SUPPORT);
msg->l3h[1] = msgb_l3len(msg) - 2;
}
struct msgb *bssmap_make_reset_msg(const struct sccp_ran_inst *sri, enum reset_msg_type type)
{
struct gsm_network *net = sri->user_data;
struct msgb *msg;
switch (type) {
case SCCP_RAN_MSG_RESET:
return gsm0808_create_reset();
msg = gsm0808_create_reset();
break;
case SCCP_RAN_MSG_RESET_ACK:
return gsm0808_create_reset_ack();
msg = gsm0808_create_reset_ack();
break;
default:
return NULL;
}
if (!msg)
return NULL;
if (net->use_osmux != OSMUX_USAGE_OFF)
_gsm0808_extend_announce_osmux(msg);
return msg;
}
struct msgb *bssmap_make_paging_msg(const struct sccp_ran_inst *sri, const struct gsm0808_cell_id *page_cell_id,