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