<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-iuh/+/16810">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add vty disconnect to disconnect a single HNB<br><br>Allow the operator to disconnect a specific HNB from the gateway.<br><br>Change-Id: Ia0b3d6e15202fdbc3a56bd4fce9c42209bb0cff1<br>---<br>M include/osmocom/iuh/hnbgw.h<br>M include/osmocom/iuh/hnbgw_hnbap.h<br>M src/hnbgw.c<br>M src/hnbgw_hnbap.c<br>M src/hnbgw_vty.c<br>5 files changed, 69 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-iuh refs/changes/10/16810/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/iuh/hnbgw.h b/include/osmocom/iuh/hnbgw.h</span><br><span>index 4848c2f..807f11a 100644</span><br><span>--- a/include/osmocom/iuh/hnbgw.h</span><br><span>+++ b/include/osmocom/iuh/hnbgw.h</span><br><span>@@ -164,5 +164,8 @@</span><br><span> struct hnb_context *hnb_context_alloc(struct hnb_gw *gw, struct osmo_stream_srv_link *link, int new_fd);</span><br><span> void hnb_context_release(struct hnb_context *ctx);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Send a HNB disconnect to the hnb and free all resources */</span><br><span style="color: hsl(120, 100%, 40%);">+void hnb_context_disconnect(struct hnb_context *ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void hnbgw_vty_init(struct hnb_gw *gw, void *tall_ctx);</span><br><span> int hnbgw_vty_go_parent(struct vty *vty);</span><br><span>diff --git a/include/osmocom/iuh/hnbgw_hnbap.h b/include/osmocom/iuh/hnbgw_hnbap.h</span><br><span>index cca3550..d6bccc4 100644</span><br><span>--- a/include/osmocom/iuh/hnbgw_hnbap.h</span><br><span>+++ b/include/osmocom/iuh/hnbgw_hnbap.h</span><br><span>@@ -2,5 +2,6 @@</span><br><span> </span><br><span> #include <osmocom/iuh/hnbgw.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int hnbgw_tx_hnb_deregister(struct hnb_context *ctx);</span><br><span> int hnbgw_hnbap_rx(struct hnb_context *hnb, struct msgb *msg);</span><br><span> int hnbgw_hnbap_init(void);</span><br><span>diff --git a/src/hnbgw.c b/src/hnbgw.c</span><br><span>index 70ee25b..05a8617 100644</span><br><span>--- a/src/hnbgw.c</span><br><span>+++ b/src/hnbgw.c</span><br><span>@@ -297,6 +297,15 @@</span><br><span> return ctx;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void hnb_context_disconnect(struct hnb_context *ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ hnbgw_tx_hnb_deregister(ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* TODO: use a timeout/callback on the hnb_context_relase if the HNB</span><br><span style="color: hsl(120, 100%, 40%);">+ * does not react. If we release the context right a way,</span><br><span style="color: hsl(120, 100%, 40%);">+ * the disconnect message is never sent.</span><br><span style="color: hsl(120, 100%, 40%);">+ hnb_context_release(ctx); */</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> void hnb_context_release(struct hnb_context *ctx)</span><br><span> {</span><br><span> struct hnbgw_context_map *map, *map2;</span><br><span>diff --git a/src/hnbgw_hnbap.c b/src/hnbgw_hnbap.c</span><br><span>index 2d67219..910a151 100644</span><br><span>--- a/src/hnbgw_hnbap.c</span><br><span>+++ b/src/hnbgw_hnbap.c</span><br><span>@@ -124,6 +124,35 @@</span><br><span> return hnbgw_hnbap_tx(ctx, msg);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+int hnbgw_tx_hnb_deregister(struct hnb_context *ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ HNBDe_Register_t *deregister_out;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct msgb *msg;</span><br><span style="color: hsl(120, 100%, 40%);">+ int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+ HNBDe_RegisterIEs_t deregister = {};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ deregister.cause.present = Cause_PR_radioNetwork;</span><br><span style="color: hsl(120, 100%, 40%);">+ deregister.cause.choice.misc= CauseMisc_o_and_m_intervention;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ memset(&deregister_out, 0, sizeof(deregister_out));</span><br><span style="color: hsl(120, 100%, 40%);">+ rc = hnbap_encode_hnbde_registeries(&deregister_out, &deregister);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (rc < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DHNBAP, LOGL_ERROR, "Failure to encode HNB-DE-REGISTER to %s: rc=%d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ ctx->identity_info, rc);</span><br><span style="color: hsl(120, 100%, 40%);">+ return rc;</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%);">+ /* encode pdu */</span><br><span style="color: hsl(120, 100%, 40%);">+ msg = hnbap_generate_initiating_message(ProcedureCode_id_HNBDe_Register,</span><br><span style="color: hsl(120, 100%, 40%);">+ Criticality_ignore,</span><br><span style="color: hsl(120, 100%, 40%);">+ &asn_DEF_HNBDe_Register,</span><br><span style="color: hsl(120, 100%, 40%);">+ &deregister_out);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_HNBDe_Register, &deregister_out);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return hnbgw_hnbap_tx(ctx, msg);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> static int hnbgw_tx_ue_register_acc(struct ue_context *ue)</span><br><span> {</span><br><span>diff --git a/src/hnbgw_vty.c b/src/hnbgw_vty.c</span><br><span>index 84a5f01..60bcf90 100644</span><br><span>--- a/src/hnbgw_vty.c</span><br><span>+++ b/src/hnbgw_vty.c</span><br><span>@@ -31,6 +31,8 @@</span><br><span> #include <osmocom/sigtran/sccp_helpers.h></span><br><span> #include <osmocom/netif/stream.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/iuh/hnbgw.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static void *tall_hnb_ctx = NULL;</span><br><span> static struct hnb_gw *g_hnb_gw = NULL;</span><br><span> </span><br><span>@@ -260,6 +262,29 @@</span><br><span> return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+DEFUN(hnb_disconnect_by_name, hnb_disconnect_by_name_cmd, "hnb by-name NAME disconnect",</span><br><span style="color: hsl(120, 100%, 40%);">+ "HNB Specific Commands\n"</span><br><span style="color: hsl(120, 100%, 40%);">+ "Disconnect the HNB. The HNB can reconnect afterwards.")</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct hnb_context *hnb;</span><br><span style="color: hsl(120, 100%, 40%);">+ const char *identity_info = argv[0];</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (llist_empty(&g_hnb_gw->hnb_list)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "No HNB connected%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_ERR_NO_MATCH;</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%);">+ hnb = hnb_context_by_identity_info(g_hnb_gw, identity_info);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (hnb == NULL) {</span><br><span style="color: hsl(120, 100%, 40%);">+ vty_out(vty, "No HNB found with identity '%s'%s", identity_info, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+ return CMD_ERR_NO_MATCH;</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%);">+ hnb_context_disconnect(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> DEFUN(cfg_hnbgw_rnc_id, cfg_hnbgw_rnc_id_cmd,</span><br><span> "rnc-id <0-65535>",</span><br><span> "Configure the HNBGW's RNC Id, the common RNC Id used for all connected hNodeB. It is sent to"</span><br><span>@@ -401,4 +426,6 @@</span><br><span> install_element_ve(&show_one_hnb_cmd);</span><br><span> install_element_ve(&show_ue_cmd);</span><br><span> install_element_ve(&show_talloc_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ install_element(ENABLE_NODE, &hnb_disconnect_by_name_cmd);</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-iuh/+/16810">change 16810</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-iuh/+/16810"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-iuh </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia0b3d6e15202fdbc3a56bd4fce9c42209bb0cff1 </div>
<div style="display:none"> Gerrit-Change-Number: 16810 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>