[MERGED] osmo-hlr[master]: VTY: Add hlr node and bind ip field

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Neels Hofmeyr gerrit-no-reply at lists.osmocom.org
Sat Jun 3 14:18:49 UTC 2017


Neels Hofmeyr has submitted this change and it was merged.

Change subject: VTY: Add hlr node and bind ip field
......................................................................


VTY: Add hlr node and bind ip field

With this patch the address osmo-hlr binds to can be changed to
something else than 0.0.0.0

Change-Id: I79f7a300480f308b21116dd14d1698be38725afd
---
M doc/examples/osmo-hlr.cfg
M src/hlr.c
M src/hlr.h
M src/hlr_vty.c
M src/hlr_vty.h
5 files changed, 114 insertions(+), 5 deletions(-)

Approvals:
  Neels Hofmeyr: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/doc/examples/osmo-hlr.cfg b/doc/examples/osmo-hlr.cfg
index 2b49958..853d3c2 100644
--- a/doc/examples/osmo-hlr.cfg
+++ b/doc/examples/osmo-hlr.cfg
@@ -14,3 +14,6 @@
  bind 127.0.0.1
 ctrl
  bind 127.0.0.1
+hlr
+ gsup
+  bind ip 127.0.0.1
diff --git a/src/hlr.c b/src/hlr.c
index b5777e2..7d1bf75 100644
--- a/src/hlr.c
+++ b/src/hlr.c
@@ -415,6 +415,7 @@
 	.version	= PACKAGE_VERSION,
 	.copyright	= vlr_copyright,
 	.is_config_node	= hlr_vty_is_config_node,
+	.go_parent_cb   = hlr_vty_go_parent,
 };
 
 int main(int argc, char **argv)
@@ -435,7 +436,7 @@
 	vty_init(&vty_info);
 	ctrl_vty_init(hlr_ctx);
 	handle_options(argc, argv);
-	hlr_vty_init(&hlr_log_info);
+	hlr_vty_init(g_hlr, &hlr_log_info);
 
 	rc = vty_read_config_file(cmdline_opts.config_file, NULL);
 	if (rc < 0) {
@@ -465,8 +466,8 @@
 		exit(1);
 	}
 
-	g_hlr->gs = osmo_gsup_server_create(hlr_ctx, NULL, 2222, read_cb,
-					    &g_lu_ops);
+	g_hlr->gs = osmo_gsup_server_create(hlr_ctx, g_hlr->gsup_bind_addr, 2222,
+					    read_cb, &g_lu_ops);
 	if (!g_hlr->gs) {
 		LOGP(DMAIN, LOGL_FATAL, "Error starting GSUP server\n");
 		exit(1);
diff --git a/src/hlr.h b/src/hlr.h
index 1e8eff8..f63bc2b 100644
--- a/src/hlr.h
+++ b/src/hlr.h
@@ -34,4 +34,7 @@
 	/* Control Interface */
 	struct ctrl_handle *ctrl;
 	const char *ctrl_bind_addr;
+
+	/* Local bind addr */
+	char *gsup_bind_addr;
 };
diff --git a/src/hlr_vty.c b/src/hlr_vty.c
index e4eef8f..946117e 100644
--- a/src/hlr_vty.c
+++ b/src/hlr_vty.c
@@ -20,11 +20,93 @@
  *
  */
 
+#include <osmocom/core/talloc.h>
 #include <osmocom/vty/vty.h>
 #include <osmocom/vty/command.h>
 #include <osmocom/vty/logging.h>
 
 #include "hlr_vty.h"
