<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-hnodeb/+/25997">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Move existing vty code to its own vty.c/h file<br><br>Change-Id: I88107e9ed03ff8f807b57a3ea0d189fd70864861<br>---<br>M include/osmocom/hnodeb/Makefile.am<br>M include/osmocom/hnodeb/hnodeb.h<br>A include/osmocom/hnodeb/vty.h<br>M src/osmo-hnodeb/Makefile.am<br>M src/osmo-hnodeb/main.c<br>A src/osmo-hnodeb/vty.c<br>6 files changed, 195 insertions(+), 123 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/hnodeb/Makefile.am b/include/osmocom/hnodeb/Makefile.am</span><br><span>index 9f8963a..339f8a3 100644</span><br><span>--- a/include/osmocom/hnodeb/Makefile.am</span><br><span>+++ b/include/osmocom/hnodeb/Makefile.am</span><br><span>@@ -2,4 +2,5 @@</span><br><span>         hnodeb.h \</span><br><span>   ranap.h \</span><br><span>    rua.h \</span><br><span style="color: hsl(120, 100%, 40%);">+       vty.h \</span><br><span>      $(NULL)</span><br><span>diff --git a/include/osmocom/hnodeb/hnodeb.h b/include/osmocom/hnodeb/hnodeb.h</span><br><span>index ef11ab7..e36311e 100644</span><br><span>--- a/include/osmocom/hnodeb/hnodeb.h</span><br><span>+++ b/include/osmocom/hnodeb/hnodeb.h</span><br><span>@@ -19,6 +19,8 @@</span><br><span>  */</span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <asn1c/asn1helpers.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include <osmocom/core/select.h></span><br><span> #include <osmocom/core/linuxlist.h></span><br><span> #include <osmocom/core/write_queue.h></span><br><span>@@ -101,4 +103,10 @@</span><br><span> void hnb_nas_rx_dtap(struct hnb *hnb, void *data, int len);</span><br><span> void hnb_rx_secmode_cmd(struct hnb *hnb, long ip_alg);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int hnb_ue_register_tx(struct hnb *hnb, const char *imsi_str);</span><br><span style="color: hsl(120, 100%, 40%);">+void hnb_send_register_req(struct hnb *hnb);</span><br><span style="color: hsl(120, 100%, 40%);">+void hnb_send_deregister_req(struct hnb *hnb);</span><br><span style="color: hsl(120, 100%, 40%);">+struct msgb *gen_initue_lu(int is_ps, uint32_t conn_id, const char *imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+extern void *tall_hnb_ctx;</span><br><span> extern struct hnb g_hnb;</span><br><span>diff --git a/include/osmocom/hnodeb/vty.h b/include/osmocom/hnodeb/vty.h</span><br><span>new file mode 100644</span><br><span>index 0000000..7e3f29f</span><br><span>--- /dev/null</span><br><span>+++ b/include/osmocom/hnodeb/vty.h</span><br><span>@@ -0,0 +1,31 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2015 by Daniel Willmann <dwillmann@sysmocom.de></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: Pau Espin Pedrol <pespin@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 hnb_vty_nodes {</span><br><span style="color: hsl(120, 100%, 40%);">+        CHAN_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 hnb_vty_init(void);</span><br><span>diff --git a/src/osmo-hnodeb/Makefile.am b/src/osmo-hnodeb/Makefile.am</span><br><span>index 9f09a0a..d1cd3ec 100644</span><br><span>--- a/src/osmo-hnodeb/Makefile.am</span><br><span>+++ b/src/osmo-hnodeb/Makefile.am</span><br><span>@@ -33,6 +33,7 @@</span><br><span>         debug.c \</span><br><span>    ranap.c \</span><br><span>    rua.c \</span><br><span style="color: hsl(120, 100%, 40%);">+       vty.c \</span><br><span>      $(NULL)</span><br><span> </span><br><span> osmo_hnodeb_LDADD = \</span><br><span>diff --git a/src/osmo-hnodeb/main.c b/src/osmo-hnodeb/main.c</span><br><span>index 9a2aaf9..ae9403d 100644</span><br><span>--- a/src/osmo-hnodeb/main.c</span><br><span>+++ b/src/osmo-hnodeb/main.c</span><br><span>@@ -54,7 +54,6 @@</span><br><span> #include <osmocom/hnbap/hnbap_common.h></span><br><span> #include <osmocom/hnbap/hnbap_ies_defs.h></span><br><span> #include <osmocom/rua/rua_msg_factory.h></span><br><span style="color: hsl(0, 100%, 40%);">-#include "asn1helpers.h"</span><br><span> #include <osmocom/ranap/iu_helpers.h></span><br><span> </span><br><span> #include <osmocom/ranap/ranap_msg_factory.h></span><br><span>@@ -70,9 +69,10 @@</span><br><span> </span><br><span> #include <osmocom/hnodeb/rua.h></span><br><span> #include <osmocom/hnodeb/ranap.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/hnodeb/vty.h></span><br><span> #include <osmocom/hnodeb/hnodeb.h></span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void *tall_hnb_ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+void *tall_hnb_ctx;</span><br><span> </span><br><span> struct hnb g_hnb = {</span><br><span>        .gw_addr = "127.0.0.1",</span><br><span>@@ -113,7 +113,7 @@</span><br><span> }</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static int hnb_ue_register_tx(struct hnb *hnb, const char *imsi_str)</span><br><span style="color: hsl(120, 100%, 40%);">+int hnb_ue_register_tx(struct hnb *hnb, const char *imsi_str)</span><br><span> {</span><br><span>   struct msgb *msg;</span><br><span>    int rc, imsi_len;</span><br><span>@@ -649,7 +649,7 @@</span><br><span>      return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void hnb_send_register_req(struct hnb *hnb)</span><br><span style="color: hsl(120, 100%, 40%);">+void hnb_send_register_req(struct hnb *hnb)</span><br><span> {</span><br><span>      HNBAP_HNBRegisterRequest_t request_out;</span><br><span>      struct msgb *msg;</span><br><span>@@ -698,7 +698,7 @@</span><br><span>      osmo_wqueue_enqueue(&hnb->wqueue, msg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void hnb_send_deregister_req(struct hnb *hnb)</span><br><span style="color: hsl(120, 100%, 40%);">+void hnb_send_deregister_req(struct hnb *hnb)</span><br><span> {</span><br><span>      struct msgb *msg;</span><br><span>    int rc;</span><br><span>@@ -744,79 +744,8 @@</span><br><span>       return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define HNBAP_STR    "HNBAP related commands\n"</span><br><span style="color: hsl(0, 100%, 40%);">-#define HNB_STR             "HomeNodeB commands\n"</span><br><span style="color: hsl(0, 100%, 40%);">-#define UE_STR          "User Equipment commands\n"</span><br><span style="color: hsl(0, 100%, 40%);">-#define RANAP_STR  "RANAP related commands\n"</span><br><span style="color: hsl(0, 100%, 40%);">-#define CSPS_STR    "Circuit Switched\n" "Packet Switched\n"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(hnb_register, hnb_register_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "hnbap hnb register", HNBAP_STR HNB_STR "Send HNB-REGISTER REQUEST")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-       hnb_send_register_req(&g_hnb);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(hnb_deregister, hnb_deregister_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-   "hnbap hnb deregister", HNBAP_STR HNB_STR "Send HNB-DEREGISTER REQUEST")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-   hnb_send_deregister_req(&g_hnb);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(ue_register, ue_register_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "hnbap ue register IMSI", HNBAP_STR UE_STR "Send UE-REGISTER REQUEST")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     hnb_ue_register_tx(&g_hnb, argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(asn_dbg, asn_dbg_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "asn-debug (1|0)", "Enable or disable libasn1c debugging")</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">- asn_debug = atoi(argv[0]);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(ranap_reset, ranap_reset_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">- "ranap reset (cs|ps)", RANAP_STR "Send RANAP RESET\n" CSPS_STR)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    int is_ps = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct msgb *msg, *rua;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- RANAP_Cause_t cause = {</span><br><span style="color: hsl(0, 100%, 40%);">-         .present = RANAP_Cause_PR_transmissionNetwork,</span><br><span style="color: hsl(0, 100%, 40%);">-          .choice.transmissionNetwork = RANAP_CauseTransmissionNetwork_signalling_transport_resource_failure,</span><br><span style="color: hsl(0, 100%, 40%);">-     };</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      if (!strcmp(argv[0], "ps"))</span><br><span style="color: hsl(0, 100%, 40%);">-           is_ps = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      msg = ranap_new_msg_reset(is_ps, &cause);</span><br><span style="color: hsl(0, 100%, 40%);">-   rua = rua_new_udt(msg);</span><br><span style="color: hsl(0, 100%, 40%);">- //msgb_free(msg);</span><br><span style="color: hsl(0, 100%, 40%);">-       osmo_wqueue_enqueue(&g_hnb.wqueue, rua);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-enum my_vty_nodes {</span><br><span style="color: hsl(0, 100%, 40%);">- CHAN_NODE = _LAST_OSMOVTY_NODE,</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static struct cmd_node chan_node = {</span><br><span style="color: hsl(0, 100%, 40%);">-   CHAN_NODE,</span><br><span style="color: hsl(0, 100%, 40%);">-      "%s(chan)> ",</span><br><span style="color: hsl(0, 100%, 40%);">-      1,</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static struct msgb *gen_initue_lu(int is_ps, uint32_t conn_id, const char *imsi)</span><br><span style="color: hsl(120, 100%, 40%);">+struct msgb *gen_initue_lu(int is_ps, uint32_t conn_id, const char *imsi)</span><br><span> {</span><br><span>         uint8_t lu[] = { GSM48_PDISC_MM, GSM48_MT_MM_LOC_UPD_REQUEST,</span><br><span>                         0x70, 0x62, 0xf2, 0x30, 0xff, 0xf3, 0x57,</span><br><span>@@ -848,52 +777,6 @@</span><br><span>    return ranap_new_msg_initial_ue(conn_id, is_ps, &rnc_id, lu, sizeof(lu));</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DEFUN(chan, chan_cmd,</span><br><span style="color: hsl(0, 100%, 40%);">-     "channel (cs|ps) lu imsi IMSI",</span><br><span style="color: hsl(0, 100%, 40%);">-       "Open a new Signalling Connection\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  "To Circuit-Switched CN\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    "To Packet-Switched CN\n"</span><br><span style="color: hsl(0, 100%, 40%);">-     "Performing a Location Update\n"</span><br><span style="color: hsl(0, 100%, 40%);">-      )</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-      struct hnb_chan *chan;</span><br><span style="color: hsl(0, 100%, 40%);">-  struct msgb *msg, *rua;</span><br><span style="color: hsl(0, 100%, 40%);">- static uint16_t conn_id = 42;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   chan = talloc_zero(tall_hnb_ctx, struct hnb_chan);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (!strcmp(argv[0], "ps"))</span><br><span style="color: hsl(0, 100%, 40%);">-           chan->is_ps = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-     chan->imsi = talloc_strdup(chan, argv[1]);</span><br><span style="color: hsl(0, 100%, 40%);">-   chan->conn_id = conn_id;</span><br><span style="color: hsl(0, 100%, 40%);">-     conn_id++;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      msg = gen_initue_lu(chan->is_ps, chan->conn_id, chan->imsi);</span><br><span style="color: hsl(0, 100%, 40%);">-   rua = rua_new_conn(chan->is_ps, chan->conn_id, msg);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      osmo_wqueue_enqueue(&g_hnb.wqueue, rua);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    vty->index = chan;</span><br><span style="color: hsl(0, 100%, 40%);">-   vty->node = CHAN_NODE;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (!chan->is_ps)</span><br><span style="color: hsl(0, 100%, 40%);">-            g_hnb.cs.chan = chan;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   return CMD_SUCCESS;</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static void hnb_vty_init(void)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     install_element_ve(&asn_dbg_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">-   install_element_ve(&hnb_register_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">-      install_element_ve(&hnb_deregister_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">-    install_element_ve(&ue_register_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">-       install_element_ve(&ranap_reset_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">-       install_element_ve(&chan_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-      install_node(&chan_node, NULL);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> static void handle_options(int argc, char **argv)</span><br><span> {</span><br><span>       while (1) {</span><br><span>diff --git a/src/osmo-hnodeb/vty.c b/src/osmo-hnodeb/vty.c</span><br><span>new file mode 100644</span><br><span>index 0000000..ccca6d0</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo-hnodeb/vty.c</span><br><span>@@ -0,0 +1,148 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/* (C) 2015 by Daniel Willmann <dwillmann@sysmocom.de></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: Pau Espin Pedrol <pespin@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%);">+#include <osmocom/core/msgb.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/rua/rua_msg_factory.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/ranap/ranap_common.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/ranap/ranap_msg_factory.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/hnodeb/vty.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/hnodeb/hnodeb.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct cmd_node chan_node = {</span><br><span style="color: hsl(120, 100%, 40%);">+  CHAN_NODE,</span><br><span style="color: hsl(120, 100%, 40%);">+    "%s(chan)> ",</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%);">+#define HNBAP_STR     "HNBAP related commands\n"</span><br><span style="color: hsl(120, 100%, 40%);">+#define HNB_STR           "HomeNodeB commands\n"</span><br><span style="color: hsl(120, 100%, 40%);">+#define UE_STR                "User Equipment commands\n"</span><br><span style="color: hsl(120, 100%, 40%);">+#define RANAP_STR        "RANAP related commands\n"</span><br><span style="color: hsl(120, 100%, 40%);">+#define CSPS_STR  "Circuit Switched\n" "Packet Switched\n"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(hnb_register, hnb_register_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "hnbap hnb register", HNBAP_STR HNB_STR "Send HNB-REGISTER REQUEST")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   hnb_send_register_req(&g_hnb);</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%);">+DEFUN(hnb_deregister, hnb_deregister_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+   "hnbap hnb deregister", HNBAP_STR HNB_STR "Send HNB-DEREGISTER REQUEST")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       hnb_send_deregister_req(&g_hnb);</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%);">+DEFUN(ue_register, ue_register_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "hnbap ue register IMSI", HNBAP_STR UE_STR "Send UE-REGISTER REQUEST")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ hnb_ue_register_tx(&g_hnb, argv[0]);</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%);">+DEFUN(asn_dbg, asn_dbg_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "asn-debug (1|0)", "Enable or disable libasn1c debugging")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     asn_debug = atoi(argv[0]);</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%);">+DEFUN(ranap_reset, ranap_reset_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+ "ranap reset (cs|ps)", RANAP_STR "Send RANAP RESET\n" CSPS_STR)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        int is_ps = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct msgb *msg, *rua;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     RANAP_Cause_t cause = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .present = RANAP_Cause_PR_transmissionNetwork,</span><br><span style="color: hsl(120, 100%, 40%);">+                .choice.transmissionNetwork = RANAP_CauseTransmissionNetwork_signalling_transport_resource_failure,</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%);">+  if (!strcmp(argv[0], "ps"))</span><br><span style="color: hsl(120, 100%, 40%);">+         is_ps = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  msg = ranap_new_msg_reset(is_ps, &cause);</span><br><span style="color: hsl(120, 100%, 40%);">+ rua = rua_new_udt(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+       //msgb_free(msg);</span><br><span style="color: hsl(120, 100%, 40%);">+     osmo_wqueue_enqueue(&g_hnb.wqueue, rua);</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%);">+DEFUN(chan, chan_cmd,</span><br><span style="color: hsl(120, 100%, 40%);">+       "channel (cs|ps) lu imsi IMSI",</span><br><span style="color: hsl(120, 100%, 40%);">+     "Open a new Signalling Connection\n"</span><br><span style="color: hsl(120, 100%, 40%);">+        "To Circuit-Switched CN\n"</span><br><span style="color: hsl(120, 100%, 40%);">+  "To Packet-Switched CN\n"</span><br><span style="color: hsl(120, 100%, 40%);">+   "Performing a Location Update\n"</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 hnb_chan *chan;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct msgb *msg, *rua;</span><br><span style="color: hsl(120, 100%, 40%);">+       static uint16_t conn_id = 42;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       chan = talloc_zero(tall_hnb_ctx, struct hnb_chan);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!strcmp(argv[0], "ps"))</span><br><span style="color: hsl(120, 100%, 40%);">+         chan->is_ps = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+   chan->imsi = talloc_strdup(chan, argv[1]);</span><br><span style="color: hsl(120, 100%, 40%);">+ chan->conn_id = conn_id;</span><br><span style="color: hsl(120, 100%, 40%);">+   conn_id++;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  msg = gen_initue_lu(chan->is_ps, chan->conn_id, chan->imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+ rua = rua_new_conn(chan->is_ps, chan->conn_id, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_wqueue_enqueue(&g_hnb.wqueue, rua);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        vty->index = chan;</span><br><span style="color: hsl(120, 100%, 40%);">+ vty->node = CHAN_NODE;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!chan->is_ps)</span><br><span style="color: hsl(120, 100%, 40%);">+          g_hnb.cs.chan = chan;</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 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%);">+void hnb_vty_init(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  install_element_ve(&asn_dbg_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element_ve(&hnb_register_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+    install_element_ve(&hnb_deregister_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+  install_element_ve(&ue_register_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+     install_element_ve(&ranap_reset_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+     install_element_ve(&chan_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  install_node(&chan_node, NULL);</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-hnodeb/+/25997">change 25997</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-hnodeb/+/25997"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-hnodeb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I88107e9ed03ff8f807b57a3ea0d189fd70864861 </div>
<div style="display:none"> Gerrit-Change-Number: 25997 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>