osmith has uploaded this change for review.
Add Cell Identifier List to BSSMAP RESET
Allow optionally sending the Cell Identifier List with the BSSMAP RESET.
This Osmocom extension will be used by OsmoBSCNAT to forward paging only
to relevant BSCs.
Related: SYS#5560
Related: OS#5522
Change-Id: I28e0f9497043e90f999b593602b7ffd812787430
---
M include/osmocom/bsc/bsc_msc_data.h
M src/osmo-bsc/bsc_vty.c
M src/osmo-bsc/osmo_bsc_sigtran.c
3 files changed, 58 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/66/27766/1
diff --git a/include/osmocom/bsc/bsc_msc_data.h b/include/osmocom/bsc/bsc_msc_data.h
index 3568716..f0675ac 100644
--- a/include/osmocom/bsc/bsc_msc_data.h
+++ b/include/osmocom/bsc/bsc_msc_data.h
@@ -180,6 +180,9 @@
enum osmux_usage use_osmux;
/* Whether we detected the MSC supports Osmux (during BSSMAP_RESET) */
bool remote_supports_osmux;
+ /* Whether we add Cell Identifier List to BSSMAP_RESET towards this
+ * MSC (OS#5522) */
+ bool reset_add_cil;
/* Proxy between IPA/SCCPlite encapsulated MGCP and UDP */
struct {
diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c
index 5976721..5ffed38 100644
--- a/src/osmo-bsc/bsc_vty.c
+++ b/src/osmo-bsc/bsc_vty.c
@@ -2591,6 +2591,9 @@
VTY_NEWLINE);
}
+ if (msc->reset_add_cil)
+ vty_out(vty, " reset-add-cil%s", VTY_NEWLINE);
+
msc_write_nri(vty, msc, false);
if (!msc->allow_attach)
@@ -2998,6 +3001,29 @@
return CMD_SUCCESS;
}
+DEFUN_USRATTR(cfg_msc_reset_add_cil,
+ cfg_msc_reset_add_cil_cmd,
+ X(BSC_VTY_ATTR_NEW_LCHAN),
+ "reset-add-cil",
+ "Add Cell Identifier List to BSSMAP Reset towards MSC\n")
+{
+ struct bsc_msc_data *msc = bsc_msc_data(vty);
+ msc->reset_add_cil = true;
+ return CMD_SUCCESS;
+}
+
+DEFUN_USRATTR(cfg_msc_no_reset_add_cil,
+ cfg_msc_no_reset_add_cil_cmd,
+ X(BSC_VTY_ATTR_NEW_LCHAN),
+ "no reset-add-cil",
+ NO_STR
+ "Do not add Cell Identifier List to BSSMAP Reset towards MSC\n")
+{
+ struct bsc_msc_data *msc = bsc_msc_data(vty);
+ msc->reset_add_cil = false;
+ return CMD_SUCCESS;
+}
+
ALIAS_DEPRECATED(deprecated_ussd_text,
cfg_net_bsc_mid_call_text_cmd,
"mid-call-text .TEXT",
@@ -3556,6 +3582,8 @@
install_element(MSC_NODE, &cfg_msc_mgw_x_osmo_ign_cmd);
install_element(MSC_NODE, &cfg_msc_no_mgw_x_osmo_ign_cmd);
install_element(MSC_NODE, &cfg_msc_osmux_cmd);
+ install_element(MSC_NODE, &cfg_msc_reset_add_cil_cmd);
+ install_element(MSC_NODE, &cfg_msc_no_reset_add_cil_cmd);
return 0;
}
diff --git a/src/osmo-bsc/osmo_bsc_sigtran.c b/src/osmo-bsc/osmo_bsc_sigtran.c
index 04c2e99..105996b 100644
--- a/src/osmo-bsc/osmo_bsc_sigtran.c
+++ b/src/osmo-bsc/osmo_bsc_sigtran.c
@@ -80,6 +80,30 @@
msg->l3h[1] = msgb_l3len(msg) - 2;
}
+/* Patch regular BSSMAP RESET to add extra IE with Cell Identifier List (osmocom extension, OS#5522) */
+static void _gsm0808_extend_reset_add_cil(struct msgb *msg)
+{
+ struct gsm0808_cell_id_list2 cil = {};
+ struct gsm0808_cell_id_list2 cil_bts;
+ struct gsm_bts *bts;
+ unsigned int bts_nr;
+ int rc;
+
+ for (bts_nr = 0; bts_nr < bsc_gsmnet->num_bts; bts_nr++) {
+ bts = gsm_bts_num(bsc_gsmnet, bts_nr);
+ gsm_bts_cell_id_list(&cil_bts, bts);
+ rc = gsm0808_cell_id_list_add(&cil, &cil_bts);
+ if (rc < 0) {
+ LOGP(DRESET, LOGL_ERROR, "Failed to generate Cell Identifier List, omitting from RESET\n");
+ return;
+ }
+ }
+
+ OSMO_ASSERT(msg->l3h[1] == msgb_l3len(msg) - 2); /* TL not in len */
+ gsm0808_enc_cell_id_list2(msg, &cil);
+ msg->l3h[1] = msgb_l3len(msg) - 2;
+}
+
/* Send reset to MSC */
void osmo_bsc_sigtran_tx_reset(const struct bsc_msc_data *msc)
{
@@ -94,6 +118,9 @@
if (msc_is_aoip(msc) && msc->use_osmux != OSMUX_USAGE_OFF)
_gsm0808_extend_announce_osmux(msg);
+ if (msc->reset_add_cil)
+ _gsm0808_extend_reset_add_cil(msg);
+
rate_ctr_inc(rate_ctr_group_get_ctr(msc->msc_ctrs, MSC_CTR_BSSMAP_TX_UDT_RESET));
osmo_sccp_tx_unitdata_msg(msc->a.sccp_user, &msc->a.bsc_addr,
&msc->a.msc_addr, msg);
To view, visit change 27766. To unsubscribe, or for help writing mail filters, visit settings.