lynxis lazus submitted this change.

View Change



10 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.

Approvals: pespin: Looks good to me, approved laforge: Looks good to me, but someone else must approve Jenkins Builder: Verified
iu_client: add a new event NEW_AREA

When the IU client learns a new LAC/RAC or
the LAC/RAC has moved from one RNC to another RNC,
inform the user via an event.

Allows the SGSN to track RACs which uses Iu.

Change-Id: I8b1b8c58bf72b00e2705ca87a89a91481bac3470
---
M TODO-RELEASE
M include/osmocom/ranap/iu_client.h
M src/iu_client.c
3 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/TODO-RELEASE b/TODO-RELEASE
index ac52f44..b583f7e 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -10,3 +10,4 @@
libosmo-ranap add API ranap_ran_rx_co_decode2()
libosmo-ranap deprecate API ranap_ran_rx_co_decode()
libosmo-ranap add API iu_client.h: add ranap_iu_page_cs2/ranap_iu_page_ps2
+libosmo-ranap new event RANAP_IU_EVENT_NEW_AREA
diff --git a/include/osmocom/ranap/iu_client.h b/include/osmocom/ranap/iu_client.h
index 86ae874..465a17d 100644
--- a/include/osmocom/ranap/iu_client.h
+++ b/include/osmocom/ranap/iu_client.h
@@ -38,11 +38,26 @@
struct osmo_timer_list release_timeout;
};

+enum ranap_iu_event_new_area_type {
+ RANAP_IU_NEW_LAC,
+ RANAP_IU_NEW_RAC,
+};
+
+struct ranap_iu_event_new_area {
+ const struct osmo_rnc_id *rnc_id;
+ enum ranap_iu_event_new_area_type cell_type;
+ union {
+ const struct osmo_location_area_id *lai;
+ const struct osmo_routing_area_id *rai;
+ } u;
+};
+
enum ranap_iu_event_type {
RANAP_IU_EVENT_RAB_ASSIGN,
RANAP_IU_EVENT_SECURITY_MODE_COMPLETE,
RANAP_IU_EVENT_IU_RELEASE, /* An actual Iu Release message was received */
RANAP_IU_EVENT_LINK_INVALIDATED, /* A SUA link was lost or closed down */
+ RANAP_IU_EVENT_NEW_AREA, /* Either a new LAC/RAC has been detected */
};

extern const struct value_string ranap_iu_event_type_names[];
diff --git a/src/iu_client.c b/src/iu_client.c
index ce3030e..90fd1dc 100644
--- a/src/iu_client.c
+++ b/src/iu_client.c
@@ -116,6 +116,7 @@
OSMO_VALUE_STRING(RANAP_IU_EVENT_SECURITY_MODE_COMPLETE),
OSMO_VALUE_STRING(RANAP_IU_EVENT_IU_RELEASE),
OSMO_VALUE_STRING(RANAP_IU_EVENT_LINK_INVALIDATED),
+ OSMO_VALUE_STRING(RANAP_IU_EVENT_NEW_AREA),
{ 0, NULL }
};

@@ -126,7 +127,7 @@
if (!global_iu_event_cb)
return 0;

- if (!ue_ctx->notification)
+ if (ue_ctx && !ue_ctx->notification)
return 0;

LOGPIU(LOGL_DEBUG, "Submit Iu event to upper layer: %s\n", ranap_iu_event_type_str(type));
@@ -134,6 +135,25 @@
return global_iu_event_cb(ue_ctx, type, data);
}

+static void global_iu_event_new_area(const struct osmo_rnc_id *rnc_id, const struct osmo_routing_area_id *rai)
+{
+ struct ranap_iu_event_new_area new_area = (struct ranap_iu_event_new_area) {
+ .rnc_id = rnc_id,
+ .cell_type = RANAP_IU_NEW_RAC
+ };
+
+ if (rai->rac == OSMO_RESERVED_RAC) {
+ new_area.cell_type = RANAP_IU_NEW_LAC;
+ new_area.u.lai = &rai->lac;
+ } else {
+ new_area.cell_type = RANAP_IU_NEW_RAC;
+ new_area.u.rai = rai;
+ }
+
+ global_iu_event(NULL, RANAP_IU_EVENT_NEW_AREA, &new_area);
+}
+
+
static void ue_conn_ctx_release_timeout_cb(void *ctx_)
{
struct ranap_ue_conn_ctx *ctx = (struct ranap_ue_conn_ctx *)ctx_;
@@ -330,12 +350,14 @@

llist_del(&lre->entry);
llist_add(&lre->entry, &rnc->lac_rac_list);
+ global_iu_event_new_area(rnc_id, rai);
} else if (!old_rnc) {
/* LAC, RAC not recorded yet */
LOGPIU(LOGL_NOTICE, "RNC %s: new LAC/RAC %s\n", osmo_rnc_id_name(rnc_id), osmo_rai_name2(rai));
lre = talloc_zero(rnc, struct iu_lac_rac_entry);
lre->rai = *rai;
llist_add(&lre->entry, &rnc->lac_rac_list);
+ global_iu_event_new_area(rnc_id, rai);
}
/* else, LAC,RAC already recorded with the current RNC. */

@@ -959,7 +981,6 @@
return paged;
}

-
/***********************************************************************
*
***********************************************************************/

To view, visit change 38947. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: merged
Gerrit-Project: osmo-iuh
Gerrit-Branch: master
Gerrit-Change-Id: I8b1b8c58bf72b00e2705ca87a89a91481bac3470
Gerrit-Change-Number: 38947
Gerrit-PatchSet: 20
Gerrit-Owner: lynxis lazus <lynxis@fe80.eu>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: lynxis lazus <lynxis@fe80.eu>
Gerrit-Reviewer: pespin <pespin@sysmocom.de>