aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Sperling <ssperling@sysmocom.de>2018-12-06 12:06:59 +0100
committerStefan Sperling <stsp@stsp.name>2018-12-11 13:08:00 +0000
commitafa030d6f912d0ff39063128e470e71fbdf758e3 (patch)
treec2cda51502037c2861f3704648af5af10540d114 /src
parentaa14bac370c625855ffce483aa337287340cfd71 (diff)
make gsup ipa name configurable in osmo-msc.cfg
Add a 'ipa-name' VTY command which overrides the default IPA name used by the MSC. This is a prerequisite for inter-MSC handover. Related: OS#3355 Change-Id: I317d6c59f77e92fbb2b875a83dc0ec2fa5cb6006
Diffstat (limited to 'src')
-rw-r--r--src/libmsc/gsm_04_08.c10
-rw-r--r--src/libmsc/msc_vty.c16
-rw-r--r--src/libvlr/vlr.c11
3 files changed, 30 insertions, 7 deletions
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index 95c31831c..7fe2c5037 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -1828,9 +1828,15 @@ int msc_vlr_alloc(struct gsm_network *net)
/* Launch the VLR, i.e. its GSUP connection */
int msc_vlr_start(struct gsm_network *net)
{
+ struct ipaccess_unit *ipa_dev;
+
OSMO_ASSERT(net->vlr);
- return vlr_start("MSC", net->vlr, net->gsup_server_addr_str,
- net->gsup_server_port);
+
+ ipa_dev = talloc_zero(net->vlr, struct ipaccess_unit);
+ ipa_dev->unit_name = "MSC";
+ ipa_dev->serno = net->msc_ipa_name; /* NULL unless configured via VTY */
+
+ return vlr_start(ipa_dev, net->vlr, net->gsup_server_addr_str, net->gsup_server_port);
}
struct msgb *gsm48_create_mm_serv_rej(enum gsm48_reject_value value)
diff --git a/src/libmsc/msc_vty.c b/src/libmsc/msc_vty.c
index e1d1b4020..06e11394a 100644
--- a/src/libmsc/msc_vty.c
+++ b/src/libmsc/msc_vty.c
@@ -458,6 +458,18 @@ DEFUN(cfg_msc_emergency_msisdn, cfg_msc_emergency_msisdn_cmd,
return CMD_SUCCESS;
}
+DEFUN(cfg_msc_ipa_name,
+ cfg_msc_ipa_name_cmd,
+ "ipa-name NAME",
+ "Set the IPA name of this MSC\n"
+ "A unique name for this MSC. For example: PLMN + redundancy server number: MSC-901-70-0. "
+ "This name is used for GSUP routing and must be set if more than one MSC is connected to the HLR. "
+ "The default is 'MSC-00-00-00-00-00-00'.\n")
+{
+ gsmnet->msc_ipa_name = talloc_strdup(gsmnet, argv[0]);
+ return CMD_SUCCESS;
+}
+
static int config_write_msc(struct vty *vty)
{
vty_out(vty, "msc%s", VTY_NEWLINE);
@@ -491,6 +503,9 @@ static int config_write_msc(struct vty *vty)
gsmnet->emergency.route_to_msisdn, VTY_NEWLINE);
}
+ if (gsmnet->msc_ipa_name)
+ vty_out(vty, " ipa-name %s%s", gsmnet->msc_ipa_name, VTY_NEWLINE);
+
mgcp_client_config_write(vty, " ");
#ifdef BUILD_IU
ranap_iu_vty_config_write(vty, " ");
@@ -1483,6 +1498,7 @@ void msc_vty_init(struct gsm_network *msc_network)
install_element(MSC_NODE, &cfg_msc_cs7_instance_iu_cmd);
install_element(MSC_NODE, &cfg_msc_paging_response_timer_cmd);
install_element(MSC_NODE, &cfg_msc_emergency_msisdn_cmd);
+ install_element(MSC_NODE, &cfg_msc_ipa_name_cmd);
mgcp_client_vty_init(msc_network, MSC_NODE, &msc_network->mgw.conf);
#ifdef BUILD_IU
diff --git a/src/libvlr/vlr.c b/src/libvlr/vlr.c
index 336991482..975b240ec 100644
--- a/src/libvlr/vlr.c
+++ b/src/libvlr/vlr.c
@@ -27,6 +27,7 @@
#include <osmocom/gsm/gsup.h>
#include <osmocom/gsm/apn.h>
#include <osmocom/gsm/gsm48.h>
+#include <osmocom/gsm/ipa.h>
#include <osmocom/msc/gsm_subscriber.h>
#include <osmocom/gsupclient/gsup_client.h>
#include <osmocom/msc/vlr.h>
@@ -1212,15 +1213,15 @@ struct vlr_instance *vlr_alloc(void *ctx, const struct vlr_ops *ops)
return vlr;
}
-int vlr_start(const char *gsup_unit_name, struct vlr_instance *vlr,
+int vlr_start(struct ipaccess_unit *ipa_dev, struct vlr_instance *vlr,
const char *gsup_server_addr_str, uint16_t gsup_server_port)
{
OSMO_ASSERT(vlr);
- vlr->gsup_client = osmo_gsup_client_create(vlr, gsup_unit_name,
- gsup_server_addr_str,
- gsup_server_port,
- &vlr_gsupc_read_cb, NULL);
+ vlr->gsup_client = osmo_gsup_client_create2(vlr, ipa_dev,
+ gsup_server_addr_str,
+ gsup_server_port,
+ &vlr_gsupc_read_cb, NULL);
if (!vlr->gsup_client)
return -ENOMEM;
vlr->gsup_client->data = vlr;