hnbgw: UE context: add handling by tmsi identification
To prepare for an upcoming commit that accepts TMSI identification upon UE
Register Requests:
Add tmsi arg to ue_context_alloc().
Add ue_context_by_tmsi().
This is aimed at the ip.access nano3G femto cell, as it apparently feeds
whichever identification the UE sends through to HNBAP (TMSI+LAI, pTMSI+RAI),
instead of an IMSI as expected.
See the upcoming commit that enables accepting TMSI identities for further
detail.
Change-Id: I138458443319cc4cbea5ee7906cf5dd72d582130
diff --git a/src/hnbgw.c b/src/hnbgw.c
index 8c860b1..c326b12 100644
--- a/src/hnbgw.c
+++ b/src/hnbgw.c
@@ -111,6 +111,17 @@
return NULL;
}
+struct ue_context *ue_context_by_tmsi(struct hnb_gw *gw, uint32_t tmsi)
+{
+ struct ue_context *ue;
+
+ llist_for_each_entry(ue, &gw->ue_list, list) {
+ if (ue->tmsi == tmsi)
+ return ue;
+ }
+ return NULL;
+}
+
void ue_context_free_by_hnb(struct hnb_gw *gw, const struct hnb_context *hnb)
{
struct ue_context *ue, *tmp;
@@ -132,7 +143,8 @@
return id;
}
-struct ue_context *ue_context_alloc(struct hnb_context *hnb, const char *imsi)
+struct ue_context *ue_context_alloc(struct hnb_context *hnb, const char *imsi,
+ uint32_t tmsi)
{
struct ue_context *ue;
@@ -141,7 +153,11 @@
return NULL;
ue->hnb = hnb;
- strncpy(ue->imsi, imsi, sizeof(ue->imsi));
+ if (imsi)
+ strncpy(ue->imsi, imsi, sizeof(ue->imsi));
+ else
+ ue->imsi[0] = '\0';
+ ue->tmsi = tmsi;
ue->context_id = get_next_ue_ctx_id(hnb->gw);
llist_add_tail(&ue->list, &hnb->gw->ue_list);