+
+static struct hlr *g_hlr = NULL;
+
+struct cmd_node hlr_node = {
+	HLR_NODE,
+	"%s(config-hlr)# ",
+	1,
+};
+
+DEFUN(cfg_hlr,
+      cfg_hlr_cmd,
+      "hlr",
+      "Configure the HLR")
+{
+	vty->node = HLR_NODE;
+	return CMD_SUCCESS;
+}
+
+struct cmd_node gsup_node = {
+	GSUP_NODE,
+	"%s(config-hlr-gsup)# ",
+	1,
+};
+
+DEFUN(cfg_gsup,
+      cfg_gsup_cmd,
+      "gsup",
+      "Configure GSUP options")
+{
+	vty->node = GSUP_NODE;
+	return CMD_SUCCESS;
+}
+
+static int config_write_hlr(struct vty *vty)
+{
+	vty_out(vty, "hlr%s", VTY_NEWLINE);
+	return CMD_SUCCESS;
+}
+
+static int config_write_hlr_gsup(struct vty *vty)
+{
+	vty_out(vty, " gsup%s", VTY_NEWLINE);
+	if (g_hlr->gsup_bind_addr)
+		vty_out(vty, "  bind ip %s%s", g_hlr->gsup_bind_addr, VTY_NEWLINE);
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_hlr_gsup_bind_ip,
+      cfg_hlr_gsup_bind_ip_cmd,
+      "bind ip A.B.C.D",
+      "Listen/Bind related socket option\n"
+      IP_STR
+      "IPv4 Address to bind the GSUP interface to\n")
+{
+	if(g_hlr->gsup_bind_addr)
+		talloc_free(g_hlr->gsup_bind_addr);
+	g_hlr->gsup_bind_addr = talloc_strdup(g_hlr, argv[0]);
+
+	return CMD_SUCCESS;
+}
+
+int hlr_vty_go_parent(struct vty *vty)
+{
+	switch (vty->node) {
+	case GSUP_NODE:
+		vty->node = HLR_NODE;
+		vty->index = NULL;
+		break;
+	default:
+	case HLR_NODE:
+		vty->node = CONFIG_NODE;
+		vty->index = NULL;
+		break;
+	case CONFIG_NODE:
+		vty->node = ENABLE_NODE;
+		vty->index = NULL;
+		break;
+	}
+
+	return vty->node;
+}
 
 int hlr_vty_is_config_node(struct vty *vty, int node)
 {
@@ -38,7 +120,19 @@
 	}
 }
 
-void hlr_vty_init(const struct log_info *cat)
+void hlr_vty_init(struct hlr *hlr, const struct log_info *cat)
 {
+	g_hlr = hlr;
+
 	logging_vty_add_cmds(cat);
+
+	install_element(CONFIG_NODE, &cfg_hlr_cmd);
+	install_node(&hlr_node, config_write_hlr);
+	install_default(HLR_NODE);
+
+	install_element(HLR_NODE, &cfg_gsup_cmd);
+	install_node(&gsup_node, config_write_hlr_gsup);
+	install_default(GSUP_NODE);
+
+	install_element(GSUP_NODE, &cfg_hlr_gsup_bind_ip_cmd);
 }
diff --git a/src/hlr_vty.h b/src/hlr_vty.h
index abc9804..cd2ff73 100644
--- a/src/hlr_vty.h
+++ b/src/hlr_vty.h
@@ -24,6 +24,14 @@
 
 #include <osmocom/core/logging.h>
 #include <osmocom/vty/vty.h>
+#include <osmocom/vty/command.h>
+#include "hlr.h"
+
+enum hlr_vty_node {
+	HLR_NODE = _LAST_OSMOVTY_NODE + 1,
+	GSUP_NODE,
+};
 
 int hlr_vty_is_config_node(struct vty *vty, int node);
-void hlr_vty_init(const struct log_info *cat);
+int hlr_vty_go_parent(struct vty *vty);
+void hlr_vty_init(struct hlr *hlr, const struct log_info *cat);

-- 
To view, visit https://gerrit.osmocom.org/2809
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I79f7a300480f308b21116dd14d1698be38725afd
Gerrit-PatchSet: 2
Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Owner: Pau Espin Pedrol <pespin at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Pau Espin Pedrol <pespin at sysmocom.de>



More information about the gerrit-log mailing list