Attention is currently required from: pespin.
Hello Jenkins Builder,
I'd like you to reexamine a change. Please visit
https://gerrit.osmocom.org/c/osmo-hnbgw/+/33133
to look at the new patch set (#3).
Change subject: cnpool: extract Mobile Identity from RANAP payload
......................................................................
cnpool: extract Mobile Identity from RANAP payload
For InitialUE messages, decode the RANAP and NAS PDU to obtain the
Mobile Identity. Store it in map->l3.
A following patch will use this mobile identity to decide on which CN
links to pick from the CN pools for this subscriber.
Add the new information to LOG_MAP() as ubiquitous logging context.
Related: SYS#6412
Change-Id: I373d665c9684b607207f68094188eab63209db51
---
M include/osmocom/hnbgw/context_map.h
M include/osmocom/hnbgw/hnbgw.h
M src/osmo-hnbgw/Makefile.am
A src/osmo-hnbgw/hnbgw_l3.c
M src/osmo-hnbgw/hnbgw_rua.c
5 files changed, 353 insertions(+), 3 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-hnbgw refs/changes/33/33133/3
--
To view, visit https://gerrit.osmocom.org/c/osmo-hnbgw/+/33133
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-hnbgw
Gerrit-Branch: master
Gerrit-Change-Id: I373d665c9684b607207f68094188eab63209db51
Gerrit-Change-Number: 33133
Gerrit-PatchSet: 3
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-CC: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: newpatchset
Attention is currently required from: pespin.
neels has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-hnbgw/+/33133 )
Change subject: cnpool: extract Mobile Identity from RANAP payload
......................................................................
Patch Set 2:
(1 comment)
File src/osmo-hnbgw/hnbgw_l3.c:
https://gerrit.osmocom.org/c/osmo-hnbgw/+/33133/comment/7bf9f6b8_8b310925
PS2, Line 104: /* Old routing area identification 10.5.5.15. */
> You can use gsm48_parse_ra() here, see gprs_gmm_rx_att_ack() in libosmo-gprs. […]
ack, thx.
btw, i notice gsm48_parse_ra() should probably call osmo_plmn_from_bcd() instead of duplicating. it does because it's been there for a long long time
--
To view, visit https://gerrit.osmocom.org/c/osmo-hnbgw/+/33133
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-hnbgw
Gerrit-Branch: master
Gerrit-Change-Id: I373d665c9684b607207f68094188eab63209db51
Gerrit-Change-Number: 33133
Gerrit-PatchSet: 2
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-CC: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: pespin <pespin(a)sysmocom.de>
Gerrit-Comment-Date: Mon, 05 Jun 2023 12:57:25 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: comment
Attention is currently required from: dexter.
fixeria has posted comments on this change. ( https://gerrit.osmocom.org/c/osmo-bts/+/32734 )
Change subject: paging: do not confirm PAGING COMMAND messages
......................................................................
Patch Set 6:
(1 comment)
Patchset:
PS6:
IMO, it does not worth to introduce such a layering violation (i.e. parsing GSM RR messages in the PCUIF protocol logic). If osmo-pcu is fine with dropping confirmations for paging, I think it's fine to leave osmo-bts as it is. If some day osmo-pcu needs the confirmations for paging messages, it would simply stop discarding and will make use of them.
--
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/32734
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I8b8264d28b1b1deb08774cdba58dd4c6dafe115d
Gerrit-Change-Number: 32734
Gerrit-PatchSet: 6
Gerrit-Owner: dexter <pmaier(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-Attention: dexter <pmaier(a)sysmocom.de>
Gerrit-Comment-Date: Mon, 05 Jun 2023 12:56:44 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Gerrit-MessageType: comment
neels has submitted this change. ( https://gerrit.osmocom.org/c/osmo-hnbgw/+/33130 )
Change subject: cnpool: make NRI mappings VTY configurable
......................................................................
cnpool: make NRI mappings VTY configurable
Implement only the VTY configuration part, applying NRI to select CN
links follows in I66fba27cfbe6e2b27ee3443718846ecfbbd8a974.
Use the osmo_nri_ranges API to manage each cnlink's NRI ranges by VTY
configuration.
Analogous to osmo-bsc
MSC pooling: make NRI mappings VTY configurable
4099f1db504c401e3d7211d9761b034d62d15f7c
I6c251f2744d7be26fc4ad74adefc96a6a3fe08b0
plus
vty: fix doc: default value for 'nri bitlen'
f15d236e3eee8e7cbdc184d401f33b062d1b1aac
I8af840a4589f47eaca6bf10e37e0859f9ae53dfa
Related: SYS#6412
Change-Id: Ifb87e01e5971962e5cfe5e127871af4a67806de1
---
M include/osmocom/hnbgw/hnbgw.h
M src/osmo-hnbgw/hnbgw.c
M src/osmo-hnbgw/hnbgw_cn.c
M src/osmo-hnbgw/hnbgw_vty.c
M tests/Makefile.am
M tests/cnpool.vty
A tests/nri_cfg.vty
7 files changed, 784 insertions(+), 19 deletions(-)
Approvals:
Jenkins Builder: Verified
pespin: Looks good to me, but someone else must approve
laforge: Looks good to me, approved
diff --git a/include/osmocom/hnbgw/hnbgw.h b/include/osmocom/hnbgw/hnbgw.h
index 14552fb..cc32f93 100644
--- a/include/osmocom/hnbgw/hnbgw.h
+++ b/include/osmocom/hnbgw/hnbgw.h
@@ -101,9 +101,8 @@
/* User provided configuration for struct hnbgw_cnpool. */
struct hnbgw_cnpool_cfg {
- /* FUTURE: This will be added here shortly:
- * - global NRI config: bitlen and NULL-NRI.
- */
+ uint8_t nri_bitlen;
+ struct osmo_nri_ranges *null_nri_ranges;
};
/* User provided configuration for struct hnbgw_cnlink. */
@@ -112,9 +111,7 @@
* use. */
char *remote_addr_name;
- /* FUTURE: This will be added here shortly:
- * - per peer NRI config: NRI ranges assigned to this peer.
- */
+ struct osmo_nri_ranges *nri_ranges;
};
/* Collection of CN peers to distribute UE connections across. MSCs for DOMAIN_CS, SGSNs for DOMAIN_PS. */
@@ -134,9 +131,10 @@
/* List of struct hnbgw_cnlink */
struct llist_head cnlinks;
- /* FUTURE: This will be added here shortly:
- * - round robin state for new conns
- */
+ unsigned int round_robin_next_nr;
+ /* Emergency calls potentially select a different set of MSCs, so to not mess up the normal round-robin
+ * behavior, emergency calls need a separate round-robin counter. */
+ unsigned int round_robin_next_emerg_nr;
};
/* A CN peer, like 'msc 0' or 'sgsn 23' */
@@ -163,6 +161,9 @@
/* linked list of hnbgw_context_map */
struct llist_head map_list;
+
+ bool allow_attach;
+ bool allow_emerg;
};
#define LOG_CNLINK(CNLINK, SUBSYS, LEVEL, FMT, ARGS...) \
diff --git a/src/osmo-hnbgw/hnbgw.c b/src/osmo-hnbgw/hnbgw.c
index 205c683..0d64adf 100644
--- a/src/osmo-hnbgw/hnbgw.c
+++ b/src/osmo-hnbgw/hnbgw.c
@@ -24,6 +24,8 @@
#include <osmocom/vty/vty.h>
+#include <osmocom/gsm/gsm23236.h>
+
#include <osmocom/netif/stream.h>
#include "config.h"
@@ -67,9 +69,8 @@
.peer_name = "msc",
.default_remote_pc = DEFAULT_PC_MSC,
.vty = {
- /* FUTURE: This will be added here shortly:
- * - defaults for global NRI config: bitlen and NULL-NRI.
- */
+ .nri_bitlen = OSMO_NRI_BITLEN_DEFAULT,
+ .null_nri_ranges = osmo_nri_ranges_alloc(g_hnbgw),
},
};
INIT_LLIST_HEAD(&g_hnbgw->sccp.cnpool_iucs.cnlinks);
@@ -80,9 +81,8 @@
.peer_name = "sgsn",
.default_remote_pc = DEFAULT_PC_SGSN,
.vty = {
- /* FUTURE: This will be added here shortly:
- * - defaults for global NRI config: bitlen and NULL-NRI.
- */
+ .nri_bitlen = OSMO_NRI_BITLEN_DEFAULT,
+ .null_nri_ranges = osmo_nri_ranges_alloc(g_hnbgw),
},
};
INIT_LLIST_HEAD(&g_hnbgw->sccp.cnpool_iups.cnlinks);
diff --git a/src/osmo-hnbgw/hnbgw_cn.c b/src/osmo-hnbgw/hnbgw_cn.c
index d829718..9dc2016 100644
--- a/src/osmo-hnbgw/hnbgw_cn.c
+++ b/src/osmo-hnbgw/hnbgw_cn.c
@@ -27,6 +27,8 @@
#include <osmocom/core/utils.h>
#include <osmocom/core/timer.h>
+#include <osmocom/gsm/gsm23236.h>
+
#include <osmocom/sigtran/protocol/m3ua.h>
#include <osmocom/sigtran/sccp_sap.h>
#include <osmocom/sigtran/sccp_helpers.h>
@@ -453,12 +455,26 @@
void hnbgw_cnpool_apply_cfg(struct hnbgw_cnpool *cnpool)
{
- cnpool->use = cnpool->vty;
+ struct osmo_nri_range *r;
+
+ cnpool->use.nri_bitlen = cnpool->vty.nri_bitlen;
+
+ osmo_nri_ranges_free(cnpool->use.null_nri_ranges);
+ cnpool->use.null_nri_ranges = osmo_nri_ranges_alloc(g_hnbgw);
+ llist_for_each_entry(r, &cnpool->vty.null_nri_ranges->entries, entry)
+ osmo_nri_ranges_add(cnpool->use.null_nri_ranges, r);
}
static void hnbgw_cnlink_cfg_copy(struct hnbgw_cnlink *cnlink)
{
+ struct osmo_nri_range *r;
+
osmo_talloc_replace_string(cnlink, &cnlink->use.remote_addr_name, cnlink->vty.remote_addr_name);
+
+ osmo_nri_ranges_free(cnlink->use.nri_ranges);
+ cnlink->use.nri_ranges = osmo_nri_ranges_alloc(cnlink);
+ llist_for_each_entry(r, &cnlink->vty.nri_ranges->entries, entry)
+ osmo_nri_ranges_add(cnlink->use.nri_ranges, r);
}
static bool hnbgw_cnlink_sccp_cfg_changed(struct hnbgw_cnlink *cnlink)
@@ -636,7 +652,9 @@
.nr = nr,
.vty = {
/* VTY config defaults for the new cnlink */
+ .nri_ranges = osmo_nri_ranges_alloc(cnlink),
},
+ .allow_attach = true,
};
INIT_LLIST_HEAD(&cnlink->map_list);
diff --git a/src/osmo-hnbgw/hnbgw_vty.c b/src/osmo-hnbgw/hnbgw_vty.c
index d4d1bad..7c60611 100644
--- a/src/osmo-hnbgw/hnbgw_vty.c
+++ b/src/osmo-hnbgw/hnbgw_vty.c
@@ -26,6 +26,8 @@
#include <osmocom/vty/command.h>
#include <osmocom/vty/tdef_vty.h>
+#include <osmocom/gsm/gsm23236.h>
+
#include <osmocom/hnbgw/vty.h>
#include <osmocom/hnbgw/hnbgw.h>
@@ -346,6 +348,69 @@
return CMD_WARNING;
}
+#define NRI_STR "Mapping of Network Resource Indicators to this CN peer, for CN pooling\n"
+#define NULL_NRI_STR "Define NULL-NRI values that cause re-assignment of an MS to a different CN peer, for CN pooling.\n"
+#define NRI_FIRST_LAST_STR "First value of the NRI value range, should not surpass the configured 'nri bitlen'.\n" \
+ "Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the" \
+ " first value; if omitted, apply only the first value.\n"
+#define NRI_ARGS_TO_STR_FMT "%s%s%s"
+#define NRI_ARGS_TO_STR_ARGS(ARGC, ARGV) ARGV[0], (ARGC > 1) ? ".." : "", (ARGC > 1) ? ARGV[1] : ""
+
+#define NRI_WARN(CNLINK, FORMAT, args...) do { \
+ vty_out(vty, "%% Warning: %s %d: " FORMAT "%s", CNLINK->pool->peer_name, CNLINK->nr, ##args, \
+ VTY_NEWLINE); \
+ LOGP(DCN, LOGL_ERROR, "%s %d: " FORMAT "\n", CNLINK->pool->peer_name, CNLINK->nr, ##args); \
+ } while (0)
+
+
+/* hnbgw/iucs/nri ... AND hnbgw/iups/nri ... */
+DEFUN(cfg_hnbgw_cnpool_nri_bitlen,
+ cfg_hnbgw_cnpool_nri_bitlen_cmd,
+ "nri bitlen <1-15>",
+ NRI_STR
+ "Set number of bits that an NRI has, to extract from TMSI identities (always starting just after the TMSI's most significant octet).\n"
+ "bit count (default: " OSMO_STRINGIFY_VAL(OSMO_NRI_BITLEN_DEFAULT) ")\n")
+{
+ struct hnbgw_cnpool *cnpool = vty->index;
+ cnpool->vty.nri_bitlen = atoi(argv[0]);
+ return CMD_SUCCESS;
+}
+
+/* hnbgw/iucs/nri ... AND hnbgw/iups/nri ... */
+DEFUN(cfg_hnbgw_cnpool_nri_null_add, cfg_hnbgw_cnpool_nri_null_add_cmd,
+ "nri null add <0-32767> [<0-32767>]",
+ NRI_STR NULL_NRI_STR "Add NULL-NRI value (or range)\n"
+ NRI_FIRST_LAST_STR)
+{
+ int rc;
+ const char *message;
+ struct hnbgw_cnpool *cnpool = vty->index;
+ rc = osmo_nri_ranges_vty_add(&message, NULL, cnpool->vty.null_nri_ranges, argc, argv, cnpool->vty.nri_bitlen);
+ if (message)
+ vty_out(vty, "%% %s: " NRI_ARGS_TO_STR_FMT, message, NRI_ARGS_TO_STR_ARGS(argc, argv));
+ if (rc < 0)
+ return CMD_WARNING;
+ return CMD_SUCCESS;
+}
+
+/* hnbgw/iucs/nri ... AND hnbgw/iups/nri ... */
+DEFUN(cfg_hnbgw_cnpool_nri_null_del, cfg_hnbgw_cnpool_nri_null_del_cmd,
+ "nri null del <0-32767> [<0-32767>]",
+ NRI_STR NULL_NRI_STR "Remove NRI value or range from the NRI mapping for this CN link\n"
+ NRI_FIRST_LAST_STR)
+{
+ int rc;
+ const char *message;
+ struct hnbgw_cnpool *cnpool = vty->index;
+ rc = osmo_nri_ranges_vty_del(&message, NULL, cnpool->vty.null_nri_ranges, argc, argv);
+ if (message)
+ vty_out(vty, "%% %s: " NRI_ARGS_TO_STR_FMT "%s", message, NRI_ARGS_TO_STR_ARGS(argc, argv),
+ VTY_NEWLINE);
+ if (rc < 0)
+ return CMD_WARNING;
+ return CMD_SUCCESS;
+}
+
/* Legacy from when there was only one IuCS and one IuPS peer. Instead, there are now 'msc 123' / 'sgsn 123' sub nodes.
* To yield legacy behavior, set the first cnlink config in this pool ('msc 0' / 'sgsn 0'). */
DEFUN_DEPRECATED(cfg_hnbgw_cnpool_remote_addr,
@@ -436,6 +501,215 @@
return CMD_SUCCESS;
}
+DEFUN_ATTR(cfg_cnlink_nri_add, cfg_cnlink_nri_add_cmd,
+ "nri add <0-32767> [<0-32767>]",
+ NRI_STR "Add NRI value or range to the NRI mapping for this CN link\n"
+ NRI_FIRST_LAST_STR,
+ CMD_ATTR_IMMEDIATE)
+{
+ struct hnbgw_cnlink *cnlink = vty->index;
+ struct hnbgw_cnlink *other_cnlink;
+ bool before;
+ int rc;
+ const char *message;
+ struct osmo_nri_range added_range;
+
+ rc = osmo_nri_ranges_vty_add(&message, &added_range, cnlink->vty.nri_ranges, argc, argv, cnlink->pool->vty.nri_bitlen);
+ if (message)
+ NRI_WARN(cnlink, "%s: " NRI_ARGS_TO_STR_FMT, message, NRI_ARGS_TO_STR_ARGS(argc, argv));
+ if (rc < 0)
+ return CMD_WARNING;
+
+ /* Issue a warning about NRI range overlaps (but still allow them).
+ * Overlapping ranges will map to whichever CN link comes fist in the llist,
+ * which is not necessarily in the order of increasing cnlink->nr. */
+ before = true;
+ llist_for_each_entry(other_cnlink, &cnlink->pool->cnlinks, entry) {
+ if (other_cnlink == cnlink) {
+ before = false;
+ continue;
+ }
+ if (osmo_nri_range_overlaps_ranges(&added_range, other_cnlink->vty.nri_ranges)) {
+ NRI_WARN(cnlink, "NRI range [%d..%d] overlaps between %s %d and %s %d."
+ " For overlaps, %s %d has higher priority than %s %d",
+ added_range.first, added_range.last, cnlink->pool->peer_name, cnlink->nr,
+ other_cnlink->pool->peer_name, other_cnlink->nr,
+ (before ? other_cnlink : cnlink)->pool->peer_name,
+ (before ? other_cnlink : cnlink)->nr,
+ (before ? cnlink : other_cnlink)->pool->peer_name,
+ (before ? cnlink : other_cnlink)->nr);
+ }
+ }
+ return CMD_SUCCESS;
+}
+
+DEFUN_ATTR(cfg_cnlink_nri_del, cfg_cnlink_nri_del_cmd,
+ "nri del <0-32767> [<0-32767>]",
+ NRI_STR "Remove NRI value or range from the NRI mapping for this CN link\n"
+ NRI_FIRST_LAST_STR,
+ CMD_ATTR_IMMEDIATE)
+{
+ struct hnbgw_cnlink *cnlink = vty->index;
+ int rc;
+ const char *message;
+
+ rc = osmo_nri_ranges_vty_del(&message, NULL, cnlink->vty.nri_ranges, argc, argv);
+ if (message)
+ NRI_WARN(cnlink, "%s: " NRI_ARGS_TO_STR_FMT, message, NRI_ARGS_TO_STR_ARGS(argc, argv));
+ if (rc < 0)
+ return CMD_WARNING;
+ return CMD_SUCCESS;
+}
+
+DEFUN_ATTR(cfg_cnlink_allow_attach, cfg_cnlink_allow_attach_cmd,
+ "allow-attach",
+ "Allow this CN link to attach new subscribers (default).\n",
+ CMD_ATTR_IMMEDIATE)
+{
+ struct hnbgw_cnlink *cnlink = vty->index;
+ cnlink->allow_attach = true;
+ return CMD_SUCCESS;
+}
+
+DEFUN_ATTR(cfg_cnlink_no_allow_attach, cfg_cnlink_no_allow_attach_cmd,
+ "no allow-attach",
+ NO_STR
+ "Do not assign new subscribers to this CN link."
+ " Useful if an CN link in an CN link pool is configured to off-load subscribers."
+ " The CN link will still be operational for already IMSI-Attached subscribers,"
+ " but the NAS node selection function will skip this CN link for new subscribers\n",
+ CMD_ATTR_IMMEDIATE)
+{
+ struct hnbgw_cnlink *cnlink = vty->index;
+ cnlink->allow_attach = false;
+ return CMD_SUCCESS;
+}
+
+DEFUN_ATTR(cfg_cnlink_allow_emerg,
+ cfg_cnlink_allow_emerg_cmd,
+ "allow-emergency",
+ "Allow CM ServiceRequests with type emergency on this CN link\n",
+ CMD_ATTR_IMMEDIATE)
+{
+ struct hnbgw_cnlink *cnlink = vty->index;
+ cnlink->allow_emerg = true;
+ return CMD_SUCCESS;
+}
+
+DEFUN_ATTR(cfg_cnlink_no_allow_emerg,
+ cfg_cnlink_no_allow_emerg_cmd,
+ "no allow-emergency",
+ NO_STR
+ "Do not serve CM ServiceRequests with type emergency on this CN link\n",
+ CMD_ATTR_IMMEDIATE)
+{
+ struct hnbgw_cnlink *cnlink = vty->index;
+ cnlink->allow_emerg = false;
+ return CMD_SUCCESS;
+}
+
+static void cnlink_write_nri(struct vty *vty, struct hnbgw_cnlink *cnlink, bool verbose)
+{
+ struct osmo_nri_range *r;
+
+ if (verbose) {
+ vty_out(vty, "%s %d%s", cnlink->pool->peer_name, cnlink->nr, VTY_NEWLINE);
+ if (llist_empty(&cnlink->vty.nri_ranges->entries)) {
+ vty_out(vty, " %% no NRI mappings%s", VTY_NEWLINE);
+ return;
+ }
+ }
+
+ llist_for_each_entry(r, &cnlink->vty.nri_ranges->entries, entry) {
+ if (osmo_nri_range_validate(r, 255))
+ vty_out(vty, " %% INVALID RANGE:");
+ vty_out(vty, " nri add %d", r->first);
+ if (r->first != r->last)
+ vty_out(vty, " %d", r->last);
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+
+ if (!cnlink->allow_attach)
+ vty_out(vty, " no allow-attach%s", VTY_NEWLINE);
+ if (cnlink->allow_emerg)
+ vty_out(vty, " allow-emergency%s", VTY_NEWLINE);
+}
+
+DEFUN(cfg_cnlink_show_nri, cfg_cnlink_show_nri_cmd,
+ "show nri",
+ SHOW_STR NRI_STR)
+{
+ struct hnbgw_cnlink *cnlink = vty->index;
+ cnlink_write_nri(vty, cnlink, true);
+ return CMD_SUCCESS;
+}
+
+void cnlinks_write_nri(struct vty *vty, struct hnbgw_cnpool *cnpool, bool verbose)
+{
+ struct hnbgw_cnlink *cnlink;
+ llist_for_each_entry(cnlink, &cnpool->cnlinks, entry)
+ cnlink_write_nri(vty, cnlink, verbose);
+}
+
+void cnpool_write_nri(struct vty *vty, struct hnbgw_cnpool *cnpool, bool verbose)
+{
+ struct osmo_nri_range *r;
+
+ if (verbose)
+ vty_out(vty, " %s%s", cnpool->pool_name, VTY_NEWLINE);
+
+ if (verbose || cnpool->vty.nri_bitlen != OSMO_NRI_BITLEN_DEFAULT)
+ vty_out(vty, " nri bitlen %u%s", cnpool->vty.nri_bitlen, VTY_NEWLINE);
+
+ llist_for_each_entry(r, &cnpool->vty.null_nri_ranges->entries, entry) {
+ vty_out(vty, " nri null add %d", r->first);
+ if (r->first != r->last)
+ vty_out(vty, " %d", r->last);
+ vty_out(vty, "%s", VTY_NEWLINE);
+ }
+ if (verbose && llist_empty(&cnpool->vty.null_nri_ranges->entries))
+ vty_out(vty, " %% No NULL-NRI entries%s", VTY_NEWLINE);
+}
+
+DEFUN(show_nri, show_nri_cmd,
+ "show nri",
+ SHOW_STR NRI_STR)
+{
+ /* hnbgw
+ * iucs
+ * nri null add ...
+ */
+ vty_out(vty, "hnbgw%s", VTY_NEWLINE);
+ cnpool_write_nri(vty, &g_hnbgw->sccp.cnpool_iucs, true);
+ cnpool_write_nri(vty, &g_hnbgw->sccp.cnpool_iups, true);
+
+ /* msc 0
+ * nri add ...
+ */
+ cnlinks_write_nri(vty, &g_hnbgw->sccp.cnpool_iucs, true);
+ cnlinks_write_nri(vty, &g_hnbgw->sccp.cnpool_iups, true);
+ return CMD_SUCCESS;
+}
+
+/* Hidden since it exists only for use by ttcn3 tests */
+DEFUN_HIDDEN(cnpool_roundrobin_next, cnpool_roundrobin_next_cmd,
+ "cnpool roundrobin next (msc|sgsn) " CNLINK_NR_RANGE,
+ "CN pooling: load balancing across multiple CN links.\n"
+ "Adjust current state of the CN link round-robin algorithm (for testing).\n"
+ "Set the CN link nr to direct the next new subscriber to (for testing).\n"
+ "Set next MSC or next SGSN number\n"
+ "CN link number, as in the config file; if the number does not exist,"
+ " the round-robin continues to the next valid number.\n")
+{
+ struct hnbgw_cnpool *cnpool;
+ if (!strcmp("msc", argv[0]))
+ cnpool = &g_hnbgw->sccp.cnpool_iucs;
+ else
+ cnpool = &g_hnbgw->sccp.cnpool_iups;
+ cnpool->round_robin_next_nr = atoi(argv[1]);
+ return CMD_SUCCESS;
+}
+
#define APPLY_STR "Immediately use configuration modified via telnet VTY, and restart components as needed.\n"
#define SCCP_RESTART_STR \
" If 'remote-addr' changed, related SCCP links will be restarted, possibly dropping active UE contexts."
@@ -518,6 +792,21 @@
#endif /* ENABLE_PFCP */
+/* hnbgw
+ * iucs } this part
+ * foo }
+ */
+static void _config_write_cnpool(struct vty *vty, struct hnbgw_cnpool *cnpool)
+{
+ if (cnpool->vty.nri_bitlen == OSMO_NRI_BITLEN_DEFAULT
+ && llist_empty(&cnpool->vty.null_nri_ranges->entries))
+ return;
+
+ vty_out(vty, " %s%s", cnpool->pool_name, VTY_NEWLINE);
+
+ cnpool_write_nri(vty, cnpool, false);
+}
+
static int config_write_hnbgw(struct vty *vty)
{
vty_out(vty, "hnbgw%s", VTY_NEWLINE);
@@ -528,6 +817,9 @@
VTY_NEWLINE);
osmo_tdef_vty_groups_write(vty, " ");
+ _config_write_cnpool(vty, &g_hnbgw->sccp.cnpool_iucs);
+ _config_write_cnpool(vty, &g_hnbgw->sccp.cnpool_iups);
+
return CMD_SUCCESS;
}
@@ -564,7 +856,7 @@
vty_out(vty, "%s %d%s", cnpool->peer_name, cnlink->nr, VTY_NEWLINE);
if (cnlink->vty.remote_addr_name)
vty_out(vty, " remote-addr %s%s", cnlink->vty.remote_addr_name, VTY_NEWLINE);
- /* FUTURE: NRI config */
+ cnlink_write_nri(vty, cnlink, false);
}
}
@@ -596,7 +888,14 @@
static void install_cnlink_elements(int node)
{
install_element(node, &cfg_cnlink_remote_addr_cmd);
+ install_element(node, &cfg_cnlink_nri_add_cmd);
+ install_element(node, &cfg_cnlink_nri_del_cmd);
+ install_element(node, &cfg_cnlink_show_nri_cmd);
install_element(node, &cfg_cnlink_apply_sccp_cmd);
+ install_element(node, &cfg_cnlink_allow_attach_cmd);
+ install_element(node, &cfg_cnlink_no_allow_attach_cmd);
+ install_element(node, &cfg_cnlink_allow_emerg_cmd);
+ install_element(node, &cfg_cnlink_no_allow_emerg_cmd);
}
void hnbgw_vty_init(void)
@@ -617,9 +916,15 @@
install_element(HNBGW_NODE, &cfg_hnbgw_iucs_cmd);
install_node(&iucs_node, NULL);
+ install_element(IUCS_NODE, &cfg_hnbgw_cnpool_nri_bitlen_cmd);
+ install_element(IUCS_NODE, &cfg_hnbgw_cnpool_nri_null_add_cmd);
+ install_element(IUCS_NODE, &cfg_hnbgw_cnpool_nri_null_del_cmd);
install_element(HNBGW_NODE, &cfg_hnbgw_iups_cmd);
install_node(&iups_node, NULL);
+ install_element(IUPS_NODE, &cfg_hnbgw_cnpool_nri_bitlen_cmd);
+ install_element(IUPS_NODE, &cfg_hnbgw_cnpool_nri_null_add_cmd);
+ install_element(IUPS_NODE, &cfg_hnbgw_cnpool_nri_null_del_cmd);
/* deprecated: 'remote-addr' outside of 'msc 123' redirects to 'msc 0' / same for 'sgsn' */
install_element(IUCS_NODE, &cfg_hnbgw_cnpool_remote_addr_cmd);
@@ -646,6 +951,8 @@
install_element(PFCP_NODE, &cfg_pfcp_remote_addr_cmd);
#endif
+ osmo_tdef_vty_groups_init(HNBGW_NODE, hnbgw_tdef_group);
+
install_element(CONFIG_NODE, &cfg_msc_nr_cmd);
install_node(&msc_node, config_write_msc);
install_cnlink_elements(MSC_NODE);
@@ -657,5 +964,6 @@
/* global 'apply sccp' command. There are two more on MSC_NODE and SGSN_NODE from install_cnlink_elements(). */
install_element(CONFIG_NODE, &cfg_config_apply_sccp_cmd);
- osmo_tdef_vty_groups_init(HNBGW_NODE, hnbgw_tdef_group);
+ install_element_ve(&show_nri_cmd);
+ install_element(ENABLE_NODE, &cnpool_roundrobin_next_cmd);
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 62fb6c6..f34d9a0 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -25,7 +25,7 @@
$(srcdir)/package.m4 \
$(TESTSUITE) \
osmo-hnbgw-vty-test.cfg \
- osmo-hnbgw.vty \
+ $(srcdir)/*.vty \
$(srcdir)/config/*.cfg \
$(srcdir)/config/*.vty \
$(srcdir)/config/run_tests.sh \
diff --git a/tests/cnpool.vty b/tests/cnpool.vty
index 6b57122..9745306 100644
--- a/tests/cnpool.vty
+++ b/tests/cnpool.vty
@@ -2,6 +2,17 @@
OsmoHNBGW# configure terminal
OsmoHNBGW(config)# ### cnpool doc strings
+OsmoHNBGW(config)# list
+...
+ apply sccp
+...
+
+OsmoHNBGW(config)# apply?
+ apply Immediately use configuration modified via telnet VTY, and restart components as needed.
+
+OsmoHNBGW(config)# apply ?
+ sccp For telnet VTY: apply all SCCP and NRI config changes made to any CN pools and CN links in the running osmo-hnbgw process. If 'remote-addr' changed, related SCCP links will be restarted, possibly dropping active UE contexts. This is run implicitly on program startup, only useful to apply changes made later via telnet VTY.
+
OsmoHNBGW(config)# hnbgw
OsmoHNBGW(config-hnbgw)# list
...
@@ -13,6 +24,79 @@
OsmoHNBGW(config-hnbgw)# iups?
iups Configure IuPS options
+OsmoHNBGW(config-hnbgw)# iucs
+
+OsmoHNBGW(config-hnbgw-iucs)# list
+...
+ nri bitlen <1-15>
+ nri null add <0-32767> [<0-32767>]
+ nri null del <0-32767> [<0-32767>]
+...
+
+OsmoHNBGW(config-hnbgw-iucs)# nri?
+ nri Mapping of Network Resource Indicators to this CN peer, for CN pooling
+
+OsmoHNBGW(config-hnbgw-iucs)# nri ?
+ bitlen Set number of bits that an NRI has, to extract from TMSI identities (always starting just after the TMSI's most significant octet).
+ null Define NULL-NRI values that cause re-assignment of an MS to a different CN peer, for CN pooling.
+
+OsmoHNBGW(config-hnbgw-iucs)# nri bitlen ?
+ <1-15> bit count (default: 10)
+
+OsmoHNBGW(config-hnbgw-iucs)# nri null ?
+ add Add NULL-NRI value (or range)
+ del Remove NRI value or range from the NRI mapping for this CN link
+
+OsmoHNBGW(config-hnbgw-iucs)# nri null add ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+
+OsmoHNBGW(config-hnbgw-iucs)# nri null add 0 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-hnbgw-iucs)# nri null del ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+
+OsmoHNBGW(config-hnbgw-iucs)# nri null del 0 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-hnbgw-iucs)# exit
+
+OsmoHNBGW(config-hnbgw)# iups
+
+OsmoHNBGW(config-hnbgw-iups)# list
+...
+ nri bitlen <1-15>
+ nri null add <0-32767> [<0-32767>]
+ nri null del <0-32767> [<0-32767>]
+...
+
+OsmoHNBGW(config-hnbgw-iups)# nri?
+ nri Mapping of Network Resource Indicators to this CN peer, for CN pooling
+
+OsmoHNBGW(config-hnbgw-iups)# nri ?
+ bitlen Set number of bits that an NRI has, to extract from TMSI identities (always starting just after the TMSI's most significant octet).
+ null Define NULL-NRI values that cause re-assignment of an MS to a different CN peer, for CN pooling.
+
+OsmoHNBGW(config-hnbgw-iups)# nri bitlen ?
+ <1-15> bit count (default: 10)
+
+OsmoHNBGW(config-hnbgw-iups)# nri null ?
+ add Add NULL-NRI value (or range)
+ del Remove NRI value or range from the NRI mapping for this CN link
+
+OsmoHNBGW(config-hnbgw-iups)# nri null add ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+
+OsmoHNBGW(config-hnbgw-iups)# nri null add 0 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-hnbgw-iups)# nri null del ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+
+OsmoHNBGW(config-hnbgw-iups)# nri null del 0 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-hnbgw-iups)# exit
OsmoHNBGW(config-hnbgw)# exit
OsmoHNBGW(config)# msc?
@@ -37,7 +121,14 @@
OsmoHNBGW(config-msc)# list
...
remote-addr NAME
+ nri add <0-32767> [<0-32767>]
+ nri del <0-32767> [<0-32767>]
+ show nri
apply sccp
+ allow-attach
+ no allow-attach
+ allow-emergency
+ no allow-emergency
...
OsmoHNBGW(config-msc)# remote-addr?
@@ -45,11 +136,25 @@
OsmoHNBGW(config-msc)# remote-addr ?
NAME SCCP address book entry name (see 'cs7 instance' / 'sccp-address')
+OsmoHNBGW(config-msc)# show nri?
+ nri Mapping of Network Resource Indicators to this CN peer, for CN pooling
+
OsmoHNBGW(config-msc)# apply?
apply Immediately use configuration modified via telnet VTY, and restart components as needed.
+
OsmoHNBGW(config-msc)# apply ?
sccp For telnet VTY: apply SCCP and NRI config changes made to this CN link in the running osmo-hnbgw process. If 'remote-addr' changed, related SCCP links will be restarted, possibly dropping active UE contexts. This is run implicitly on program startup, only useful to apply changes made later via telnet VTY.
+OsmoHNBGW(config-msc)# allow-attach?
+ allow-attach Allow this CN link to attach new subscribers (default).
+
+OsmoHNBGW(config-msc)# allow-emergency?
+ allow-emergency Allow CM ServiceRequests with type emergency on this CN link
+
+OsmoHNBGW(config-msc)# no ?
+ allow-attach Do not assign new subscribers to this CN link. Useful if an CN link in an CN link pool is configured to off-load subscribers. The CN link will still be operational for already IMSI-Attached subscribers, but the NAS node selection function will skip this CN link for new subscribers
+ allow-emergency Do not serve CM ServiceRequests with type emergency on this CN link
+
OsmoHNBGW(config-msc)# exit
OsmoHNBGW(config)# sgsn 1
@@ -57,7 +162,14 @@
OsmoHNBGW(config-sgsn)# list
...
remote-addr NAME
+ nri add <0-32767> [<0-32767>]
+ nri del <0-32767> [<0-32767>]
+ show nri
apply sccp
+ allow-attach
+ no allow-attach
+ allow-emergency
+ no allow-emergency
...
OsmoHNBGW(config-sgsn)# remote-addr?
@@ -65,11 +177,25 @@
OsmoHNBGW(config-sgsn)# remote-addr ?
NAME SCCP address book entry name (see 'cs7 instance' / 'sccp-address')
+OsmoHNBGW(config-sgsn)# show nri?
+ nri Mapping of Network Resource Indicators to this CN peer, for CN pooling
+
OsmoHNBGW(config-sgsn)# apply?
apply Immediately use configuration modified via telnet VTY, and restart components as needed.
+
OsmoHNBGW(config-sgsn)# apply ?
sccp For telnet VTY: apply SCCP and NRI config changes made to this CN link in the running osmo-hnbgw process. If 'remote-addr' changed, related SCCP links will be restarted, possibly dropping active UE contexts. This is run implicitly on program startup, only useful to apply changes made later via telnet VTY.
+OsmoHNBGW(config-sgsn)# allow-attach?
+ allow-attach Allow this CN link to attach new subscribers (default).
+
+OsmoHNBGW(config-sgsn)# allow-emergency?
+ allow-emergency Allow CM ServiceRequests with type emergency on this CN link
+
+OsmoHNBGW(config-sgsn)# no ?
+ allow-attach Do not assign new subscribers to this CN link. Useful if an CN link in an CN link pool is configured to off-load subscribers. The CN link will still be operational for already IMSI-Attached subscribers, but the NAS node selection function will skip this CN link for new subscribers
+ allow-emergency Do not serve CM ServiceRequests with type emergency on this CN link
+
OsmoHNBGW(config-sgsn)# exit
OsmoHNBGW(config)# ### Just by entering the nodes above, 'msc 1' and 'sgsn 1' now exist
@@ -85,10 +211,12 @@
OsmoHNBGW(config)# msc 2
OsmoHNBGW(config-msc)# remote-addr addr-msc2
+OsmoHNBGW(config-msc)# no allow-attach
OsmoHNBGW(config-msc)# exit
OsmoHNBGW(config)# msc 3
OsmoHNBGW(config-msc)# remote-addr addr-msc3
+OsmoHNBGW(config-msc)# allow-emergency
OsmoHNBGW(config-msc)# exit
OsmoHNBGW(config)# sgsn 2
@@ -105,8 +233,10 @@
msc 1
msc 2
remote-addr addr-msc2
+ no allow-attach
msc 3
remote-addr addr-msc3
+ allow-emergency
sgsn 0
sgsn 1
sgsn 2
@@ -116,8 +246,12 @@
...
OsmoHNBGW(config)# ### Re-entering existing nodes works (does not create new ones)
+OsmoHNBGW(config)# msc 2
+OsmoHNBGW(config-msc)# allow-attach
+OsmoHNBGW(config-msc)# exit
OsmoHNBGW(config)# msc 3
OsmoHNBGW(config-msc)# remote-addr addr-msc4
+OsmoHNBGW(config-msc)# no allow-emergency
OsmoHNBGW(config-msc)# exit
OsmoHNBGW(config)# sgsn 2
OsmoHNBGW(config-sgsn)# remote-addr addr-sgsn4
diff --git a/tests/nri_cfg.vty b/tests/nri_cfg.vty
new file mode 100644
index 0000000..e8a820b
--- /dev/null
+++ b/tests/nri_cfg.vty
@@ -0,0 +1,279 @@
+OsmoHNBGW> show nri
+hnbgw
+ iucs
+ nri bitlen 10
+ % No NULL-NRI entries
+ iups
+ nri bitlen 10
+ % No NULL-NRI entries
+msc 0
+ % no NRI mappings
+sgsn 0
+ % no NRI mappings
+
+OsmoHNBGW> enable
+OsmoHNBGW# configure terminal
+
+OsmoHNBGW(config)# msc 0
+
+OsmoHNBGW(config-msc)# list
+...
+ nri add <0-32767> [<0-32767>]
+ nri del <0-32767> [<0-32767>]
+ show nri
+...
+OsmoHNBGW(config-msc)# nri ?
+ add Add NRI value or range to the NRI mapping for this CN link
+ del Remove NRI value or range from the NRI mapping for this CN link
+OsmoHNBGW(config-msc)# nri add ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+OsmoHNBGW(config-msc)# nri add 23 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-msc)# nri add 23
+OsmoHNBGW(config-msc)# nri add 256 511
+OsmoHNBGW(config-msc)# nri add 100 200
+OsmoHNBGW(config-msc)# nri add 1024 1024
+% Warning: msc 0: Warning: NRI range surpasses current NRI bitlen: 1024..1024
+OsmoHNBGW(config-msc)# show nri
+msc 0
+ nri add 23
+ nri add 100 200
+ nri add 256 511
+ nri add 1024
+OsmoHNBGW(config-msc)# exit
+
+OsmoHNBGW(config)# ### Do msc 2 first, to see that the order of mscs in the internal list is not determined by the msc->nr,
+OsmoHNBGW(config)# ### and whichever was configured first gets higher priority for overlaps.
+
+OsmoHNBGW(config)# msc 2
+OsmoHNBGW(config-msc)# nri add 200 300
+% Warning: msc 2: NRI range [200..300] overlaps between msc 2 and msc 0. For overlaps, msc 0 has higher priority than msc 2
+OsmoHNBGW(config-msc)# nri add 1024 1025
+% Warning: msc 2: Warning: NRI range surpasses current NRI bitlen: 1024..1025
+% Warning: msc 2: NRI range [1024..1025] overlaps between msc 2 and msc 0. For overlaps, msc 0 has higher priority than msc 2
+OsmoHNBGW(config-msc)# exit
+
+OsmoHNBGW(config)# msc 1
+OsmoHNBGW(config-msc)# nri add 42
+OsmoHNBGW(config-msc)# nri add 512 767
+OsmoHNBGW(config-msc)# nri add 200 300
+% Warning: msc 1: NRI range [200..300] overlaps between msc 1 and msc 0. For overlaps, msc 0 has higher priority than msc 1
+% Warning: msc 1: NRI range [200..300] overlaps between msc 1 and msc 2. For overlaps, msc 2 has higher priority than msc 1
+OsmoHNBGW(config-msc)# nri add 1024 1025
+% Warning: msc 1: Warning: NRI range surpasses current NRI bitlen: 1024..1025
+% Warning: msc 1: NRI range [1024..1025] overlaps between msc 1 and msc 0. For overlaps, msc 0 has higher priority than msc 1
+% Warning: msc 1: NRI range [1024..1025] overlaps between msc 1 and msc 2. For overlaps, msc 2 has higher priority than msc 1
+OsmoHNBGW(config-msc)# show nri
+msc 1
+ nri add 42
+ nri add 200 300
+ nri add 512 767
+ nri add 1024 1025
+OsmoHNBGW(config-msc)# exit
+
+OsmoHNBGW(config)# do show nri
+hnbgw
+ iucs
+ nri bitlen 10
+ % No NULL-NRI entries
+ iups
+ nri bitlen 10
+ % No NULL-NRI entries
+msc 0
+ nri add 23
+ nri add 100 200
+ nri add 256 511
+ nri add 1024
+msc 2
+ nri add 200 300
+ nri add 1024 1025
+msc 1
+ nri add 42
+ nri add 200 300
+ nri add 512 767
+ nri add 1024 1025
+sgsn 0
+ % no NRI mappings
+
+OsmoHNBGW(config)# ### msc and sgsn have separate scopes of NRI, i.e. overlaps are no problem
+OsmoHNBGW(config)# sgsn 0
+OsmoHNBGW(config-sgsn)# nri add 0 1023
+OsmoHNBGW(config-sgsn)# show nri
+sgsn 0
+ nri add 0 1023
+OsmoHNBGW(config-sgsn)# exit
+
+OsmoHNBGW(config)# ### NULL-NRI config
+OsmoHNBGW(config)# hnbgw
+OsmoHNBGW(config-hnbgw)# iucs
+
+OsmoHNBGW(config-hnbgw-iucs)# list
+...
+ nri bitlen <1-15>
+ nri null add <0-32767> [<0-32767>]
+ nri null del <0-32767> [<0-32767>]
+...
+
+OsmoHNBGW(config-hnbgw-iucs)# nri ?
+ bitlen Set number of bits that an NRI has, to extract from TMSI identities (always starting just after the TMSI's most significant octet).
+ null Define NULL-NRI values that cause re-assignment of an MS to a different CN peer, for CN pooling.
+
+OsmoHNBGW(config-hnbgw-iucs)# nri bitlen ?
+ <1-15> bit count (default: 10)
+
+OsmoHNBGW(config-hnbgw-iucs)# nri bitlen 11
+OsmoHNBGW(config-hnbgw-iucs)# show running-config
+...
+hnbgw
+...
+ iucs
+...
+ nri bitlen 11
+...
+
+OsmoHNBGW(config-hnbgw-iucs)# nri null ?
+ add Add NULL-NRI value (or range)
+ del Remove NRI value or range from the NRI mapping for this CN link
+
+OsmoHNBGW(config-hnbgw-iucs)# nri null add ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+OsmoHNBGW(config-hnbgw-iucs)# nri null add 0 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-hnbgw-iucs)# nri null del ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+OsmoHNBGW(config-hnbgw-iucs)# nri null del 0 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-hnbgw-iucs)# exit
+
+OsmoHNBGW(config-hnbgw)# iups
+
+OsmoHNBGW(config-hnbgw-iups)# list
+...
+ nri bitlen <1-15>
+ nri null add <0-32767> [<0-32767>]
+ nri null del <0-32767> [<0-32767>]
+...
+
+OsmoHNBGW(config-hnbgw-iups)# nri ?
+ bitlen Set number of bits that an NRI has, to extract from TMSI identities (always starting just after the TMSI's most significant octet).
+ null Define NULL-NRI values that cause re-assignment of an MS to a different CN peer, for CN pooling.
+
+OsmoHNBGW(config-hnbgw-iups)# nri bitlen ?
+ <1-15> bit count (default: 10)
+
+OsmoHNBGW(config-hnbgw-iups)# nri bitlen 9
+OsmoHNBGW(config-hnbgw-iups)# show running-config
+...
+hnbgw
+...
+ iups
+...
+ nri bitlen 9
+...
+
+OsmoHNBGW(config-hnbgw-iups)# nri null ?
+ add Add NULL-NRI value (or range)
+ del Remove NRI value or range from the NRI mapping for this CN link
+
+OsmoHNBGW(config-hnbgw-iups)# nri null add ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+OsmoHNBGW(config-hnbgw-iups)# nri null add 0 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-hnbgw-iups)# nri null del ?
+ <0-32767> First value of the NRI value range, should not surpass the configured 'nri bitlen'.
+OsmoHNBGW(config-hnbgw-iups)# nri null del 0 ?
+ [<0-32767>] Last value of the NRI value range, should not surpass the configured 'nri bitlen' and be larger than the first value; if omitted, apply only the first value.
+
+OsmoHNBGW(config-hnbgw-iups)# exit
+
+OsmoHNBGW(config-hnbgw)# exit
+
+OsmoHNBGW(config)# msc 0
+OsmoHNBGW(config-msc)# nri del 0 10000
+OsmoHNBGW(config-msc)# exit
+OsmoHNBGW(config)# msc 1
+OsmoHNBGW(config-msc)# nri del 0 10000
+OsmoHNBGW(config-msc)# exit
+OsmoHNBGW(config)# msc 2
+OsmoHNBGW(config-msc)# nri del 0 10000
+OsmoHNBGW(config-msc)# exit
+OsmoHNBGW(config)# do show nri
+hnbgw
+ iucs
+ nri bitlen 11
+ % No NULL-NRI entries
+ iups
+ nri bitlen 9
+ % No NULL-NRI entries
+msc 0
+ % no NRI mappings
+msc 2
+ % no NRI mappings
+msc 1
+ % no NRI mappings
+sgsn 0
+ nri add 0 1023
+
+OsmoHNBGW(config)# msc 0
+OsmoHNBGW(config-msc)# nri add 0 1000
+OsmoHNBGW(config-msc)# show nri
+msc 0
+ nri add 0 1000
+OsmoHNBGW(config-msc)# nri del 23
+OsmoHNBGW(config-msc)# nri del 200 300
+OsmoHNBGW(config-msc)# nri del 1000 2000
+OsmoHNBGW(config-msc)# show nri
+msc 0
+ nri add 0 22
+ nri add 24 199
+ nri add 301 999
+OsmoHNBGW(config-msc)# nri add 23
+OsmoHNBGW(config-msc)# show nri
+msc 0
+ nri add 0 199
+ nri add 301 999
+OsmoHNBGW(config-msc)# nri add 200 300
+OsmoHNBGW(config-msc)# show nri
+msc 0
+ nri add 0 999
+OsmoHNBGW(config-msc)# nri add 1000
+OsmoHNBGW(config-msc)# show nri
+msc 0
+ nri add 0 1000
+
+OsmoHNBGW(config-msc)# show running-config
+... ! no allow-attach
+OsmoHNBGW(config-msc)# no allow-attach
+OsmoHNBGW(config-msc)# show running-config
+...
+msc 0
+...
+ nri add 0 1000
+ no allow-attach
+... ! no allow-attach
+OsmoHNBGW(config-msc)# exit
+OsmoHNBGW(config)# sgsn 1
+OsmoHNBGW(config-sgsn)# no allow-attach
+OsmoHNBGW(config-sgsn)# show running-config
+...
+msc 0
+...
+ nri add 0 1000
+ no allow-attach
+... ! no allow-attach
+sgsn 1
+...
+ no allow-attach
+...
+
+OsmoHNBGW(config-sgsn)# allow-attach
+OsmoHNBGW(config-sgsn)# exit
+OsmoHNBGW(config)# msc 0
+OsmoHNBGW(config-msc)# allow-attach
+OsmoHNBGW(config-msc)# show running-config
+... ! no allow-attach
+OsmoHNBGW(config-msc)# exit
--
To view, visit https://gerrit.osmocom.org/c/osmo-hnbgw/+/33130
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-hnbgw
Gerrit-Branch: master
Gerrit-Change-Id: Ifb87e01e5971962e5cfe5e127871af4a67806de1
Gerrit-Change-Number: 33130
Gerrit-PatchSet: 2
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged
neels has submitted this change. ( https://gerrit.osmocom.org/c/osmo-hnbgw/+/33128 )
Change subject: cnpool prep: add SCCP_EV_USER_ABORT
......................................................................
cnpool prep: add SCCP_EV_USER_ABORT
To ease patch review, I decided to submit this separately from the
caller, which follows in subsequent patch
I5479eded786ec26062d49403a8be12967f113cdb
The new event will be dispatched when there are SCCP config changes
pending, and the human user types 'apply sccp' on the telnet VTY. The
aim is to disconnect all connections so we can create a new SCCP User.
Related: SYS#6412
Change-Id: Idff8e09b5328c904b175e4d4df7d4044a34f4a20
---
M include/osmocom/hnbgw/context_map.h
M src/osmo-hnbgw/context_map_sccp.c
2 files changed, 38 insertions(+), 0 deletions(-)
Approvals:
pespin: Looks good to me, approved
Jenkins Builder: Verified
laforge: Looks good to me, approved
diff --git a/include/osmocom/hnbgw/context_map.h b/include/osmocom/hnbgw/context_map.h
index 55d96ea..bcc3238 100644
--- a/include/osmocom/hnbgw/context_map.h
+++ b/include/osmocom/hnbgw/context_map.h
@@ -55,6 +55,9 @@
MAP_SCCP_EV_RAN_LINK_LOST,
/* Receiving an SCCP RLSD from CN, or libosmo-sigtran tells us about SCCP connection timeout. All done. */
MAP_SCCP_EV_RX_RELEASED,
+ /* The human admin asks to drop the current SCCP connection, by telnet VTY 'apply sccp' in presence of SCCP
+ * config changes. */
+ MAP_SCCP_EV_USER_ABORT,
};
/* For context_map_get_state(), to combine the RUA and SCCP states, for VTY reporting only. */
diff --git a/src/osmo-hnbgw/context_map_sccp.c b/src/osmo-hnbgw/context_map_sccp.c
index 00b24f2..cc65b6e 100644
--- a/src/osmo-hnbgw/context_map_sccp.c
+++ b/src/osmo-hnbgw/context_map_sccp.c
@@ -54,6 +54,7 @@
OSMO_VALUE_STRING(MAP_SCCP_EV_RAN_DISC),
OSMO_VALUE_STRING(MAP_SCCP_EV_RAN_LINK_LOST),
OSMO_VALUE_STRING(MAP_SCCP_EV_RX_RELEASED),
+ OSMO_VALUE_STRING(MAP_SCCP_EV_USER_ABORT),
{}
};
@@ -281,6 +282,7 @@
case MAP_SCCP_EV_RAN_LINK_LOST:
case MAP_SCCP_EV_RAN_DISC:
+ case MAP_SCCP_EV_USER_ABORT:
/* No CR has been sent yet, just go to disconnected state. */
if (msg_has_l2_data(ranap_msg))
LOG_MAP(map, DLSCCP, LOGL_ERROR, "SCCP not connected, cannot dispatch RANAP message\n");
@@ -317,6 +319,7 @@
case MAP_SCCP_EV_RAN_LINK_LOST:
case MAP_SCCP_EV_RAN_DISC:
+ case MAP_SCCP_EV_USER_ABORT:
/* RUA connection was terminated. First wait for the CC before releasing the SCCP conn. */
if (msg_has_l2_data(ranap_msg))
LOGPFSML(fi, LOGL_ERROR, "Connection not yet confirmed, cannot forward RANAP to CN\n");
@@ -373,6 +376,9 @@
case MAP_SCCP_EV_RAN_LINK_LOST:
/* RUA has disconnected ungracefully, so there is no Iu Release that told the CN to disconnect.
* Disconnect on the SCCP layer, ungracefully. */
+ case MAP_SCCP_EV_USER_ABORT:
+ /* The user is asking for disconnection, so there is no Iu Release in progress. Disconnect now. */
+
/* There won't be any ranap_msg, but if a caller wants to dispatch a msg, forward it before
* disconnecting. */
tx_sccp_df1(fi, ranap_msg);
@@ -440,6 +446,12 @@
handle_rx_sccp(fi, ranap_msg);
return;
+ case MAP_SCCP_EV_USER_ABORT:
+ /* Stop waiting for RLSD, send RLSD now. */
+ tx_sccp_rlsd(fi);
+ map_sccp_fsm_state_chg(MAP_SCCP_ST_DISCONNECTED);
+ return;
+
default:
OSMO_ASSERT(false);
}
@@ -511,6 +523,7 @@
| S(MAP_SCCP_EV_RAN_DISC)
| S(MAP_SCCP_EV_RAN_LINK_LOST)
| S(MAP_SCCP_EV_RX_RELEASED)
+ | S(MAP_SCCP_EV_USER_ABORT)
,
.out_state_mask = 0
| S(MAP_SCCP_ST_INIT)
@@ -527,6 +540,7 @@
| S(MAP_SCCP_EV_RAN_DISC)
| S(MAP_SCCP_EV_RAN_LINK_LOST)
| S(MAP_SCCP_EV_RX_RELEASED)
+ | S(MAP_SCCP_EV_USER_ABORT)
,
.out_state_mask = 0
| S(MAP_SCCP_ST_CONNECTED)
@@ -543,6 +557,7 @@
| S(MAP_SCCP_EV_RAN_LINK_LOST)
| S(MAP_SCCP_EV_RX_RELEASED)
| S(MAP_SCCP_EV_RX_CONNECTION_CONFIRM)
+ | S(MAP_SCCP_EV_USER_ABORT)
,
.out_state_mask = 0
| S(MAP_SCCP_ST_WAIT_RLSD)
@@ -560,6 +575,7 @@
| S(MAP_SCCP_EV_RAN_DISC)
| S(MAP_SCCP_EV_RAN_LINK_LOST)
| S(MAP_SCCP_EV_RX_CONNECTION_CONFIRM)
+ | S(MAP_SCCP_EV_USER_ABORT)
,
.out_state_mask = 0
| S(MAP_SCCP_ST_DISCONNECTED)
@@ -573,6 +589,7 @@
| S(MAP_SCCP_EV_TX_DATA_REQUEST)
| S(MAP_SCCP_EV_RAN_DISC)
| S(MAP_SCCP_EV_RAN_LINK_LOST)
+ | S(MAP_SCCP_EV_USER_ABORT)
,
.onenter = map_sccp_disconnected_onenter,
.action = map_sccp_disconnected_action,
--
To view, visit https://gerrit.osmocom.org/c/osmo-hnbgw/+/33128
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-hnbgw
Gerrit-Branch: master
Gerrit-Change-Id: Idff8e09b5328c904b175e4d4df7d4044a34f4a20
Gerrit-Change-Number: 33128
Gerrit-PatchSet: 2
Gerrit-Owner: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: neels <nhofmeyr(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged