aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2019-05-07 12:23:49 +0200
committerHarald Welte <laforge@gnumonks.org>2019-05-19 07:28:02 +0000
commitc9ba754235cbe2cb59272b180888231d55a85404 (patch)
tree003a56bd20a3ed41e0cd48f94990f06f8e8b9201
parentf9f38b568cdf599cbdb7d188fabec2f65f816ad6 (diff)
a_iface: Announce Osmux support on RESET (ACK) send
-rw-r--r--src/libmsc/ran_msg_a.c26
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,