diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2019-05-07 12:23:49 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2019-05-19 07:28:02 +0000 |
commit | c9ba754235cbe2cb59272b180888231d55a85404 (patch) | |
tree | 003a56bd20a3ed41e0cd48f94990f06f8e8b9201 /src/libmsc | |
parent | f9f38b568cdf599cbdb7d188fabec2f65f816ad6 (diff) |
a_iface: Announce Osmux support on RESET (ACK) send
Related: OS#2551
Depends: libosmocore.git I28f83e2e32b9533c99e65ccc1562900ac2aec74e
Change-Id: Id607f60749e923755cb38179bc283a7957670653
Diffstat (limited to 'src/libmsc')
-rw-r--r-- | src/libmsc/ran_msg_a.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/libmsc/ran_msg_a.c b/src/libmsc/ran_msg_a.c index 805308c1b..64590a1fe 100644 --- a/src/libmsc/ran_msg_a.c +++ b/src/libmsc/ran_msg_a.c @@ -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, |