osmo-bsc: make sure only default SSNs are used

The VTY technically allows setting custom values for the
SSN. However, SSN values and their purposes are well
standardized.

If the user has configured an SSN, check that is compliant
to the standard. If not, warn and ignore the setting by
using the stanard SSN.

If the user left out the SSN, automatically use the standard
SSN.

Change-Id: Ib34fe0474f625b964dbfedfb4263fb0b5f976bdc
This commit is contained in:
Philipp Maier 2017-06-30 15:26:22 +02:00 committed by Neels Hofmeyr
parent d6278889c4
commit ead844e65e
2 changed files with 21 additions and 2 deletions

View File

@ -427,7 +427,7 @@ int osmo_bsc_sigtran_init(struct llist_head *mscs)
osmo_sccp_simple_client(NULL, msc_name, msc->a.g_calling_addr.pc,
OSMO_SS7_ASP_PROT_M3UA, 0, NULL, M3UA_PORT, "127.0.0.1");
msc->a.sccp_user =
osmo_sccp_user_bind(msc->a.sccp, msc_name, sccp_sap_up, SCCP_SSN_BSSAP);
osmo_sccp_user_bind(msc->a.sccp, msc_name, sccp_sap_up, msc->a.g_calling_addr.ssn);
/* Start MSC reset procedure */
msc->a.reset = a_reset_alloc(msc, msc_name, osmo_bsc_sigtran_reset_cb, msc);

View File

@ -28,6 +28,7 @@
#include <osmocom/core/talloc.h>
#include <osmocom/vty/logging.h>
#include <osmocom/sccp/sccp_types.h>
#include <time.h>
@ -717,6 +718,21 @@ DEFUN(cfg_msc_cs7_instance,
return CMD_SUCCESS;
}
/* Make sure only standard SSN numbers are used. If no ssn number is
* configured, silently apply the default SSN */
static void enforce_standard_ssn(struct vty *vty, struct osmo_sccp_addr *addr)
{
if (addr->presence & OSMO_SCCP_ADDR_T_SSN) {
if (addr->ssn != SCCP_SSN_BSSAP)
vty_out(vty,
"setting ssn different from the standard (%u) is not allowd!%s",
SCCP_SSN_BSSAP, VTY_NEWLINE);
}
addr->presence |= OSMO_SCCP_ADDR_T_SSN;
addr->ssn = SCCP_SSN_BSSAP;
}
DEFUN(cfg_msc_cs7_calling_addr,
cfg_msc_cs7_calling_addr_cmd,
"calling-addr NAME",
@ -739,8 +755,9 @@ DEFUN(cfg_msc_cs7_calling_addr,
return CMD_WARNING;
}
memcpy(&msc->a.g_calling_addr, calling_addr, sizeof(*calling_addr));
enforce_standard_ssn(vty, calling_addr);
memcpy(&msc->a.g_calling_addr, calling_addr, sizeof(*calling_addr));
return CMD_SUCCESS;
}
@ -766,6 +783,8 @@ DEFUN(cfg_msc_cs7_called_addr,
return CMD_WARNING;
}
enforce_standard_ssn(vty, called_addr);
memcpy(&msc->a.g_called_addr, called_addr, sizeof(*called_addr));
return CMD_SUCCESS;