make gsup ipa name configurable in osmo-sgsn.cfg

Add a 'gsup ipa-name' VTY command which overrides the default
IPA name used by the SGSN on the GSUP link towards the HLR.
This is required for GSUP routing in multi-SGSN networks.

The 'gsup ipa-name' option can only be set via the config file
because changing the IPA name at run-time conflicts with active
GSUP connections and routes configured in the HLR. The osmo-sgsn
program must be restarted if its IPA name needs to change.

Related: OS#3356

Change-Id: Ib2f65fed9f56b9718e8a9647e3f01dce69870c1f
diff --git a/src/gprs/sgsn_vty.c b/src/gprs/sgsn_vty.c
index 601b3c5..3757c07 100644
--- a/src/gprs/sgsn_vty.c
+++ b/src/gprs/sgsn_vty.c
@@ -203,6 +203,8 @@
 		vty_out(vty, " encryption %s%s",
 			get_value_string(gprs_cipher_names, g_cfg->cipher),
 			VTY_NEWLINE);
+	if (g_cfg->sgsn_ipa_name)
+		vty_out(vty, " gsup ipa-name %s%s", g_cfg->sgsn_ipa_name, VTY_NEWLINE);
 	if (g_cfg->gsup_server_addr.sin_addr.s_addr)
 		vty_out(vty, " gsup remote-ip %s%s",
 			inet_ntoa(g_cfg->gsup_server_addr.sin_addr), VTY_NEWLINE);
@@ -1075,6 +1077,25 @@
 	return CMD_SUCCESS;
 }
 
+DEFUN(cfg_gsup_ipa_name,
+	cfg_gsup_ipa_name_cmd,
+	"gsup ipa-name NAME",
+	"GSUP Parameters\n"
+	"Set the IPA name of this SGSN\n"
+	"A unique name for this SGSN. For example: PLMN + redundancy server number: SGSN-901-70-0. "
+	"This name is used for GSUP routing and must be set if more than one SGSN is connected to the network. "
+	"The default is 'SGSN-00-00-00-00-00-00'.\n")
+{
+	if (vty->type != VTY_FILE) {
+		vty_out(vty, "The IPA name cannot be changed at run-time; "
+			"It can only be set in the configuraton file.%s", VTY_NEWLINE);
+		return CMD_WARNING;
+	}
+
+	g_cfg->sgsn_ipa_name = talloc_strdup(tall_vty_ctx, argv[0]);
+	return CMD_SUCCESS;
+}
+
 DEFUN(cfg_gsup_remote_ip, cfg_gsup_remote_ip_cmd,
 	"gsup remote-ip A.B.C.D",
 	"GSUP Parameters\n"
@@ -1365,6 +1386,7 @@
 	install_element(SGSN_NODE, &cfg_imsi_acl_cmd);
 	install_element(SGSN_NODE, &cfg_auth_policy_cmd);
 	install_element(SGSN_NODE, &cfg_encrypt_cmd);
+	install_element(SGSN_NODE, &cfg_gsup_ipa_name_cmd);
 	install_element(SGSN_NODE, &cfg_gsup_remote_ip_cmd);
 	install_element(SGSN_NODE, &cfg_gsup_remote_port_cmd);
 	install_element(SGSN_NODE, &cfg_gsup_oap_id_cmd);