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);