<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc-nat/+/26659">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add vty interface<br><br>Related: OS#2545<br>Change-Id: I6f2d8d1d62b97be471ebcf1bb14aac0b895833d1<br>---<br>M include/osmocom/bsc_nat/Makefile.am<br>M include/osmocom/bsc_nat/bsc_nat.h<br>A include/osmocom/bsc_nat/logging.h<br>A include/osmocom/bsc_nat/vty.h<br>M src/osmo-bsc-nat/Makefile.am<br>A src/osmo-bsc-nat/bsc_nat.c<br>A src/osmo-bsc-nat/logging.c<br>M src/osmo-bsc-nat/main.c<br>A src/osmo-bsc-nat/vty.c<br>9 files changed, 297 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bsc-nat refs/changes/59/26659/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc_nat/Makefile.am b/include/osmocom/bsc_nat/Makefile.am</span><br><span>index 158ca4b..f573dd9 100644</span><br><span>--- a/include/osmocom/bsc_nat/Makefile.am</span><br><span>+++ b/include/osmocom/bsc_nat/Makefile.am</span><br><span>@@ -1,3 +1,5 @@</span><br><span> noinst_HEADERS = \</span><br><span>   bsc_nat.h \</span><br><span style="color: hsl(120, 100%, 40%);">+   logging.h \</span><br><span style="color: hsl(120, 100%, 40%);">+   vty.h \</span><br><span>      $(NULL)</span><br><span>diff --git a/include/osmocom/bsc_nat/bsc_nat.h b/include/osmocom/bsc_nat/bsc_nat.h</span><br><span>index bbdf826..511d5a4 100644</span><br><span>--- a/include/osmocom/bsc_nat/bsc_nat.h</span><br><span>+++ b/include/osmocom/bsc_nat/bsc_nat.h</span><br><span>@@ -17,3 +17,12 @@</span><br><span>  *</span><br><span>  */</span><br><span> #pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct bsc_nat {</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct bsc_nat *bsc_nat_alloc(void *tall_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+void bsc_nat_free(struct bsc_nat *bsc_nat);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+extern void *tall_bsc_nat_ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+extern struct bsc_nat *g_bsc_nat;</span><br><span>diff --git a/include/osmocom/bsc_nat/logging.h b/include/osmocom/bsc_nat/logging.h</span><br><span>new file mode 100644</span><br><span>index 0000000..88f67b0</span><br><span>--- /dev/null</span><br><span>+++ b/include/osmocom/bsc_nat/logging.h</span><br><span>@@ -0,0 +1,27 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2021 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * Author: Oliver Smith <osmith@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/lienses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum {</span><br><span style="color: hsl(120, 100%, 40%);">+    DMAIN,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+extern const struct log_info bsc_nat_log_info;</span><br><span>diff --git a/include/osmocom/bsc_nat/vty.h b/include/osmocom/bsc_nat/vty.h</span><br><span>new file mode 100644</span><br><span>index 0000000..f882c23</span><br><span>--- /dev/null</span><br><span>+++ b/include/osmocom/bsc_nat/vty.h</span><br><span>@@ -0,0 +1,31 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2021 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * Author: Oliver Smith <osmith@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/lienses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#pragma once</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/vty.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/buffer.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/command.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+enum bsc_nat_vty_nodes {</span><br><span style="color: hsl(120, 100%, 40%);">+    BSC_NAT_NODE = _LAST_OSMOVTY_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void bsc_nat_vty_init(void);</span><br><span style="color: hsl(120, 100%, 40%);">+int bsc_nat_vty_go_parent(struct vty *vty);</span><br><span>diff --git a/src/osmo-bsc-nat/Makefile.am b/src/osmo-bsc-nat/Makefile.am</span><br><span>index 9d0bf3e..9aa9524 100644</span><br><span>--- a/src/osmo-bsc-nat/Makefile.am</span><br><span>+++ b/src/osmo-bsc-nat/Makefile.am</span><br><span>@@ -25,7 +25,10 @@</span><br><span>        $(NULL)</span><br><span> </span><br><span> osmo_bsc_nat_SOURCES = \</span><br><span style="color: hsl(120, 100%, 40%);">+       bsc_nat.c \</span><br><span style="color: hsl(120, 100%, 40%);">+   logging.c \</span><br><span>  main.c \</span><br><span style="color: hsl(120, 100%, 40%);">+      vty.c \</span><br><span>      $(NULL)</span><br><span> </span><br><span> osmo_bsc_nat_LDADD = \</span><br><span>diff --git a/src/osmo-bsc-nat/bsc_nat.c b/src/osmo-bsc-nat/bsc_nat.c</span><br><span>new file mode 100644</span><br><span>index 0000000..149e7cb</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo-bsc-nat/bsc_nat.c</span><br><span>@@ -0,0 +1,38 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2021 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * Author: Oliver Smith <osmith@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/lienses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "config.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/talloc.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc_nat/bsc_nat.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct bsc_nat *bsc_nat_alloc(void *tall_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  struct bsc_nat *bsc_nat;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    bsc_nat = talloc_zero(tall_ctx, struct bsc_nat);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(bsc_nat);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return bsc_nat;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void bsc_nat_free(struct bsc_nat *bsc_nat)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   talloc_free(bsc_nat);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/osmo-bsc-nat/logging.c b/src/osmo-bsc-nat/logging.c</span><br><span>new file mode 100644</span><br><span>index 0000000..5ada8c2</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo-bsc-nat/logging.c</span><br><span>@@ -0,0 +1,37 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2021 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * Author: Oliver Smith <osmith@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/lienses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/utils.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc_nat/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct log_info_cat log_cat[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+  [DMAIN] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "DMAIN",</span><br><span style="color: hsl(120, 100%, 40%);">+            .loglevel = LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+              .enabled = 1,</span><br><span style="color: hsl(120, 100%, 40%);">+         .color = "",</span><br><span style="color: hsl(120, 100%, 40%);">+                .description = "Main program",</span><br><span style="color: hsl(120, 100%, 40%);">+      },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const struct log_info bsc_nat_log_info = {</span><br><span style="color: hsl(120, 100%, 40%);">+  .cat = log_cat,</span><br><span style="color: hsl(120, 100%, 40%);">+       .num_cat = ARRAY_SIZE(log_cat),</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span>diff --git a/src/osmo-bsc-nat/main.c b/src/osmo-bsc-nat/main.c</span><br><span>index 8775af1..813909b 100644</span><br><span>--- a/src/osmo-bsc-nat/main.c</span><br><span>+++ b/src/osmo-bsc-nat/main.c</span><br><span>@@ -19,7 +19,78 @@</span><br><span> </span><br><span> #include "config.h"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/application.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/cpu_sched_vty.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/misc.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/ports.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/telnet_interface.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc_nat/bsc_nat.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc_nat/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc_nat/vty.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static const char *const copyright =</span><br><span style="color: hsl(120, 100%, 40%);">+   "OsmoBSCNAT - Osmocom BSC NAT\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+  "Copyright (C) 2021 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Author: Oliver Smith\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+  "License AGPLv3+: GNU AGPL version 3 or later <http://gnu.org/licenses/agpl-3.0.html>\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "This is free software: you are free to change and redistribute it.\r\n"</span><br><span style="color: hsl(120, 100%, 40%);">+    "There is NO WARRANTY, to the extent permitted by law.\r\n";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void *tall_bsc_nat_ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+struct bsc_nat *g_bsc_nat;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct vty_app_info vty_info = {</span><br><span style="color: hsl(120, 100%, 40%);">+      .name           = "OsmoBSCNAT",</span><br><span style="color: hsl(120, 100%, 40%);">+     .version        = PACKAGE_VERSION,</span><br><span style="color: hsl(120, 100%, 40%);">+    .go_parent_cb   = bsc_nat_vty_go_parent,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void main_vty_init()</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     vty_info.copyright = copyright;</span><br><span style="color: hsl(120, 100%, 40%);">+       vty_info.tall_ctx = tall_bsc_nat_ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_init(&vty_info);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    bsc_nat_vty_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ logging_vty_add_cmds();</span><br><span style="color: hsl(120, 100%, 40%);">+       osmo_talloc_vty_add_cmds();</span><br><span style="color: hsl(120, 100%, 40%);">+   osmo_cpu_sched_vty_init(tall_bsc_nat_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  rc = telnet_init_dynif(tall_bsc_nat_ctx, g_bsc_nat, vty_get_bind_addr(), OSMO_VTY_PORT_BSC_NAT);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+              perror("Error binding VTY port");</span><br><span style="color: hsl(120, 100%, 40%);">+           exit(1);</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+        int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     talloc_enable_null_tracking();</span><br><span style="color: hsl(120, 100%, 40%);">+        tall_bsc_nat_ctx = talloc_named_const(NULL, 0, "bsc_nat");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = osmo_init_logging2(tall_bsc_nat_ctx, &bsc_nat_log_info);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (rc < 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                exit(1);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    g_bsc_nat = bsc_nat_alloc(tall_bsc_nat_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        main_vty_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    while (!osmo_select_shutdown_done())</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_select_main_ctx(0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    talloc_report_full(tall_bsc_nat_ctx, stderr);</span><br><span style="color: hsl(120, 100%, 40%);">+ talloc_free(tall_bsc_nat_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+        talloc_free(tall_vty_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+    talloc_report_full(NULL, stderr);</span><br><span style="color: hsl(120, 100%, 40%);">+     talloc_disable_null_tracking();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    return 0;</span><br><span> }</span><br><span>diff --git a/src/osmo-bsc-nat/vty.c b/src/osmo-bsc-nat/vty.c</span><br><span>new file mode 100644</span><br><span>index 0000000..089d27b</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo-bsc-nat/vty.c</span><br><span>@@ -0,0 +1,79 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2021 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * Author: Oliver Smith <osmith@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program.  If not, see <http://www.gnu.org/lienses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include "config.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <unistd.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/telnet_interface.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/logging.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/vty/command.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc_nat/bsc_nat.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/bsc_nat/vty.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int bsc_nat_vty_go_parent(struct vty *vty)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (vty->node) {</span><br><span style="color: hsl(120, 100%, 40%);">+       case BSC_NAT_NODE:</span><br><span style="color: hsl(120, 100%, 40%);">+            vty->node = CONFIG_NODE;</span><br><span style="color: hsl(120, 100%, 40%);">+           vty->index = g_bsc_nat;</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case CONFIG_NODE:</span><br><span style="color: hsl(120, 100%, 40%);">+             vty->node = ENABLE_NODE;</span><br><span style="color: hsl(120, 100%, 40%);">+           vty->index = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              vty->node = CONFIG_NODE;</span><br><span style="color: hsl(120, 100%, 40%);">+           vty->index = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return vty->node;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct cmd_node bsc_nat_node = {</span><br><span style="color: hsl(120, 100%, 40%);">+    BSC_NAT_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+ "%s(config-bsc-nat)# ",</span><br><span style="color: hsl(120, 100%, 40%);">+     1,</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(cfg_bsc_nat,</span><br><span style="color: hsl(120, 100%, 40%);">+      cfg_bsc_nat_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+      "bsc-nat", "Configure the BSC NAT\n")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(g_bsc_nat);</span><br><span style="color: hsl(120, 100%, 40%);">+       vty->index = g_bsc_nat;</span><br><span style="color: hsl(120, 100%, 40%);">+    vty->node = BSC_NAT_NODE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static int config_write_bsc_nat(struct vty *vty)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "bsc-nat%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+     return CMD_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void bsc_nat_vty_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    install_element(CONFIG_NODE, &cfg_bsc_nat_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+   install_node(&bsc_nat_node, config_write_bsc_nat);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc-nat/+/26659">change 26659</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bsc-nat/+/26659"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc-nat </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I6f2d8d1d62b97be471ebcf1bb14aac0b895833d1 </div>
<div style="display:none"> Gerrit-Change-Number: 26659 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>