diff --git a/openbsc/include/openbsc/gb_proxy.h b/openbsc/include/openbsc/gb_proxy.h
index 0494df0..1c06a90 100644
--- a/openbsc/include/openbsc/gb_proxy.h
+++ b/openbsc/include/openbsc/gb_proxy.h
@@ -84,7 +84,7 @@
 	int acquire_imsi;
 	int route_to_sgsn2;
 	uint16_t nsip_sgsn2_nsei;
-	enum gbproxy_keep_mode keep_tlli_infos;
+	enum gbproxy_keep_mode keep_link_infos;
 
 	/* IMSI checking/matching */
 	int check_imsi;
@@ -135,7 +135,7 @@
 	uint32_t ptmsi;
 };
 
-struct gbproxy_tlli_info {
+struct gbproxy_link_info {
 	struct llist_head list;
 
 	struct gbproxy_tlli_state tlli;
@@ -177,52 +177,52 @@
 void gbprox_reset(struct gbproxy_config *cfg);
 
 /* TLLI info handling */
-void gbproxy_delete_tlli_infos(struct gbproxy_peer *peer);
-struct gbproxy_tlli_info *gbproxy_update_tlli_state_ul(
+void gbproxy_delete_link_infos(struct gbproxy_peer *peer);
+struct gbproxy_link_info *gbproxy_update_link_state_ul(
 	struct gbproxy_peer *peer, time_t now,
 	struct gprs_gb_parse_context *parse_ctx);
-struct gbproxy_tlli_info *gbproxy_update_tlli_state_dl(
+struct gbproxy_link_info *gbproxy_update_link_state_dl(
 	struct gbproxy_peer *peer, time_t now,
 	struct gprs_gb_parse_context *parse_ctx);
-void gbproxy_update_tlli_state_after(
-	struct gbproxy_peer *peer, struct gbproxy_tlli_info *tlli_info,
+void gbproxy_update_link_state_after(
+	struct gbproxy_peer *peer, struct gbproxy_link_info *link_info,
 	time_t now, struct gprs_gb_parse_context *parse_ctx);
-int gbproxy_remove_stale_tlli_infos(struct gbproxy_peer *peer, time_t now);
-void gbproxy_delete_tlli_info(struct gbproxy_peer *peer,
-			 struct gbproxy_tlli_info *tlli_info);
-void gbproxy_tlli_info_discard_messages(struct gbproxy_tlli_info *tlli_info);
+int gbproxy_remove_stale_link_infos(struct gbproxy_peer *peer, time_t now);
+void gbproxy_delete_link_info(struct gbproxy_peer *peer,
+			 struct gbproxy_link_info *link_info);
+void gbproxy_link_info_discard_messages(struct gbproxy_link_info *link_info);
 
-void gbproxy_attach_tlli_info(struct gbproxy_peer *peer, time_t now,
-			      struct gbproxy_tlli_info *tlli_info);
-void gbproxy_update_tlli_info(struct gbproxy_tlli_info *tlli_info,
+void gbproxy_attach_link_info(struct gbproxy_peer *peer, time_t now,
+			      struct gbproxy_link_info *link_info);
+void gbproxy_update_link_info(struct gbproxy_link_info *link_info,
 			      const uint8_t *imsi, size_t imsi_len);
-void gbproxy_detach_tlli_info(struct gbproxy_peer *peer,
-			      struct gbproxy_tlli_info *tlli_info);
-struct gbproxy_tlli_info *gbproxy_tlli_info_alloc( struct gbproxy_peer *peer);
+void gbproxy_detach_link_info(struct gbproxy_peer *peer,
+			      struct gbproxy_link_info *link_info);
+struct gbproxy_link_info *gbproxy_link_info_alloc( struct gbproxy_peer *peer);
 
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_tlli(
+struct gbproxy_link_info *gbproxy_link_info_by_tlli(
 	struct gbproxy_peer *peer, uint32_t tlli);
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_imsi(
+struct gbproxy_link_info *gbproxy_link_info_by_imsi(
 	struct gbproxy_peer *peer, const uint8_t *imsi, size_t imsi_len);
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_any_sgsn_tlli(
+struct gbproxy_link_info *gbproxy_link_info_by_any_sgsn_tlli(
 	struct gbproxy_peer *peer, uint32_t tlli);
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_sgsn_tlli(
+struct gbproxy_link_info *gbproxy_link_info_by_sgsn_tlli(
 	struct gbproxy_peer *peer,
 	uint32_t tlli, uint32_t sgsn_nsei);
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_ptmsi(
+struct gbproxy_link_info *gbproxy_link_info_by_ptmsi(
 	struct gbproxy_peer *peer,
 	uint32_t ptmsi);
 
 int gbproxy_imsi_matches(
 	struct gbproxy_peer *peer,
-	struct gbproxy_tlli_info *tlli_info);
+	struct gbproxy_link_info *link_info);
 uint32_t gbproxy_map_tlli(
-	uint32_t other_tlli, struct gbproxy_tlli_info *tlli_info, int to_bss);
+	uint32_t other_tlli, struct gbproxy_link_info *link_info, int to_bss);
 
 /* needed by gb_proxy_tlli.h */
 uint32_t gbproxy_make_bss_ptmsi(struct gbproxy_peer *peer, uint32_t sgsn_ptmsi);
 uint32_t gbproxy_make_sgsn_tlli(
-	struct gbproxy_peer *peer, struct gbproxy_tlli_info *tlli_info,
+	struct gbproxy_peer *peer, struct gbproxy_link_info *link_info,
 	uint32_t bss_tlli);
 int gbproxy_check_imsi(
 	struct gbproxy_peer *peer, const uint8_t *imsi, size_t imsi_len);
@@ -230,12 +230,12 @@
 /* Message patching */
 void gbproxy_patch_bssgp(
 	struct msgb *msg, uint8_t *bssgp, size_t bssgp_len,
-	struct gbproxy_peer *peer, struct gbproxy_tlli_info *tlli_info,
+	struct gbproxy_peer *peer, struct gbproxy_link_info *link_info,
 	int *len_change, struct gprs_gb_parse_context *parse_ctx);
 
 int gbproxy_patch_llc(
 	struct msgb *msg, uint8_t *llc, size_t llc_len,
-	struct gbproxy_peer *peer, struct gbproxy_tlli_info *tlli_info,
+	struct gbproxy_peer *peer, struct gbproxy_link_info *link_info,
 	int *len_change, struct gprs_gb_parse_context *parse_ctx);
 
 int gbproxy_set_patch_filter(
diff --git a/openbsc/src/gprs/gb_proxy.c b/openbsc/src/gprs/gb_proxy.c
index b5566e3..130ab4e 100644
--- a/openbsc/src/gprs/gb_proxy.c
+++ b/openbsc/src/gprs/gb_proxy.c
@@ -234,7 +234,7 @@
 			bss_ptmsi = rand_r(&peer->cfg->bss_ptmsi_state);
 			bss_ptmsi = bss_ptmsi | 0xC0000000;
 
-			if (gbproxy_tlli_info_by_ptmsi(peer, bss_ptmsi))
+			if (gbproxy_link_info_by_ptmsi(peer, bss_ptmsi))
 				bss_ptmsi = GSM_RESERVED_TMSI;
 		} while (bss_ptmsi == GSM_RESERVED_TMSI && max_retries--);
 	}
@@ -246,15 +246,15 @@
 }
 
 uint32_t gbproxy_make_sgsn_tlli(struct gbproxy_peer *peer,
-				struct gbproxy_tlli_info *tlli_info,
+				struct gbproxy_link_info *link_info,
 				uint32_t bss_tlli)
 {
 	uint32_t sgsn_tlli;
 	int max_retries = 23;
 	if (!peer->cfg->patch_ptmsi) {
 		sgsn_tlli = bss_tlli;
-	} else if (tlli_info->sgsn_tlli.ptmsi != GSM_RESERVED_TMSI) {
-		sgsn_tlli = gprs_tmsi2tlli(tlli_info->sgsn_tlli.ptmsi,
+	} else if (link_info->sgsn_tlli.ptmsi != GSM_RESERVED_TMSI) {
+		sgsn_tlli = gprs_tmsi2tlli(link_info->sgsn_tlli.ptmsi,
 					   TLLI_FOREIGN);
 	} else {
 		do {
@@ -262,7 +262,7 @@
 			sgsn_tlli = rand_r(&peer->cfg->sgsn_tlli_state);
 			sgsn_tlli = (sgsn_tlli & 0x7fffffff) | 0x78000000;
 
-			if (gbproxy_tlli_info_by_any_sgsn_tlli(peer, sgsn_tlli))
+			if (gbproxy_link_info_by_any_sgsn_tlli(peer, sgsn_tlli))
 				sgsn_tlli = 0;
 		} while (!sgsn_tlli && max_retries--);
 	}
@@ -274,33 +274,33 @@
 }
 
 /* Returns != 0 iff IMSI acquisition was in progress */
-static int gbproxy_restart_imsi_acquisition(struct gbproxy_tlli_info* tlli_info)
+static int gbproxy_restart_imsi_acquisition(struct gbproxy_link_info* link_info)
 {
 	int in_progress = 0;
-	if (!tlli_info)
+	if (!link_info)
 		return 0;
 
-	if (tlli_info->imsi_acq_pending) {
+	if (link_info->imsi_acq_pending) {
 		in_progress = 1;
-		tlli_info->imsi_acq_retries += 1;
+		link_info->imsi_acq_retries += 1;
 	}
 
-	gbproxy_tlli_info_discard_messages(tlli_info);
-	tlli_info->imsi_acq_pending = 0;
+	gbproxy_link_info_discard_messages(link_info);
+	link_info->imsi_acq_pending = 0;
 
 	return in_progress;
 }
 
-static void gbproxy_reset_imsi_acquisition(struct gbproxy_tlli_info* tlli_info)
+static void gbproxy_reset_imsi_acquisition(struct gbproxy_link_info* link_info)
 {
-	gbproxy_restart_imsi_acquisition(tlli_info);
-	tlli_info->imsi_acq_retries = 0;
+	gbproxy_restart_imsi_acquisition(link_info);
+	link_info->imsi_acq_retries = 0;
 }
 
 static void gbproxy_flush_stored_messages(struct gbproxy_peer *peer,
 					  struct msgb *msg,
 					  time_t now,
-					  struct gbproxy_tlli_info* tlli_info,
+					  struct gbproxy_link_info* link_info,
 					  struct gprs_gb_parse_context *parse_ctx)
 {
 	int rc;
@@ -314,7 +314,7 @@
 	     msgb_nsei(msg));
 
 	/* Patch and flush stored messages towards the SGSN */
-	while ((stored_msg = msgb_dequeue(&tlli_info->stored_msgs))) {
+	while ((stored_msg = msgb_dequeue(&link_info->stored_msgs))) {
 		struct gprs_gb_parse_context tmp_parse_ctx = {0};
 		tmp_parse_ctx.to_bss = 0;
 		tmp_parse_ctx.peer_nsei = msgb_nsei(stored_msg);
@@ -325,14 +325,14 @@
 				    &tmp_parse_ctx);
 		gbproxy_patch_bssgp(msg, msgb_bssgph(stored_msg),
 				    msgb_bssgp_len(stored_msg),
-				    peer, tlli_info, &len_change,
+				    peer, link_info, &len_change,
 				    &tmp_parse_ctx);
 
-		gbproxy_update_tlli_state_after(peer, tlli_info, now,
+		gbproxy_update_link_state_after(peer, link_info, now,
 						&tmp_parse_ctx);
 
 		rc = gbprox_relay2sgsn(peer->cfg, stored_msg,
-				       msgb_bvci(msg), tlli_info->sgsn_nsei);
+				       msgb_bvci(msg), link_info->sgsn_nsei);
 
 		if (rc < 0)
 			LOGP(DLLC, LOGL_ERROR,
@@ -346,7 +346,7 @@
 }
 
 static void gbproxy_acquire_imsi(struct gbproxy_peer *peer,
-				 struct gbproxy_tlli_info* tlli_info,
+				 struct gbproxy_link_info* link_info,
 				 uint16_t bvci)
 {
 	struct msgb *idreq_msg;
@@ -362,14 +362,14 @@
 	 * be an issue when P-TMSI patching is _not_ enabled and the SGSN
 	 * doesn't reset V(UT) after a detach. */
 	gprs_push_llc_ui(idreq_msg, 0, GPRS_SAPI_GMM,
-			 (tlli_info->imsi_acq_retries + 256) % 512);
-	gprs_push_bssgp_dl_unitdata(idreq_msg, tlli_info->tlli.current);
+			 (link_info->imsi_acq_retries + 256) % 512);
+	gprs_push_bssgp_dl_unitdata(idreq_msg, link_info->tlli.current);
 	gbprox_relay2peer(idreq_msg, peer, bvci);
 	msgb_free(idreq_msg);
 }
 
 static void gbproxy_tx_detach_acc(struct gbproxy_peer *peer,
-				  struct gbproxy_tlli_info* tlli_info,
+				  struct gbproxy_link_info* link_info,
 				  uint16_t bvci)
 {
 	struct msgb *detacc_msg;
@@ -378,8 +378,8 @@
 	detacc_msg = gsm48_msgb_alloc();
 	gprs_put_mo_detach_acc(detacc_msg);
 	gprs_push_llc_ui(detacc_msg, 0, GPRS_SAPI_GMM,
-			 (tlli_info->imsi_acq_retries + 256) % 512);
-	gprs_push_bssgp_dl_unitdata(detacc_msg, tlli_info->tlli.current);
+			 (link_info->imsi_acq_retries + 256) % 512);
+	gprs_push_bssgp_dl_unitdata(detacc_msg, link_info->tlli.current);
 	gbprox_relay2peer(detacc_msg, peer, bvci);
 	msgb_free(detacc_msg);
 }
@@ -388,15 +388,15 @@
 static int gbproxy_imsi_acquisition(struct gbproxy_peer *peer,
 				    struct msgb *msg,
 				    time_t now,
-				    struct gbproxy_tlli_info* tlli_info,
+				    struct gbproxy_link_info* link_info,
 				    struct gprs_gb_parse_context *parse_ctx)
 {
 	struct msgb *stored_msg;
 
-	if (!tlli_info)
+	if (!link_info)
 		return 1;
 
-	if (!tlli_info->imsi_acq_pending && tlli_info->imsi_len > 0)
+	if (!link_info->imsi_acq_pending && link_info->imsi_len > 0)
 		return 1;
 
 	if (parse_ctx->g48_hdr)
@@ -404,7 +404,7 @@
 		{
 		case GSM48_MT_GMM_RA_UPD_REQ:
 		case GSM48_MT_GMM_ATTACH_REQ:
-			if (gbproxy_restart_imsi_acquisition(tlli_info)) {
+			if (gbproxy_restart_imsi_acquisition(link_info)) {
 				LOGP(DLLC, LOGL_INFO,
 				     "NSEI=%d(BSS) IMSI acquisition was in progress "
 				     "when receiving an %s.\n",
@@ -413,7 +413,7 @@
 			break;
 		case GSM48_MT_GMM_DETACH_REQ:
 			/* Nothing has been sent to the SGSN yet */
-			if (tlli_info->imsi_acq_pending) {
+			if (link_info->imsi_acq_pending) {
 				LOGP(DLLC, LOGL_INFO,
 				     "NSEI=%d(BSS) IMSI acquisition was in progress "
 				     "when receiving a DETACH_REQ.\n",
@@ -424,26 +424,26 @@
 				     "NSEI=%d(BSS) IMSI not yet acquired, "
 				     "faking a DETACH_ACC.\n",
 				     msgb_nsei(msg));
-				gbproxy_tx_detach_acc(peer, tlli_info, msgb_bvci(msg));
+				gbproxy_tx_detach_acc(peer, link_info, msgb_bvci(msg));
 				parse_ctx->invalidate_tlli = 1;
 			}
-			gbproxy_reset_imsi_acquisition(tlli_info);
-			gbproxy_update_tlli_state_after(peer, tlli_info, now,
+			gbproxy_reset_imsi_acquisition(link_info);
+			gbproxy_update_link_state_after(peer, link_info, now,
 							parse_ctx);
 			return 0;
 		}
 
-	if (tlli_info->imsi_acq_pending && tlli_info->imsi_len > 0) {
+	if (link_info->imsi_acq_pending && link_info->imsi_len > 0) {
 		int is_ident_resp =
 			parse_ctx->g48_hdr &&
 			parse_ctx->g48_hdr->proto_discr == GSM48_PDISC_MM_GPRS &&
 			parse_ctx->g48_hdr->msg_type == GSM48_MT_GMM_ID_RESP;
 
 		/* The IMSI is now available */
-		gbproxy_flush_stored_messages(peer, msg, now, tlli_info,
+		gbproxy_flush_stored_messages(peer, msg, now, link_info,
 					      parse_ctx);
 
-		gbproxy_reset_imsi_acquisition(tlli_info);
+		gbproxy_reset_imsi_acquisition(link_info);
 
 		/* This message is most probably the response to the ident
 		 * request sent by gbproxy_acquire_imsi(). Don't forward it to
@@ -461,22 +461,22 @@
 	     parse_ctx->llc_msg_name ? parse_ctx->llc_msg_name : "BSSGP");
 
 	stored_msg = gprs_msgb_copy(msg, "process_bssgp_ul");
-	msgb_enqueue(&tlli_info->stored_msgs, stored_msg);
+	msgb_enqueue(&link_info->stored_msgs, stored_msg);
 
-	if (!tlli_info->imsi_acq_pending) {
+	if (!link_info->imsi_acq_pending) {
 		LOGP(DLLC, LOGL_INFO,
 		     "NSEI=%d(BSS) IMSI is required but not available, "
 		     "initiating identification procedure (%s)\n",
 		     msgb_nsei(msg),
 		     parse_ctx->llc_msg_name ? parse_ctx->llc_msg_name : "BSSGP");
 
-		gbproxy_acquire_imsi(peer, tlli_info, msgb_bvci(msg));
+		gbproxy_acquire_imsi(peer, link_info, msgb_bvci(msg));
 
 		/* There is no explicit retransmission handling, the
 		 * implementation relies on the MS doing proper retransmissions
 		 * of the triggering message instead */
 
-		tlli_info->imsi_acq_pending = 1;
+		link_info->imsi_acq_pending = 1;
 	}
 
 	return 0;
@@ -518,7 +518,7 @@
 	int rc;
 	int len_change = 0;
 	time_t now;
-	struct gbproxy_tlli_info *tlli_info = NULL;
+	struct gbproxy_link_info *link_info = NULL;
 	uint32_t sgsn_nsei = cfg->nsip_sgsn_nsei;
 
 	if (!cfg->core_mcc && !cfg->core_mnc && !cfg->core_apn &&
@@ -556,7 +556,7 @@
 
 	gprs_gb_log_parse_context(&parse_ctx, "BSSGP");
 
-	tlli_info = gbproxy_update_tlli_state_ul(peer, now, &parse_ctx);
+	link_info = gbproxy_update_link_state_ul(peer, now, &parse_ctx);
 
 	if (parse_ctx.g48_hdr) {
 		switch (parse_ctx.g48_hdr->msg_type) {
@@ -569,28 +569,28 @@
 		}
 	}
 
-	if (tlli_info && cfg->route_to_sgsn2) {
-		if (cfg->acquire_imsi && tlli_info->imsi_len == 0)
+	if (link_info && cfg->route_to_sgsn2) {
+		if (cfg->acquire_imsi && link_info->imsi_len == 0)
 			sgsn_nsei = 0xffff;
-		else if (gbproxy_imsi_matches(peer, tlli_info))
+		else if (gbproxy_imsi_matches(peer, link_info))
 			sgsn_nsei = cfg->nsip_sgsn2_nsei;
 	}
 
-	if (tlli_info)
-		tlli_info->sgsn_nsei = sgsn_nsei;
+	if (link_info)
+		link_info->sgsn_nsei = sgsn_nsei;
 
 	/* Handle IMSI acquisition */
 	if (cfg->acquire_imsi) {
-		rc = gbproxy_imsi_acquisition(peer, msg, now, tlli_info,
+		rc = gbproxy_imsi_acquisition(peer, msg, now, link_info,
 					      &parse_ctx);
 		if (rc <= 0)
 			return rc;
 	}
 
 	gbproxy_patch_bssgp(msg, msgb_bssgph(msg), msgb_bssgp_len(msg),
-			    peer, tlli_info, &len_change, &parse_ctx);
+			    peer, link_info, &len_change, &parse_ctx);
 
-	gbproxy_update_tlli_state_after(peer, tlli_info, now, &parse_ctx);
+	gbproxy_update_link_state_after(peer, link_info, now, &parse_ctx);
 
 	if (sgsn_nsei != cfg->nsip_sgsn_nsei) {
 		/* Send message directly to the selected SGSN */
@@ -611,7 +611,7 @@
 	int rc;
 	int len_change = 0;
 	time_t now;
-	struct gbproxy_tlli_info *tlli_info = NULL;
+	struct gbproxy_link_info *link_info = NULL;
 
 	if (!cfg->core_mcc && !cfg->core_mnc && !cfg->core_apn &&
 	    !cfg->acquire_imsi && !cfg->patch_ptmsi && !cfg->route_to_sgsn2)
@@ -655,12 +655,12 @@
 
 	gprs_gb_log_parse_context(&parse_ctx, "BSSGP");
 
-	tlli_info = gbproxy_update_tlli_state_dl(peer, now, &parse_ctx);
+	link_info = gbproxy_update_link_state_dl(peer, now, &parse_ctx);
 
 	gbproxy_patch_bssgp(msg, msgb_bssgph(msg), msgb_bssgp_len(msg),
-			    peer, tlli_info, &len_change, &parse_ctx);
+			    peer, link_info, &len_change, &parse_ctx);
 
-	gbproxy_update_tlli_state_after(peer, tlli_info, now, &parse_ctx);
+	gbproxy_update_link_state_after(peer, link_info, now, &parse_ctx);
 
 	return;
 }
diff --git a/openbsc/src/gprs/gb_proxy_patch.c b/openbsc/src/gprs/gb_proxy_patch.c
index 93b8588..cf6eb88 100644
--- a/openbsc/src/gprs/gb_proxy_patch.c
+++ b/openbsc/src/gprs/gb_proxy_patch.c
@@ -192,20 +192,20 @@
 
 int gbproxy_patch_llc(struct msgb *msg, uint8_t *llc, size_t llc_len,
 		     struct gbproxy_peer *peer,
-		     struct gbproxy_tlli_info *tlli_info, int *len_change,
+		     struct gbproxy_link_info *link_info, int *len_change,
 		     struct gprs_gb_parse_context *parse_ctx)
 {
 	struct gprs_llc_hdr_parsed *ghp = &parse_ctx->llc_hdr_parsed;
 	int have_patched = 0;
 	int fcs;
 
-	if (parse_ctx->ptmsi_enc && tlli_info &&
+	if (parse_ctx->ptmsi_enc && link_info &&
 	    !parse_ctx->old_raid_is_foreign && peer->cfg->patch_ptmsi) {
 		uint32_t ptmsi;
 		if (parse_ctx->to_bss)
-			ptmsi = tlli_info->tlli.ptmsi;
+			ptmsi = link_info->tlli.ptmsi;
 		else
-			ptmsi = tlli_info->sgsn_tlli.ptmsi;
+			ptmsi = link_info->sgsn_tlli.ptmsi;
 
 		if (ptmsi != GSM_RESERVED_TMSI) {
 			if (gbproxy_patch_ptmsi(parse_ctx->ptmsi_enc, peer,
@@ -216,12 +216,12 @@
 		}
 	}
 
-	if (parse_ctx->new_ptmsi_enc && tlli_info && peer->cfg->patch_ptmsi) {
+	if (parse_ctx->new_ptmsi_enc && link_info && peer->cfg->patch_ptmsi) {
 		uint32_t ptmsi;
 		if (parse_ctx->to_bss)
-			ptmsi = tlli_info->tlli.ptmsi;
+			ptmsi = link_info->tlli.ptmsi;
 		else
-			ptmsi = tlli_info->sgsn_tlli.ptmsi;
+			ptmsi = link_info->sgsn_tlli.ptmsi;
 
 		OSMO_ASSERT(ptmsi);
 		if (gbproxy_patch_ptmsi(parse_ctx->new_ptmsi_enc, peer,
@@ -245,7 +245,7 @@
 	if (parse_ctx->apn_ie &&
 	    peer->cfg->core_apn &&
 	    !parse_ctx->to_bss &&
-	    gbproxy_imsi_matches(peer, tlli_info) && peer->cfg->core_apn) {
+	    gbproxy_imsi_matches(peer, link_info) && peer->cfg->core_apn) {
 		size_t new_len;
 		gbproxy_patch_apn_ie(msg,
 				     parse_ctx->apn_ie, parse_ctx->apn_ie_len,
@@ -275,7 +275,7 @@
 /* patch BSSGP message to use core_mcc/mnc on the SGSN side */
 void gbproxy_patch_bssgp(struct msgb *msg, uint8_t *bssgp, size_t bssgp_len,
 			 struct gbproxy_peer *peer,
-			 struct gbproxy_tlli_info *tlli_info, int *len_change,
+			 struct gbproxy_link_info *link_info, int *len_change,
 			 struct gprs_gb_parse_context *parse_ctx)
 {
 	const char *err_info = NULL;
@@ -296,7 +296,7 @@
 		goto patch_error;
 	}
 
-	if (!tlli_info && parse_ctx->tlli_enc && parse_ctx->to_bss) {
+	if (!link_info && parse_ctx->tlli_enc && parse_ctx->to_bss) {
 		/* Happens with unknown (not cached) TLLI coming from
 		 * the SGSN */
 		/* TODO: What shall be done with the message in this case? */
@@ -305,12 +305,12 @@
 		goto patch_error;
 	}
 
-	if (!tlli_info)
+	if (!link_info)
 		return;
 
 	if (parse_ctx->tlli_enc && peer->cfg->patch_ptmsi) {
 		uint32_t tlli = gbproxy_map_tlli(parse_ctx->tlli,
-						 tlli_info, parse_ctx->to_bss);
+						 link_info, parse_ctx->to_bss);
 
 		if (tlli) {
 			gbproxy_patch_tlli(parse_ctx->tlli_enc, peer, tlli,
@@ -329,7 +329,7 @@
 		size_t llc_len = parse_ctx->llc_len;
 		int llc_len_change = 0;
 
-		gbproxy_patch_llc(msg, llc, llc_len, peer, tlli_info,
+		gbproxy_patch_llc(msg, llc, llc_len, peer, link_info,
 				  &llc_len_change, parse_ctx);
 		/* Note that the APN might have been resized here, but no
 		 * pointer int the parse_ctx will refer to an adress after the
diff --git a/openbsc/src/gprs/gb_proxy_peer.c b/openbsc/src/gprs/gb_proxy_peer.c
index 335b46f..8f90665 100644
--- a/openbsc/src/gprs/gb_proxy_peer.c
+++ b/openbsc/src/gprs/gb_proxy_peer.c
@@ -172,7 +172,7 @@
 {
 	llist_del(&peer->list);
 
-	gbproxy_delete_tlli_infos(peer);
+	gbproxy_delete_link_infos(peer);
 
 	rate_ctr_group_free(peer->ctrg);
 	peer->ctrg = NULL;
diff --git a/openbsc/src/gprs/gb_proxy_tlli.c b/openbsc/src/gprs/gb_proxy_tlli.c
index 70f2bfb..14ce7d8 100644
--- a/openbsc/src/gprs/gb_proxy_tlli.c
+++ b/openbsc/src/gprs/gb_proxy_tlli.c
@@ -32,140 +32,140 @@
 #include <osmocom/core/rate_ctr.h>
 #include <osmocom/core/talloc.h>
 
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_tlli(struct gbproxy_peer *peer,
+struct gbproxy_link_info *gbproxy_link_info_by_tlli(struct gbproxy_peer *peer,
 					    uint32_t tlli)
 {
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
-	llist_for_each_entry(tlli_info, &state->enabled_tllis, list)
-		if (tlli_info->tlli.current == tlli ||
-		    tlli_info->tlli.assigned == tlli)
-			return tlli_info;
+	llist_for_each_entry(link_info, &state->enabled_tllis, list)
+		if (link_info->tlli.current == tlli ||
+		    link_info->tlli.assigned == tlli)
+			return link_info;
 
 	return NULL;
 }
 
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_ptmsi(
+struct gbproxy_link_info *gbproxy_link_info_by_ptmsi(
 	struct gbproxy_peer *peer,
 	uint32_t ptmsi)
 {
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
-	llist_for_each_entry(tlli_info, &state->enabled_tllis, list)
-		if (tlli_info->tlli.ptmsi == ptmsi)
-			return tlli_info;
+	llist_for_each_entry(link_info, &state->enabled_tllis, list)
+		if (link_info->tlli.ptmsi == ptmsi)
+			return link_info;
 
 	return NULL;
 }
 
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_any_sgsn_tlli(
+struct gbproxy_link_info *gbproxy_link_info_by_any_sgsn_tlli(
 	struct gbproxy_peer *peer,
 	uint32_t tlli)
 {
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
 	/* Don't care about the NSEI */
-	llist_for_each_entry(tlli_info, &state->enabled_tllis, list)
-		if (tlli_info->sgsn_tlli.current == tlli ||
-		     tlli_info->sgsn_tlli.assigned == tlli)
-			return tlli_info;
+	llist_for_each_entry(link_info, &state->enabled_tllis, list)
+		if (link_info->sgsn_tlli.current == tlli ||
+		     link_info->sgsn_tlli.assigned == tlli)
+			return link_info;
 
 	return NULL;
 }
 
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_sgsn_tlli(
+struct gbproxy_link_info *gbproxy_link_info_by_sgsn_tlli(
 	struct gbproxy_peer *peer,
 	uint32_t tlli, uint32_t sgsn_nsei)
 {
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
-	llist_for_each_entry(tlli_info, &state->enabled_tllis, list)
-		if ((tlli_info->sgsn_tlli.current == tlli ||
-		     tlli_info->sgsn_tlli.assigned == tlli) &&
-		    tlli_info->sgsn_nsei == sgsn_nsei)
-			return tlli_info;
+	llist_for_each_entry(link_info, &state->enabled_tllis, list)
+		if ((link_info->sgsn_tlli.current == tlli ||
+		     link_info->sgsn_tlli.assigned == tlli) &&
+		    link_info->sgsn_nsei == sgsn_nsei)
+			return link_info;
 
 	return NULL;
 }
 
-struct gbproxy_tlli_info *gbproxy_tlli_info_by_imsi(
+struct gbproxy_link_info *gbproxy_link_info_by_imsi(
 	struct gbproxy_peer *peer,
 	const uint8_t *imsi,
 	size_t imsi_len)
 {
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
 	if (!gprs_is_mi_imsi(imsi, imsi_len))
 		return NULL;
 
-	llist_for_each_entry(tlli_info, &state->enabled_tllis, list) {
-		if (tlli_info->imsi_len != imsi_len)
+	llist_for_each_entry(link_info, &state->enabled_tllis, list) {
+		if (link_info->imsi_len != imsi_len)
 			continue;
-		if (memcmp(tlli_info->imsi, imsi, imsi_len) != 0)
+		if (memcmp(link_info->imsi, imsi, imsi_len) != 0)
 			continue;
 
-		return tlli_info;
+		return link_info;
 	}
 
 	return NULL;
 }
 
-void gbproxy_tlli_info_discard_messages(struct gbproxy_tlli_info *tlli_info)
+void gbproxy_link_info_discard_messages(struct gbproxy_link_info *link_info)
 {
 	struct msgb *msg, *nxt;
 
-	llist_for_each_entry_safe(msg, nxt, &tlli_info->stored_msgs, list) {
+	llist_for_each_entry_safe(msg, nxt, &link_info->stored_msgs, list) {
 		llist_del(&msg->list);
 		msgb_free(msg);
 	}
 }
 
-void gbproxy_delete_tlli_info(struct gbproxy_peer *peer,
-			 struct gbproxy_tlli_info *tlli_info)
+void gbproxy_delete_link_info(struct gbproxy_peer *peer,
+			 struct gbproxy_link_info *link_info)
 {
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
-	gbproxy_tlli_info_discard_messages(tlli_info);
+	gbproxy_link_info_discard_messages(link_info);
 
-	llist_del(&tlli_info->list);
-	talloc_free(tlli_info);
+	llist_del(&link_info->list);
+	talloc_free(link_info);
 	state->enabled_tllis_count -= 1;
 
 	peer->ctrg->ctr[GBPROX_PEER_CTR_TLLI_CACHE_SIZE].current =
 		state->enabled_tllis_count;
 }
 
-void gbproxy_delete_tlli_infos(struct gbproxy_peer *peer)
+void gbproxy_delete_link_infos(struct gbproxy_peer *peer)
 {
-	struct gbproxy_tlli_info *tlli_info, *nxt;
+	struct gbproxy_link_info *link_info, *nxt;
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
-	llist_for_each_entry_safe(tlli_info, nxt, &state->enabled_tllis, list)
-		gbproxy_delete_tlli_info(peer, tlli_info);
+	llist_for_each_entry_safe(link_info, nxt, &state->enabled_tllis, list)
+		gbproxy_delete_link_info(peer, link_info);
 
 	OSMO_ASSERT(state->enabled_tllis_count == 0);
 	OSMO_ASSERT(llist_empty(&state->enabled_tllis));
 }
 
-void gbproxy_attach_tlli_info(struct gbproxy_peer *peer, time_t now,
-			      struct gbproxy_tlli_info *tlli_info)
+void gbproxy_attach_link_info(struct gbproxy_peer *peer, time_t now,
+			      struct gbproxy_link_info *link_info)
 {
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
-	tlli_info->timestamp = now;
-	llist_add(&tlli_info->list, &state->enabled_tllis);
+	link_info->timestamp = now;
+	llist_add(&link_info->list, &state->enabled_tllis);
 	state->enabled_tllis_count += 1;
 
 	peer->ctrg->ctr[GBPROX_PEER_CTR_TLLI_CACHE_SIZE].current =
 		state->enabled_tllis_count;
 }
 
-int gbproxy_remove_stale_tlli_infos(struct gbproxy_peer *peer, time_t now)
+int gbproxy_remove_stale_link_infos(struct gbproxy_peer *peer, time_t now)
 {
 	struct gbproxy_patch_state *state = &peer->patch_state;
 	int exceeded_max_len = 0;
@@ -179,27 +179,27 @@
 	check_for_age = peer->cfg->tlli_max_age > 0;
 
 	for (; exceeded_max_len > 0; exceeded_max_len--) {
-		struct gbproxy_tlli_info *tlli_info;
+		struct gbproxy_link_info *link_info;
 		OSMO_ASSERT(!llist_empty(&state->enabled_tllis));
-		tlli_info = llist_entry(state->enabled_tllis.prev,
-					struct gbproxy_tlli_info,
+		link_info = llist_entry(state->enabled_tllis.prev,
+					struct gbproxy_link_info,
 					list);
 		LOGP(DGPRS, LOGL_INFO,
 		     "Removing TLLI %08x from list "
 		     "(stale, length %d, max_len exceeded)\n",
-		     tlli_info->tlli.current, state->enabled_tllis_count);
+		     link_info->tlli.current, state->enabled_tllis_count);
 
-		gbproxy_delete_tlli_info(peer, tlli_info);
+		gbproxy_delete_link_info(peer, link_info);
 		deleted_count += 1;
 	}
 
 	while (check_for_age && !llist_empty(&state->enabled_tllis)) {
 		time_t age;
-		struct gbproxy_tlli_info *tlli_info;
-		tlli_info = llist_entry(state->enabled_tllis.prev,
-					struct gbproxy_tlli_info,
+		struct gbproxy_link_info *link_info;
+		link_info = llist_entry(state->enabled_tllis.prev,
+					struct gbproxy_link_info,
 					list);
-		age = now - tlli_info->timestamp;
+		age = now - link_info->timestamp;
 		/* age < 0 only happens after system time jumps, discard entry */
 		if (age <= peer->cfg->tlli_max_age && age >= 0) {
 			check_for_age = 0;
@@ -209,35 +209,35 @@
 		LOGP(DGPRS, LOGL_INFO,
 		     "Removing TLLI %08x from list "
 		     "(stale, age %d, max_age exceeded)\n",
-		     tlli_info->tlli.current, (int)age);
+		     link_info->tlli.current, (int)age);
 
-		gbproxy_delete_tlli_info(peer, tlli_info);
+		gbproxy_delete_link_info(peer, link_info);
 		deleted_count += 1;
 	}
 
 	return deleted_count;
 }
 
-struct gbproxy_tlli_info *gbproxy_tlli_info_alloc( struct gbproxy_peer *peer)
+struct gbproxy_link_info *gbproxy_link_info_alloc( struct gbproxy_peer *peer)
 {
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 
-	tlli_info = talloc_zero(peer, struct gbproxy_tlli_info);
-	tlli_info->tlli.ptmsi = GSM_RESERVED_TMSI;
-	tlli_info->sgsn_tlli.ptmsi = GSM_RESERVED_TMSI;
+	link_info = talloc_zero(peer, struct gbproxy_link_info);
+	link_info->tlli.ptmsi = GSM_RESERVED_TMSI;
+	link_info->sgsn_tlli.ptmsi = GSM_RESERVED_TMSI;
 
-	INIT_LLIST_HEAD(&tlli_info->stored_msgs);
+	INIT_LLIST_HEAD(&link_info->stored_msgs);
 
-	return tlli_info;
+	return link_info;
 }
 
-void gbproxy_detach_tlli_info(
+void gbproxy_detach_link_info(
 	struct gbproxy_peer *peer,
-	struct gbproxy_tlli_info *tlli_info)
+	struct gbproxy_link_info *link_info)
 {
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
-	llist_del(&tlli_info->list);
+	llist_del(&link_info->list);
 	OSMO_ASSERT(state->enabled_tllis_count > 0);
 	state->enabled_tllis_count -= 1;
 
@@ -245,17 +245,17 @@
 		state->enabled_tllis_count;
 }
 
-void gbproxy_update_tlli_info(struct gbproxy_tlli_info *tlli_info,
+void gbproxy_update_link_info(struct gbproxy_link_info *link_info,
 			      const uint8_t *imsi, size_t imsi_len)
 {
 	if (!gprs_is_mi_imsi(imsi, imsi_len))
 		return;
 
-	tlli_info->imsi_len = imsi_len;
-	tlli_info->imsi =
-		talloc_realloc_size(tlli_info, tlli_info->imsi, imsi_len);
-	OSMO_ASSERT(tlli_info->imsi != NULL);
-	memcpy(tlli_info->imsi, imsi, imsi_len);
+	link_info->imsi_len = imsi_len;
+	link_info->imsi =
+		talloc_realloc_size(link_info, link_info->imsi, imsi_len);
+	OSMO_ASSERT(link_info->imsi != NULL);
+	memcpy(link_info->imsi, imsi, imsi_len);
 }
 
 void gbproxy_reassign_tlli(struct gbproxy_tlli_state *tlli_state,
@@ -275,16 +275,16 @@
 }
 
 uint32_t gbproxy_map_tlli(uint32_t other_tlli,
-			  struct gbproxy_tlli_info *tlli_info, int to_bss)
+			  struct gbproxy_link_info *link_info, int to_bss)
 {
 	uint32_t tlli = 0;
 	struct gbproxy_tlli_state *src, *dst;
 	if (to_bss) {
-		src = &tlli_info->sgsn_tlli;
-		dst = &tlli_info->tlli;
+		src = &link_info->sgsn_tlli;
+		dst = &link_info->tlli;
 	} else {
-		src = &tlli_info->tlli;
-		dst = &tlli_info->sgsn_tlli;
+		src = &link_info->tlli;
+		dst = &link_info->sgsn_tlli;
 	}
 	if (src->current == other_tlli)
 		tlli = dst->current;
@@ -326,78 +326,78 @@
 	tlli_state->assigned = 0;
 }
 
-static void gbproxy_touch_tlli_info(struct gbproxy_peer *peer,
-				    struct gbproxy_tlli_info *tlli_info,
+static void gbproxy_touch_link_info(struct gbproxy_peer *peer,
+				    struct gbproxy_link_info *link_info,
 				    time_t now)
 {
-	gbproxy_detach_tlli_info(peer, tlli_info);
-	gbproxy_attach_tlli_info(peer, now, tlli_info);
+	gbproxy_detach_link_info(peer, link_info);
+	gbproxy_attach_link_info(peer, now, link_info);
 }
 
-static void gbproxy_unregister_tlli_info(struct gbproxy_peer *peer,
-					 struct gbproxy_tlli_info *tlli_info)
+static void gbproxy_unregister_link_info(struct gbproxy_peer *peer,
+					 struct gbproxy_link_info *link_info)
 {
-	if (!tlli_info)
+	if (!link_info)
 		return;
 
-	if (tlli_info->tlli.ptmsi == GSM_RESERVED_TMSI && !tlli_info->imsi_len) {
+	if (link_info->tlli.ptmsi == GSM_RESERVED_TMSI && !link_info->imsi_len) {
 		LOGP(DGPRS, LOGL_INFO,
 		     "Removing TLLI %08x from list (P-TMSI or IMSI are not set)\n",
-		     tlli_info->tlli.current);
-		gbproxy_delete_tlli_info(peer, tlli_info);
+		     link_info->tlli.current);
+		gbproxy_delete_link_info(peer, link_info);
 		return;
 	}
 
-	tlli_info->tlli.current = 0;
-	tlli_info->tlli.assigned = 0;
-	tlli_info->sgsn_tlli.current = 0;
-	tlli_info->sgsn_tlli.assigned = 0;
+	link_info->tlli.current = 0;
+	link_info->tlli.assigned = 0;
+	link_info->sgsn_tlli.current = 0;
+	link_info->sgsn_tlli.assigned = 0;
 
-	tlli_info->is_deregistered = 1;
+	link_info->is_deregistered = 1;
 
 	return;
 }
 
 int gbproxy_imsi_matches(struct gbproxy_peer *peer,
-		       struct gbproxy_tlli_info *tlli_info)
+		       struct gbproxy_link_info *link_info)
 {
 	if (!peer->cfg->check_imsi)
 		return 1;
 
-	return tlli_info != NULL && tlli_info->imsi_matches;
+	return link_info != NULL && link_info->imsi_matches;
 }
 
 void gbproxy_assign_imsi(struct gbproxy_peer *peer,
-			 struct gbproxy_tlli_info *tlli_info,
+			 struct gbproxy_link_info *link_info,
 			 struct gprs_gb_parse_context *parse_ctx)
 {
 	int imsi_matches;
-	struct gbproxy_tlli_info *other_tlli_info;
+	struct gbproxy_link_info *other_link_info;
 
 	/* Make sure that there is a second entry with the same IMSI */
-	other_tlli_info = gbproxy_tlli_info_by_imsi(
+	other_link_info = gbproxy_link_info_by_imsi(
 		peer, parse_ctx->imsi, parse_ctx->imsi_len);
 
-	if (other_tlli_info && other_tlli_info != tlli_info) {
+	if (other_link_info && other_link_info != link_info) {
 		char mi_buf[200];
 		mi_buf[0] = '\0';
 		gsm48_mi_to_string(mi_buf, sizeof(mi_buf),
 				   parse_ctx->imsi, parse_ctx->imsi_len);
 		LOGP(DGPRS, LOGL_INFO,
 		     "Removing TLLI %08x from list (IMSI %s re-used)\n",
-		     other_tlli_info->tlli.current, mi_buf);
-		gbproxy_delete_tlli_info(peer, other_tlli_info);
+		     other_link_info->tlli.current, mi_buf);
+		gbproxy_delete_link_info(peer, other_link_info);
 	}
 
 	/* Update the IMSI field */
-	gbproxy_update_tlli_info(tlli_info,
+	gbproxy_update_link_info(link_info,
 				 parse_ctx->imsi, parse_ctx->imsi_len);
 
 	/* Check, whether the IMSI matches */
 	imsi_matches = gbproxy_check_imsi(peer, parse_ctx->imsi,
 					     parse_ctx->imsi_len);
 	if (imsi_matches >= 0)
-		tlli_info->imsi_matches = imsi_matches;
+		link_info->imsi_matches = imsi_matches;
 }
 
 static int gbproxy_tlli_match(const struct gbproxy_tlli_state *a,
@@ -415,43 +415,43 @@
 	return 0;
 }
 
-static void gbproxy_remove_matching_tlli_infos(
-	struct gbproxy_peer *peer, struct gbproxy_tlli_info *tlli_info)
+static void gbproxy_remove_matching_link_infos(
+	struct gbproxy_peer *peer, struct gbproxy_link_info *link_info)
 {
-	struct gbproxy_tlli_info *info, *nxt;
+	struct gbproxy_link_info *info, *nxt;
 	struct gbproxy_patch_state *state = &peer->patch_state;
 
 	/* Make sure that there is no second entry with the same P-TMSI or TLLI */
 	llist_for_each_entry_safe(info, nxt, &state->enabled_tllis, list) {
-		if (info == tlli_info)
+		if (info == link_info)
 			continue;
 
-		if (!gbproxy_tlli_match(&tlli_info->tlli, &info->tlli) &&
-		    (tlli_info->sgsn_nsei != info->sgsn_nsei ||
-		     !gbproxy_tlli_match(&tlli_info->sgsn_tlli, &info->sgsn_tlli)))
+		if (!gbproxy_tlli_match(&link_info->tlli, &info->tlli) &&
+		    (link_info->sgsn_nsei != info->sgsn_nsei ||
+		     !gbproxy_tlli_match(&link_info->sgsn_tlli, &info->sgsn_tlli)))
 			continue;
 
 		LOGP(DGPRS, LOGL_INFO,
 		     "Removing TLLI %08x from list (P-TMSI/TLLI re-used)\n",
 		     info->tlli.current);
-		gbproxy_delete_tlli_info(peer, info);
+		gbproxy_delete_link_info(peer, info);
 	}
 }
 
-struct gbproxy_tlli_info *gbproxy_get_tlli_info_ul(
+struct gbproxy_link_info *gbproxy_get_link_info_ul(
 	struct gbproxy_peer *peer,
 	struct gprs_gb_parse_context *parse_ctx)
 {
-	struct gbproxy_tlli_info *tlli_info = NULL;
+	struct gbproxy_link_info *link_info = NULL;
 
 	if (parse_ctx->tlli_enc)
-		tlli_info = gbproxy_tlli_info_by_tlli(peer, parse_ctx->tlli);
+		link_info = gbproxy_link_info_by_tlli(peer, parse_ctx->tlli);
 
-	if (!tlli_info && parse_ctx->imsi)
-		tlli_info = gbproxy_tlli_info_by_imsi(
+	if (!link_info && parse_ctx->imsi)
+		link_info = gbproxy_link_info_by_imsi(
 			peer, parse_ctx->imsi, parse_ctx->imsi_len);
 
-	if (!tlli_info && parse_ctx->ptmsi_enc && !parse_ctx->old_raid_is_foreign) {
+	if (!link_info && parse_ctx->ptmsi_enc && !parse_ctx->old_raid_is_foreign) {
 		uint32_t bss_ptmsi;
 		if (!gprs_parse_mi_tmsi(parse_ctx->ptmsi_enc, GSM48_TMSI_LEN,
 					&bss_ptmsi))
@@ -459,78 +459,78 @@
 			     "Failed to parse P-TMSI (TLLI is %08x)\n",
 			     parse_ctx->tlli);
 		else
-			tlli_info = gbproxy_tlli_info_by_ptmsi(peer, bss_ptmsi);
+			link_info = gbproxy_link_info_by_ptmsi(peer, bss_ptmsi);
 	}
 
-	if (tlli_info)
-		tlli_info->is_deregistered = 0;
+	if (link_info)
+		link_info->is_deregistered = 0;
 
-	return tlli_info;
+	return link_info;
 }
 
-struct gbproxy_tlli_info *gbproxy_update_tlli_state_ul(
+struct gbproxy_link_info *gbproxy_update_link_state_ul(
 	struct gbproxy_peer *peer,
 	time_t now,
 	struct gprs_gb_parse_context *parse_ctx)
 {
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 
-	tlli_info = gbproxy_get_tlli_info_ul(peer, parse_ctx);
+	link_info = gbproxy_get_link_info_ul(peer, parse_ctx);
 
 	if (parse_ctx->tlli_enc && parse_ctx->llc) {
 		uint32_t sgsn_tlli;
-		if (!tlli_info) {
+		if (!link_info) {
 			LOGP(DGPRS, LOGL_INFO, "Adding TLLI %08x to list\n",
 			    parse_ctx->tlli);
-			tlli_info = gbproxy_tlli_info_alloc(peer);
-			gbproxy_attach_tlli_info(peer, now, tlli_info);
+			link_info = gbproxy_link_info_alloc(peer);
+			gbproxy_attach_link_info(peer, now, link_info);
 
 			/* Setup TLLIs */
-			sgsn_tlli = gbproxy_make_sgsn_tlli(peer, tlli_info,
+			sgsn_tlli = gbproxy_make_sgsn_tlli(peer, link_info,
 							   parse_ctx->tlli);
-			tlli_info->sgsn_tlli.current = sgsn_tlli;
-			tlli_info->tlli.current = parse_ctx->tlli;;
-		} else if (!tlli_info->tlli.current) {
+			link_info->sgsn_tlli.current = sgsn_tlli;
+			link_info->tlli.current = parse_ctx->tlli;;
+		} else if (!link_info->tlli.current) {
 			/* New TLLI (info found by IMSI or P-TMSI) */
-			tlli_info->tlli.current = parse_ctx->tlli;
-			tlli_info->sgsn_tlli.current =
-				gbproxy_make_sgsn_tlli(peer, tlli_info,
+			link_info->tlli.current = parse_ctx->tlli;
+			link_info->sgsn_tlli.current =
+				gbproxy_make_sgsn_tlli(peer, link_info,
 						       parse_ctx->tlli);
-			gbproxy_touch_tlli_info(peer, tlli_info, now);
+			gbproxy_touch_link_info(peer, link_info, now);
 		} else {
-			sgsn_tlli = gbproxy_map_tlli(parse_ctx->tlli, tlli_info, 0);
+			sgsn_tlli = gbproxy_map_tlli(parse_ctx->tlli, link_info, 0);
 			if (!sgsn_tlli)
-				sgsn_tlli = gbproxy_make_sgsn_tlli(peer, tlli_info,
+				sgsn_tlli = gbproxy_make_sgsn_tlli(peer, link_info,
 								   parse_ctx->tlli);
 
-			gbproxy_validate_tlli(&tlli_info->tlli,
+			gbproxy_validate_tlli(&link_info->tlli,
 					      parse_ctx->tlli, 0);
-			gbproxy_validate_tlli(&tlli_info->sgsn_tlli,
+			gbproxy_validate_tlli(&link_info->sgsn_tlli,
 					      sgsn_tlli, 0);
-			gbproxy_touch_tlli_info(peer, tlli_info, now);
+			gbproxy_touch_link_info(peer, link_info, now);
 		}
-	} else if (tlli_info) {
-		gbproxy_touch_tlli_info(peer, tlli_info, now);
+	} else if (link_info) {
+		gbproxy_touch_link_info(peer, link_info, now);
 	}
 
-	if (parse_ctx->imsi && tlli_info && tlli_info->imsi_len == 0)
-		gbproxy_assign_imsi(peer, tlli_info, parse_ctx);
+	if (parse_ctx->imsi && link_info && link_info->imsi_len == 0)
+		gbproxy_assign_imsi(peer, link_info, parse_ctx);
 
-	return tlli_info;
+	return link_info;
 }
 
-struct gbproxy_tlli_info *gbproxy_update_tlli_state_dl(
+struct gbproxy_link_info *gbproxy_update_link_state_dl(
 	struct gbproxy_peer *peer,
 	time_t now,
 	struct gprs_gb_parse_context *parse_ctx)
 {
-	struct gbproxy_tlli_info *tlli_info = NULL;
+	struct gbproxy_link_info *link_info = NULL;
 
 	if (parse_ctx->tlli_enc)
-		tlli_info = gbproxy_tlli_info_by_sgsn_tlli(
+		link_info = gbproxy_link_info_by_sgsn_tlli(
 			peer, parse_ctx->tlli, parse_ctx->peer_nsei);
 
-	if (parse_ctx->tlli_enc && parse_ctx->new_ptmsi_enc && tlli_info) {
+	if (parse_ctx->tlli_enc && parse_ctx->new_ptmsi_enc && link_info) {
 		/* A new P-TMSI has been signalled in the message,
 		 * register new TLLI */
 		uint32_t new_sgsn_ptmsi;
@@ -540,7 +540,7 @@
 			LOGP(DGPRS, LOGL_ERROR,
 			     "Failed to parse new TLLI/PTMSI (current is %08x)\n",
 			     parse_ctx->tlli);
-			return tlli_info;
+			return link_info;
 		}
 		new_bss_ptmsi = gbproxy_make_bss_ptmsi(peer, new_sgsn_ptmsi);
 
@@ -548,12 +548,12 @@
 		     "Got new PTMSI %08x from SGSN, using %08x for BSS\n",
 		     new_sgsn_ptmsi, new_bss_ptmsi);
 		/* Setup PTMSIs */
-		tlli_info->sgsn_tlli.ptmsi = new_sgsn_ptmsi;
-		tlli_info->tlli.ptmsi = new_bss_ptmsi;
-	} else if (parse_ctx->tlli_enc && parse_ctx->new_ptmsi_enc && !tlli_info &&
+		link_info->sgsn_tlli.ptmsi = new_sgsn_ptmsi;
+		link_info->tlli.ptmsi = new_bss_ptmsi;
+	} else if (parse_ctx->tlli_enc && parse_ctx->new_ptmsi_enc && !link_info &&
 		   !peer->cfg->patch_ptmsi) {
 		/* A new P-TMSI has been signalled in the message with an unknown
-		 * TLLI, create a new tlli_info */
+		 * TLLI, create a new link_info */
 		/* TODO: Add a test case for this branch */
 		uint32_t new_ptmsi;
 		if (!gprs_parse_mi_tmsi(parse_ctx->new_ptmsi_enc, GSM48_TMSI_LEN,
@@ -561,35 +561,35 @@
 			LOGP(DGPRS, LOGL_ERROR,
 			     "Failed to parse new PTMSI (TLLI is %08x)\n",
 			     parse_ctx->tlli);
-			return tlli_info;
+			return link_info;
 		}
 
 		LOGP(DGPRS, LOGL_INFO,
 		     "Adding TLLI %08x to list (SGSN, new P-TMSI is %08x)\n",
 		     parse_ctx->tlli, new_ptmsi);
 
-		tlli_info = gbproxy_tlli_info_alloc(peer);
-		tlli_info->sgsn_tlli.current = parse_ctx->tlli;;
-		tlli_info->tlli.current = parse_ctx->tlli;;
-		tlli_info->sgsn_tlli.ptmsi = new_ptmsi;
-		tlli_info->tlli.ptmsi = new_ptmsi;
-		gbproxy_attach_tlli_info(peer, now, tlli_info);
-	} else if (parse_ctx->tlli_enc && parse_ctx->llc && !tlli_info &&
+		link_info = gbproxy_link_info_alloc(peer);
+		link_info->sgsn_tlli.current = parse_ctx->tlli;;
+		link_info->tlli.current = parse_ctx->tlli;;
+		link_info->sgsn_tlli.ptmsi = new_ptmsi;
+		link_info->tlli.ptmsi = new_ptmsi;
+		gbproxy_attach_link_info(peer, now, link_info);
+	} else if (parse_ctx->tlli_enc && parse_ctx->llc && !link_info &&
 		   !peer->cfg->patch_ptmsi) {
-		/* Unknown SGSN TLLI, create a new tlli_info */
+		/* Unknown SGSN TLLI, create a new link_info */
 		uint32_t new_ptmsi;
-		tlli_info = gbproxy_tlli_info_alloc(peer);
+		link_info = gbproxy_link_info_alloc(peer);
 		LOGP(DGPRS, LOGL_INFO, "Adding TLLI %08x to list (SGSN)\n",
 		     parse_ctx->tlli);
 
-		gbproxy_attach_tlli_info(peer, now, tlli_info);
+		gbproxy_attach_link_info(peer, now, link_info);
 
 		/* Setup TLLIs */
-		tlli_info->sgsn_tlli.current = parse_ctx->tlli;
-		tlli_info->tlli.current = parse_ctx->tlli;
+		link_info->sgsn_tlli.current = parse_ctx->tlli;
+		link_info->tlli.current = parse_ctx->tlli;
 
 		if (!parse_ctx->new_ptmsi_enc)
-			return tlli_info;
+			return link_info;
 		/* A new P-TMSI has been signalled in the message */
 
 		if (!gprs_parse_mi_tmsi(parse_ctx->new_ptmsi_enc,
@@ -597,57 +597,57 @@
 			LOGP(DGPRS, LOGL_ERROR,
 			     "Failed to parse new PTMSI (TLLI is %08x)\n",
 			     parse_ctx->tlli);
-			return tlli_info;
+			return link_info;
 		}
 		LOGP(DGPRS, LOGL_INFO,
 		     "Assigning new P-TMSI %08x\n", new_ptmsi);
 		/* Setup P-TMSIs */
-		tlli_info->sgsn_tlli.ptmsi = new_ptmsi;
-		tlli_info->tlli.ptmsi = new_ptmsi;
-	} else if (parse_ctx->tlli_enc && parse_ctx->llc && tlli_info) {
+		link_info->sgsn_tlli.ptmsi = new_ptmsi;
+		link_info->tlli.ptmsi = new_ptmsi;
+	} else if (parse_ctx->tlli_enc && parse_ctx->llc && link_info) {
 		uint32_t bss_tlli = gbproxy_map_tlli(parse_ctx->tlli,
-						     tlli_info, 1);
-		gbproxy_validate_tlli(&tlli_info->sgsn_tlli, parse_ctx->tlli, 1);
-		gbproxy_validate_tlli(&tlli_info->tlli, bss_tlli, 1);
-		gbproxy_touch_tlli_info(peer, tlli_info, now);
-	} else if (tlli_info) {
-		gbproxy_touch_tlli_info(peer, tlli_info, now);
+						     link_info, 1);
+		gbproxy_validate_tlli(&link_info->sgsn_tlli, parse_ctx->tlli, 1);
+		gbproxy_validate_tlli(&link_info->tlli, bss_tlli, 1);
+		gbproxy_touch_link_info(peer, link_info, now);
+	} else if (link_info) {
+		gbproxy_touch_link_info(peer, link_info, now);
 	}
 
-	if (parse_ctx->imsi && tlli_info && tlli_info->imsi_len == 0)
-		gbproxy_assign_imsi(peer, tlli_info, parse_ctx);
+	if (parse_ctx->imsi && link_info && link_info->imsi_len == 0)
+		gbproxy_assign_imsi(peer, link_info, parse_ctx);
 
-	return tlli_info;
+	return link_info;
 }
 
-void gbproxy_update_tlli_state_after(
+void gbproxy_update_link_state_after(
 	struct gbproxy_peer *peer,
-	struct gbproxy_tlli_info *tlli_info,
+	struct gbproxy_link_info *link_info,
 	time_t now,
 	struct gprs_gb_parse_context *parse_ctx)
 {
-	if (parse_ctx->invalidate_tlli && tlli_info) {
+	if (parse_ctx->invalidate_tlli && link_info) {
 		int keep_info =
-			peer->cfg->keep_tlli_infos == GBPROX_KEEP_ALWAYS ||
-			(peer->cfg->keep_tlli_infos == GBPROX_KEEP_REATTACH &&
+			peer->cfg->keep_link_infos == GBPROX_KEEP_ALWAYS ||
+			(peer->cfg->keep_link_infos == GBPROX_KEEP_REATTACH &&
 			 parse_ctx->await_reattach) ||
-			(peer->cfg->keep_tlli_infos == GBPROX_KEEP_IDENTIFIED &&
-			 tlli_info->imsi_len > 0);
+			(peer->cfg->keep_link_infos == GBPROX_KEEP_IDENTIFIED &&
+			 link_info->imsi_len > 0);
 		if (keep_info) {
 			LOGP(DGPRS, LOGL_INFO, "Unregistering TLLI %08x\n",
-			     tlli_info->tlli.current);
-			gbproxy_unregister_tlli_info(peer, tlli_info);
+			     link_info->tlli.current);
+			gbproxy_unregister_link_info(peer, link_info);
 		} else {
 			LOGP(DGPRS, LOGL_INFO, "Removing TLLI %08x from list\n",
-			     tlli_info->tlli.current);
-			gbproxy_delete_tlli_info(peer, tlli_info);
+			     link_info->tlli.current);
+			gbproxy_delete_link_info(peer, link_info);
 		}
 	} else if (parse_ctx->to_bss && parse_ctx->tlli_enc &&
-		   parse_ctx->new_ptmsi_enc && tlli_info) {
+		   parse_ctx->new_ptmsi_enc && link_info) {
 		/* A new PTMSI has been signaled in the message,
 		 * register new TLLI */
-		uint32_t new_sgsn_ptmsi = tlli_info->sgsn_tlli.ptmsi;
-		uint32_t new_bss_ptmsi = tlli_info->tlli.ptmsi;
+		uint32_t new_sgsn_ptmsi = link_info->sgsn_tlli.ptmsi;
+		uint32_t new_bss_ptmsi = link_info->tlli.ptmsi;
 		uint32_t new_sgsn_tlli;
 		uint32_t new_bss_tlli = 0;
 
@@ -658,14 +658,14 @@
 		     "Assigning new TLLI %08x to SGSN, %08x to BSS\n",
 		     new_sgsn_tlli, new_bss_tlli);
 
-		gbproxy_reassign_tlli(&tlli_info->sgsn_tlli,
+		gbproxy_reassign_tlli(&link_info->sgsn_tlli,
 				      peer, new_sgsn_tlli);
-		gbproxy_reassign_tlli(&tlli_info->tlli,
+		gbproxy_reassign_tlli(&link_info->tlli,
 				      peer, new_bss_tlli);
-		gbproxy_remove_matching_tlli_infos(peer, tlli_info);
+		gbproxy_remove_matching_link_infos(peer, link_info);
 	}
 
-	gbproxy_remove_stale_tlli_infos(peer, now);
+	gbproxy_remove_stale_link_infos(peer, now);
 }
 
 
diff --git a/openbsc/src/gprs/gb_proxy_vty.c b/openbsc/src/gprs/gb_proxy_vty.c
index 72469da..313cd9b 100644
--- a/openbsc/src/gprs/gb_proxy_vty.c
+++ b/openbsc/src/gprs/gb_proxy_vty.c
@@ -115,7 +115,7 @@
 		vty_out(vty, " tlli-list max-length %d%s",
 			g_cfg->tlli_max_len, VTY_NEWLINE);
 	vty_out(vty, " tlli-list keep-mode %s%s",
-		get_value_string(keep_modes, g_cfg->keep_tlli_infos),
+		get_value_string(keep_modes, g_cfg->keep_link_infos),
 		VTY_NEWLINE);
 
 
@@ -421,7 +421,7 @@
 {
 	int val = get_string_value(keep_modes, argv[0]);
 	OSMO_ASSERT(val >= GBPROX_KEEP_NEVER && val <= GBPROX_KEEP_ALWAYS);
-	g_cfg->keep_tlli_infos = val;
+	g_cfg->keep_link_infos = val;
 
 	return CMD_SUCCESS;
 }
@@ -453,37 +453,37 @@
 	time_t now = time(NULL);
 
 	llist_for_each_entry(peer, &g_cfg->bts_peers, list) {
-		struct gbproxy_tlli_info *tlli_info;
+		struct gbproxy_link_info *link_info;
 		struct gbproxy_patch_state *state = &peer->patch_state;
 
 		gbprox_vty_print_peer(vty, peer);
 
-		llist_for_each_entry(tlli_info, &state->enabled_tllis, list) {
-			time_t age = now - tlli_info->timestamp;
+		llist_for_each_entry(link_info, &state->enabled_tllis, list) {
+			time_t age = now - link_info->timestamp;
 			int stored_msgs = 0;
 			struct llist_head *iter;
-			llist_for_each(iter, &tlli_info->stored_msgs)
+			llist_for_each(iter, &link_info->stored_msgs)
 				stored_msgs++;
 
-			if (tlli_info->imsi > 0) {
+			if (link_info->imsi > 0) {
 				snprintf(mi_buf, sizeof(mi_buf), "(invalid)");
 				gsm48_mi_to_string(mi_buf, sizeof(mi_buf),
-						   tlli_info->imsi,
-						   tlli_info->imsi_len);
+						   link_info->imsi,
+						   link_info->imsi_len);
 			} else {
 				snprintf(mi_buf, sizeof(mi_buf), "(none)");
 			}
 			vty_out(vty, "  TLLI %08x, IMSI %s, AGE %d",
-				tlli_info->tlli.current, mi_buf, (int)age);
+				link_info->tlli.current, mi_buf, (int)age);
 
 			if (stored_msgs)
 				vty_out(vty, ", STORED %d", stored_msgs);
 
 			if (g_cfg->route_to_sgsn2)
 				vty_out(vty, ", SGSN NSEI %d",
-					tlli_info->sgsn_nsei);
+					link_info->sgsn_nsei);
 
-			if (tlli_info->is_deregistered)
+			if (link_info->is_deregistered)
 				vty_out(vty, ", DE-REGISTERED");
 
 			vty_out(vty, "%s", VTY_NEWLINE);
@@ -598,7 +598,7 @@
 	uint32_t ident = 0;
 	const char *imsi = NULL;
 	struct gbproxy_peer *peer = 0;
-	struct gbproxy_tlli_info *tlli_info, *nxt;
+	struct gbproxy_link_info *link_info, *nxt;
 	struct gbproxy_patch_state *state;
 	char mi_buf[200];
 	int found = 0;
@@ -620,30 +620,30 @@
 
 	state = &peer->patch_state;
 
-	llist_for_each_entry_safe(tlli_info, nxt, &state->enabled_tllis, list) {
+	llist_for_each_entry_safe(link_info, nxt, &state->enabled_tllis, list) {
 		switch (match) {
 		case MATCH_TLLI:
-			if (tlli_info->tlli.current != ident)
+			if (link_info->tlli.current != ident)
 				continue;
 			break;
 		case MATCH_SGSN:
-			if (tlli_info->sgsn_nsei != ident)
+			if (link_info->sgsn_nsei != ident)
 				continue;
 			break;
 		case MATCH_IMSI:
 			mi_buf[0] = '\0';
 			gsm48_mi_to_string(mi_buf, sizeof(mi_buf),
-					   tlli_info->imsi,
-					   tlli_info->imsi_len);
+					   link_info->imsi,
+					   link_info->imsi_len);
 
 			if (strcmp(mi_buf, imsi) != 0)
 				continue;
 			break;
 		}
 
-		vty_out(vty, "Deleting TLLI %08x%s", tlli_info->tlli.current,
+		vty_out(vty, "Deleting TLLI %08x%s", link_info->tlli.current,
 			VTY_NEWLINE);
-		gbproxy_delete_tlli_info(peer, tlli_info);
+		gbproxy_delete_link_info(peer, link_info);
 		found += 1;
 	}
 
@@ -664,7 +664,7 @@
 	const uint16_t nsei = atoi(argv[0]);
 	enum {MATCH_STALE = 's', MATCH_DEREGISTERED = 'd'} match;
 	struct gbproxy_peer *peer = 0;
-	struct gbproxy_tlli_info *tlli_info, *nxt;
+	struct gbproxy_link_info *link_info, *nxt;
 	struct gbproxy_patch_state *state;
 	int found = 0;
 
@@ -680,17 +680,17 @@
 	state = &peer->patch_state;
 
 	if (match == MATCH_STALE) {
-		found = gbproxy_remove_stale_tlli_infos(peer, time(NULL));
+		found = gbproxy_remove_stale_link_infos(peer, time(NULL));
 		if (found)
 			vty_out(vty, "Deleted %d stale TLLI%s%s",
 				found, found == 1 ? "" : "s", VTY_NEWLINE);
 	} else {
-		llist_for_each_entry_safe(tlli_info, nxt,
+		llist_for_each_entry_safe(link_info, nxt,
 					  &state->enabled_tllis, list) {
-			if (!tlli_info->is_deregistered)
+			if (!link_info->is_deregistered)
 				continue;
 
-			gbproxy_delete_tlli_info(peer, tlli_info);
+			gbproxy_delete_link_info(peer, link_info);
 			found += 1;
 		}
 	}
diff --git a/openbsc/tests/gbproxy/gbproxy_test.c b/openbsc/tests/gbproxy/gbproxy_test.c
index e329300..36200f4 100644
--- a/openbsc/tests/gbproxy/gbproxy_test.c
+++ b/openbsc/tests/gbproxy/gbproxy_test.c
@@ -87,7 +87,7 @@
 		return rc;
 
 	llist_for_each_entry(peer, &cfg->bts_peers, list) {
-		struct gbproxy_tlli_info *tlli_info;
+		struct gbproxy_link_info *link_info;
 		struct gbproxy_patch_state *state = &peer->patch_state;
 		gsm48_parse_ra(&raid, peer->ra);
 
@@ -118,32 +118,32 @@
 
 		fprintf(stream, "%*s    TLLI-Cache: %d\n",
 			indent, "", state->enabled_tllis_count);
-		llist_for_each_entry(tlli_info, &state->enabled_tllis, list) {
+		llist_for_each_entry(link_info, &state->enabled_tllis, list) {
 			char mi_buf[200];
-			time_t age = now ? now - tlli_info->timestamp : 0;
+			time_t age = now ? now - link_info->timestamp : 0;
 			int stored_msgs = 0;
 			struct llist_head *iter;
-			llist_for_each(iter, &tlli_info->stored_msgs)
+			llist_for_each(iter, &link_info->stored_msgs)
 				stored_msgs++;
 
-			if (tlli_info->imsi_len > 0) {
+			if (link_info->imsi_len > 0) {
 				snprintf(mi_buf, sizeof(mi_buf), "(invalid)");
 				gsm48_mi_to_string(mi_buf, sizeof(mi_buf),
-						   tlli_info->imsi,
-						   tlli_info->imsi_len);
+						   link_info->imsi,
+						   link_info->imsi_len);
 			} else {
 				snprintf(mi_buf, sizeof(mi_buf), "(none)");
 			}
 			fprintf(stream, "%*s      TLLI %08x",
-				     indent, "", tlli_info->tlli.current);
-			if (tlli_info->tlli.assigned)
-				fprintf(stream, "/%08x", tlli_info->tlli.assigned);
-			if (tlli_info->sgsn_tlli.current) {
+				     indent, "", link_info->tlli.current);
+			if (link_info->tlli.assigned)
+				fprintf(stream, "/%08x", link_info->tlli.assigned);
+			if (link_info->sgsn_tlli.current) {
 				fprintf(stream, " -> %08x",
-					tlli_info->sgsn_tlli.current);
-				if (tlli_info->sgsn_tlli.assigned)
+					link_info->sgsn_tlli.current);
+				if (link_info->sgsn_tlli.assigned)
 					fprintf(stream, "/%08x",
-						tlli_info->sgsn_tlli.assigned);
+						link_info->sgsn_tlli.assigned);
 			}
 			fprintf(stream, ", IMSI %s, AGE %d",
 				mi_buf, (int)age);
@@ -151,17 +151,17 @@
 			if (stored_msgs)
 				fprintf(stream, ", STORED %d", stored_msgs);
 
-			if (cfg->check_imsi && tlli_info->imsi_matches)
+			if (cfg->check_imsi && link_info->imsi_matches)
 				fprintf(stream, ", IMSI matches");
 
-			if (tlli_info->imsi_acq_pending)
+			if (link_info->imsi_acq_pending)
 				fprintf(stream, ", IMSI acquisition in progress");
 
 			if (cfg->route_to_sgsn2)
 				fprintf(stream, ", SGSN NSEI %d",
-					tlli_info->sgsn_nsei);
+					link_info->sgsn_nsei);
 
-			if (tlli_info->is_deregistered)
+			if (link_info->is_deregistered)
 				fprintf(stream, ", DE-REGISTERED");
 
 			rc = fprintf(stream, "\n");
@@ -1386,7 +1386,7 @@
 	const uint32_t foreign_tlli = 0xbbc54679;
 	const uint32_t foreign_tlli2 = 0xbb00beef;
 	const uint8_t imsi[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	struct gbproxy_peer *peer;
 
 	OSMO_ASSERT(local_tlli == gprs_tmsi2tlli(ptmsi, TLLI_LOCAL));
@@ -1479,16 +1479,16 @@
 	OSMO_ASSERT(gbproxy_peer_by_lac(&gbcfg, convert_ra(&rai_sgsn)) != NULL);
 	OSMO_ASSERT(gbproxy_peer_by_lac(&gbcfg, convert_ra(&rai_unknown)) == NULL);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current != local_tlli);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current != local_tlli);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->tlli.current != local_tlli);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current != local_tlli);
+	OSMO_ASSERT(!link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_tlli, &rai_bss, cell_id,
@@ -1497,16 +1497,16 @@
 
 	OSMO_ASSERT(6 == peer->ctrg->ctr[GBPROX_PEER_CTR_RAID_PATCHED_BSS].current);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current != local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current != local_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->tlli.current != local_tlli);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current != local_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	/* Replace APN (1) */
 	send_llc_ul_ui(nsi, "ACT PDP CTX REQ (REPLACE APN)", &bss_peer[0], 0x1002,
@@ -1516,16 +1516,16 @@
 
 	OSMO_ASSERT(7 == peer->ctrg->ctr[GBPROX_PEER_CTR_RAID_PATCHED_BSS].current);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current != local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current != local_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->tlli.current != local_tlli);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current != local_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002,
 		       local_tlli, 1, imsi, sizeof(imsi),
@@ -1534,12 +1534,12 @@
 
 	OSMO_ASSERT(2 == peer->ctrg->ctr[GBPROX_PEER_CTR_RAID_PATCHED_SGSN].current);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->tlli.current == local_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_tlli);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->tlli.current == local_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == 0);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_tlli);
 
 	/* Replace APN (2) */
 	send_llc_ul_ui(nsi, "ACT PDP CTX REQ (REPLACE APN)", &bss_peer[0], 0x1002,
@@ -1664,7 +1664,7 @@
 	const uint8_t imsi1[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};
 	const uint8_t imsi2[] = {0x11, 0x12, 0x99, 0x99, 0x99, 0x16, 0x17, 0x18};
 
-	struct gbproxy_tlli_info *tlli_info, *tlli_info2;
+	struct gbproxy_link_info *link_info, *link_info2;
 	struct gbproxy_peer *peer;
 	unsigned bss_nu = 0;
 	unsigned sgsn_nu = 0;
@@ -1734,15 +1734,15 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli1);
-	tlli_info2 = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info == tlli_info2);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_tlli1);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == ptmsi);
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli1);
+	link_info2 = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info == link_info2);
+	OSMO_ASSERT(link_info->tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_tlli1);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == ptmsi);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_tlli, &rai_bss, cell_id,
@@ -1751,13 +1751,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_tlli1);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == ptmsi);
+	link_info = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_tlli1);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == ptmsi);
 
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002,
@@ -1767,16 +1767,16 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == ptmsi);
-	OSMO_ASSERT(!gbproxy_tlli_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2)));
+	link_info = gbproxy_link_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.ptmsi == ptmsi);
+	OSMO_ASSERT(!gbproxy_link_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2)));
 
-	tlli_info2 = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info == tlli_info2);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->tlli.current == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == ptmsi);
+	link_info2 = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info == link_info2);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->tlli.current == local_tlli);
+	OSMO_ASSERT(link_info->tlli.ptmsi == ptmsi);
 
 	printf("--- Establish second LLC connection with the same P-TMSI ---\n\n");
 
@@ -1808,15 +1808,15 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli2);
-	tlli_info2 = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info == tlli_info2);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_tlli2);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == ptmsi);
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli2);
+	link_info2 = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info == link_info2);
+	OSMO_ASSERT(link_info->tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_tlli2);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == ptmsi);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_tlli, &rai_bss, cell_id,
@@ -1825,13 +1825,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_tlli2);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == ptmsi);
+	link_info = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_tlli2);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == ptmsi);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002,
 		       local_tlli, 1, imsi2, sizeof(imsi2),
@@ -1840,16 +1840,16 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == ptmsi);
-	OSMO_ASSERT(!gbproxy_tlli_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1)));
+	link_info = gbproxy_link_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.ptmsi == ptmsi);
+	OSMO_ASSERT(!gbproxy_link_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1)));
 
-	tlli_info2 = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info == tlli_info2);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->tlli.current == local_tlli);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == ptmsi);
+	link_info2 = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info == link_info2);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->tlli.current == local_tlli);
+	OSMO_ASSERT(link_info->tlli.ptmsi == ptmsi);
 
 	dump_global(stdout, 0);
 
@@ -1892,7 +1892,7 @@
 
 
 	const uint8_t imsi[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	struct gbproxy_peer *peer;
 	unsigned bss_nu = 0;
 	unsigned sgsn_nu = 0;
@@ -1967,18 +1967,18 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, random_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == bss_ptmsi);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.ptmsi == sgsn_ptmsi);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, random_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == bss_ptmsi);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli);
+	OSMO_ASSERT(!link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.ptmsi == sgsn_ptmsi);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_bss_tlli, &rai_bss, cell_id,
@@ -1987,16 +1987,16 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002,
 		       local_sgsn_tlli, 1, imsi, sizeof(imsi),
@@ -2005,12 +2005,12 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.current == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == 0);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.current == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == 0);
 
 	send_llc_ul_ui(nsi, "ACT PDP CTX REQ (REPLACE APN)", &bss_peer[0], 0x1002,
 		       local_bss_tlli, &rai_bss, cell_id,
@@ -2053,19 +2053,19 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN_NSEI) != NULL);
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli2);
-	OSMO_ASSERT(tlli_info->tlli.current == local_bss_tlli);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == bss_ptmsi2);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli2);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_sgsn_tlli);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.ptmsi == sgsn_ptmsi2);
+	OSMO_ASSERT(gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN_NSEI) != NULL);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli2);
+	OSMO_ASSERT(link_info->tlli.current == local_bss_tlli);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == bss_ptmsi2);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli2);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_sgsn_tlli);
+	OSMO_ASSERT(!link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.ptmsi == sgsn_ptmsi2);
 
 	send_llc_ul_ui(nsi, "RA UPD REQ (P-TMSI 3)", &bss_peer[0], 0x1002,
 		       local_bss_tlli2, &rai_bss, 0x7080,
@@ -2079,33 +2079,33 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN_NSEI) == NULL);
-	OSMO_ASSERT(gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli3, SGSN_NSEI) != NULL);
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli3);
-	OSMO_ASSERT(tlli_info->tlli.current == local_bss_tlli);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == bss_ptmsi3);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli3);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_sgsn_tlli);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.ptmsi == sgsn_ptmsi3);
+	OSMO_ASSERT(gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN_NSEI) == NULL);
+	OSMO_ASSERT(gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli3, SGSN_NSEI) != NULL);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli3);
+	OSMO_ASSERT(link_info->tlli.current == local_bss_tlli);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == bss_ptmsi3);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli3);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_sgsn_tlli);
+	OSMO_ASSERT(!link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.ptmsi == sgsn_ptmsi3);
 
 	send_llc_ul_ui(nsi, "RA UPD COMPLETE", &bss_peer[0], 0x1002,
 		       local_bss_tlli3, &rai_bss, 0x7080,
 		       GPRS_SAPI_GMM, bss_nu++,
 		       dtap_ra_upd_complete, sizeof(dtap_ra_upd_complete));
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, local_bss_tlli3);
+	link_info = gbproxy_link_info_by_tlli(peer, local_bss_tlli3);
 
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002,
 		       local_sgsn_tlli3, 1, imsi, sizeof(imsi),
@@ -2114,12 +2114,12 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli3, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.current == local_bss_tlli3);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_sgsn_tlli3);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == 0);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli3, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.current == local_bss_tlli3);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_sgsn_tlli3);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == 0);
 
 	/* Other messages */
 	send_bssgp_llc_discarded(nsi, &bss_peer[0], 0x1002,
@@ -2211,7 +2211,7 @@
 	const uint32_t other_bss_tlli = 0x8000beef;
 
 	const uint8_t imsi[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	struct gbproxy_peer *peer;
 	unsigned bss_nu = 0;
 	unsigned sgsn_nu = 0;
@@ -2289,18 +2289,18 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, random_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == bss_ptmsi);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.ptmsi == sgsn_ptmsi);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, random_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == bss_ptmsi);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli);
+	OSMO_ASSERT(!link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.ptmsi == sgsn_ptmsi);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_bss_tlli, &rai_bss, cell_id,
@@ -2309,16 +2309,16 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002,
 		       local_sgsn_tlli, 1, imsi, sizeof(imsi),
@@ -2327,12 +2327,12 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.current == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == 0);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.current == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == 0);
 
 	/* Non-DTAP */
 	send_bssgp_ul_unitdata(nsi, "XID (UL)", &bss_peer[0], 0x1002,
@@ -2532,8 +2532,8 @@
 	const uint8_t imsi1[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};
 	const uint8_t imsi2[] = {0x11, 0x12, 0x99, 0x99, 0x99, 0x16, 0x17, 0x18};
 	const uint8_t imsi3[] = {0x11, 0x12, 0x99, 0x99, 0x99, 0x26, 0x27, 0x28};
-	struct gbproxy_tlli_info *tlli_info;
-	struct gbproxy_tlli_info *other_info;
+	struct gbproxy_link_info *link_info;
+	struct gbproxy_link_info *other_info;
 	struct gbproxy_peer *peer;
 	unsigned bss_nu = 0;
 	unsigned sgsn_nu = 0;
@@ -2636,19 +2636,19 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI));
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, random_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == bss_ptmsi);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.ptmsi == sgsn_ptmsi);
+	OSMO_ASSERT(!gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI));
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, random_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == bss_ptmsi);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli);
+	OSMO_ASSERT(!link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.ptmsi == sgsn_ptmsi);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_bss_tlli, &rai_bss, cell_id,
@@ -2657,17 +2657,17 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI));
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(!gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI));
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer[0], 0x1002,
 		       local_sgsn_tlli, 1, imsi1, sizeof(imsi1),
@@ -2676,13 +2676,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI));
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.current == local_bss_tlli);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == 0);
+	OSMO_ASSERT(!gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI));
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.current == local_bss_tlli);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == 0);
 
 	/* Non-DTAP */
 	send_bssgp_ul_unitdata(nsi, "XID (UL)", &bss_peer[0], 0x1002,
@@ -2761,19 +2761,19 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_sgsn_tlli(peer, random_sgsn_tlli2, SGSN_NSEI));
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, random_sgsn_tlli2, SGSN2_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli2);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli2);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == bss_ptmsi2);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli2);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli2);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.ptmsi == sgsn_ptmsi2);
+	OSMO_ASSERT(!gbproxy_link_info_by_sgsn_tlli(peer, random_sgsn_tlli2, SGSN_NSEI));
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, random_sgsn_tlli2, SGSN2_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli2);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli2);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == bss_ptmsi2);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli2);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli2);
+	OSMO_ASSERT(!link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.ptmsi == sgsn_ptmsi2);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_bss_tlli2, &rai_bss, cell_id,
@@ -2782,17 +2782,17 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN_NSEI));
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN2_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli2);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli2);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli2);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli2);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(!gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN_NSEI));
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN2_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli2);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli2);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli2);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli2);
+	OSMO_ASSERT(link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer[1], 0x1002,
 		       local_sgsn_tlli2, 1, imsi2, sizeof(imsi2),
@@ -2801,13 +2801,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN_NSEI));
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN2_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.current == local_bss_tlli2);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_sgsn_tlli2);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == 0);
+	OSMO_ASSERT(!gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN_NSEI));
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli2, SGSN2_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.current == local_bss_tlli2);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_sgsn_tlli2);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == 0);
 
 	/* Non-DTAP */
 	send_bssgp_ul_unitdata(nsi, "XID (UL)", &bss_peer[0], 0x1002,
@@ -2886,19 +2886,19 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_sgsn_tlli(peer, random_sgsn_tlli3, SGSN_NSEI));
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, random_sgsn_tlli3, SGSN2_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli3);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli3);
-	OSMO_ASSERT(!tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->tlli.ptmsi == bss_ptmsi3);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli3);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.ptmsi == sgsn_ptmsi);
+	OSMO_ASSERT(!gbproxy_link_info_by_sgsn_tlli(peer, random_sgsn_tlli3, SGSN_NSEI));
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, random_sgsn_tlli3, SGSN2_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli3);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli3);
+	OSMO_ASSERT(!link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->tlli.ptmsi == bss_ptmsi3);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli3);
+	OSMO_ASSERT(!link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.ptmsi == sgsn_ptmsi);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_bss_tlli3, &rai_bss, cell_id,
@@ -2907,19 +2907,19 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	other_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	other_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
 	OSMO_ASSERT(other_info);
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info != other_info);
-	OSMO_ASSERT(tlli_info->tlli.assigned == local_bss_tlli3);
-	OSMO_ASSERT(tlli_info->tlli.current == foreign_bss_tlli3);
-	OSMO_ASSERT(tlli_info->tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->tlli.net_validated);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == random_sgsn_tlli3);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.bss_validated);
-	OSMO_ASSERT(!tlli_info->sgsn_tlli.net_validated);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info != other_info);
+	OSMO_ASSERT(link_info->tlli.assigned == local_bss_tlli3);
+	OSMO_ASSERT(link_info->tlli.current == foreign_bss_tlli3);
+	OSMO_ASSERT(link_info->tlli.bss_validated);
+	OSMO_ASSERT(!link_info->tlli.net_validated);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == random_sgsn_tlli3);
+	OSMO_ASSERT(link_info->sgsn_tlli.bss_validated);
+	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer[1], 0x1002,
 		       local_sgsn_tlli, 1, imsi3, sizeof(imsi3),
@@ -2928,15 +2928,15 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	other_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
+	other_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN_NSEI);
 	OSMO_ASSERT(other_info);
-	tlli_info = gbproxy_tlli_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info != other_info);
-	OSMO_ASSERT(tlli_info->tlli.current == local_bss_tlli3);
-	OSMO_ASSERT(tlli_info->tlli.assigned == 0);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.current == local_sgsn_tlli);
-	OSMO_ASSERT(tlli_info->sgsn_tlli.assigned == 0);
+	link_info = gbproxy_link_info_by_sgsn_tlli(peer, local_sgsn_tlli, SGSN2_NSEI);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info != other_info);
+	OSMO_ASSERT(link_info->tlli.current == local_bss_tlli3);
+	OSMO_ASSERT(link_info->tlli.assigned == 0);
+	OSMO_ASSERT(link_info->sgsn_tlli.current == local_sgsn_tlli);
+	OSMO_ASSERT(link_info->sgsn_tlli.assigned == 0);
 
 
 	printf("--- Shutdown GPRS connection (SGSN 1) ---\n\n");
@@ -3009,7 +3009,7 @@
 	const uint32_t foreign_tlli = 0xafe2b700;
 
 	const uint8_t imsi[] = {0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};
-	struct gbproxy_tlli_info *tlli_info, *tlli_info2;
+	struct gbproxy_link_info *link_info, *link_info2;
 	struct gbproxy_peer *peer;
 	unsigned bss_nu = 0;
 	unsigned sgsn_nu = 0;
@@ -3029,7 +3029,7 @@
 	gbcfg.core_apn_size = 0;
 	gbcfg.route_to_sgsn2 = 0;
 	gbcfg.nsip_sgsn2_nsei = 0xffff;
-	gbcfg.keep_tlli_infos = GBPROX_KEEP_ALWAYS;
+	gbcfg.keep_link_infos = GBPROX_KEEP_ALWAYS;
 
 	configure_sgsn_peer(&sgsn_peer);
 	configure_bss_peers(bss_peer, ARRAY_SIZE(bss_peer));
@@ -3062,11 +3062,11 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->imsi_len == 0);
-	OSMO_ASSERT(!tlli_info->is_deregistered);
-	OSMO_ASSERT(tlli_info->imsi_acq_pending);
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->imsi_len == 0);
+	OSMO_ASSERT(!link_info->is_deregistered);
+	OSMO_ASSERT(link_info->imsi_acq_pending);
 
 	send_llc_ul_ui(nsi, "IDENT RESPONSE", &bss_peer[0], 0x1002,
 		       foreign_tlli, &rai_bss, cell_id,
@@ -3075,10 +3075,10 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->imsi_len > 0);
-	OSMO_ASSERT(!tlli_info->imsi_acq_pending);
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->imsi_len > 0);
+	OSMO_ASSERT(!link_info->imsi_acq_pending);
 
 	send_llc_dl_ui(nsi, "IDENT REQUEST", &sgsn_peer, 0x1002,
 		       foreign_tlli, 0, NULL, 0,
@@ -3094,10 +3094,10 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->imsi_len > 0);
-	OSMO_ASSERT(gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi)));
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->imsi_len > 0);
+	OSMO_ASSERT(gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi)));
 
 	send_llc_dl_ui(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002,
 		       foreign_tlli, 1, imsi, sizeof(imsi),
@@ -3120,8 +3120,8 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
+	link_info = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
 
 	/* Detach (MO) */
 	send_llc_ul_ui(nsi, "DETACH REQ", &bss_peer[0], 0x1002,
@@ -3129,8 +3129,8 @@
 		       GPRS_SAPI_GMM, bss_nu++,
 		       dtap_detach_req, sizeof(dtap_detach_req));
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
+	link_info = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
@@ -3141,10 +3141,10 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_tlli(peer, local_tlli));
-	tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->is_deregistered);
+	OSMO_ASSERT(!gbproxy_link_info_by_tlli(peer, local_tlli));
+	link_info = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->is_deregistered);
 
 	/* Re-Attach */
 	send_llc_ul_ui(nsi, "ATTACH REQUEST", &bss_peer[0], 0x1002,
@@ -3154,13 +3154,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info2 = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info == tlli_info2);
-	OSMO_ASSERT(tlli_info->imsi_len != 0);
-	OSMO_ASSERT(!tlli_info->is_deregistered);
-	OSMO_ASSERT(!tlli_info->imsi_acq_pending);
+	link_info2 = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info == link_info2);
+	OSMO_ASSERT(link_info->imsi_len != 0);
+	OSMO_ASSERT(!link_info->is_deregistered);
+	OSMO_ASSERT(!link_info->imsi_acq_pending);
 
 	send_llc_dl_ui(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002,
 		       foreign_tlli, 1, imsi, sizeof(imsi),
@@ -3184,8 +3184,8 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
+	link_info = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
 
 	send_llc_ul_ui(nsi, "DETACH ACC", &sgsn_peer, 0x1002,
 		       local_tlli, &rai_bss, cell_id,
@@ -3194,10 +3194,10 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_tlli(peer, local_tlli));
-	tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->is_deregistered);
+	OSMO_ASSERT(!gbproxy_link_info_by_tlli(peer, local_tlli));
+	link_info = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->is_deregistered);
 
 	/* Re-Attach */
 	send_llc_ul_ui(nsi, "ATTACH REQUEST", &bss_peer[0], 0x1002,
@@ -3207,13 +3207,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info2 = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info == tlli_info2);
-	OSMO_ASSERT(tlli_info->imsi_len != 0);
-	OSMO_ASSERT(!tlli_info->is_deregistered);
-	OSMO_ASSERT(!tlli_info->imsi_acq_pending);
+	link_info2 = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info == link_info2);
+	OSMO_ASSERT(link_info->imsi_len != 0);
+	OSMO_ASSERT(!link_info->is_deregistered);
+	OSMO_ASSERT(!link_info->imsi_acq_pending);
 
 	send_llc_dl_ui(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002,
 		       foreign_tlli, 1, imsi, sizeof(imsi),
@@ -3237,8 +3237,8 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
+	link_info = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
 
 	send_llc_ul_ui(nsi, "DETACH ACC", &sgsn_peer, 0x1002,
 		       local_tlli, &rai_bss, cell_id,
@@ -3247,10 +3247,10 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_tlli(peer, local_tlli));
-	tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->is_deregistered);
+	OSMO_ASSERT(!gbproxy_link_info_by_tlli(peer, local_tlli));
+	link_info = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->is_deregistered);
 
 	/* Re-Attach */
 	send_llc_ul_ui(nsi, "ATTACH REQUEST", &bss_peer[0], 0x1002,
@@ -3260,13 +3260,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info2 = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info == tlli_info2);
-	OSMO_ASSERT(tlli_info->imsi_len != 0);
-	OSMO_ASSERT(!tlli_info->is_deregistered);
-	OSMO_ASSERT(!tlli_info->imsi_acq_pending);
+	link_info2 = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info == link_info2);
+	OSMO_ASSERT(link_info->imsi_len != 0);
+	OSMO_ASSERT(!link_info->is_deregistered);
+	OSMO_ASSERT(!link_info->imsi_acq_pending);
 
 	send_llc_dl_ui(nsi, "ATTACH ACCEPT", &sgsn_peer, 0x1002,
 		       foreign_tlli, 1, imsi, sizeof(imsi),
@@ -3295,10 +3295,10 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_tlli(peer, local_tlli));
-	tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->is_deregistered);
+	OSMO_ASSERT(!gbproxy_link_info_by_tlli(peer, local_tlli));
+	link_info = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->is_deregistered);
 
 	/* Bad case: Re-Attach with wrong (initial) P-TMSI */
 	send_llc_ul_ui(nsi, "ATTACH REQUEST", &bss_peer[0], 0x1002,
@@ -3308,13 +3308,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info2 = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info != tlli_info2);
-	OSMO_ASSERT(tlli_info->imsi_len == 0);
-	OSMO_ASSERT(!tlli_info->is_deregistered);
-	OSMO_ASSERT(tlli_info->imsi_acq_pending);
+	link_info2 = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info != link_info2);
+	OSMO_ASSERT(link_info->imsi_len == 0);
+	OSMO_ASSERT(!link_info->is_deregistered);
+	OSMO_ASSERT(link_info->imsi_acq_pending);
 
 	/* This wouldn't happen in reality, since the Attach Request hadn't
 	 * been forwarded to the SGSN.
@@ -3327,13 +3327,13 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info2 = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, foreign_tlli);
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info == tlli_info2);
-	OSMO_ASSERT(tlli_info->imsi_len >= 0);
-	OSMO_ASSERT(!tlli_info->is_deregistered);
-	OSMO_ASSERT(tlli_info->imsi_acq_pending);
+	link_info2 = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	link_info = gbproxy_link_info_by_tlli(peer, foreign_tlli);
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info == link_info2);
+	OSMO_ASSERT(link_info->imsi_len >= 0);
+	OSMO_ASSERT(!link_info->is_deregistered);
+	OSMO_ASSERT(link_info->imsi_acq_pending);
 
 	send_llc_ul_ui(nsi, "ATTACH COMPLETE", &bss_peer[0], 0x1002,
 		       local_tlli, &rai_bss, cell_id,
@@ -3350,8 +3350,8 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, local_tlli);
-	OSMO_ASSERT(tlli_info);
+	link_info = gbproxy_link_info_by_tlli(peer, local_tlli);
+	OSMO_ASSERT(link_info);
 
 	send_llc_ul_ui(nsi, "DETACH ACC", &sgsn_peer, 0x1002,
 		       local_tlli, &rai_bss, cell_id,
@@ -3360,10 +3360,10 @@
 
 	dump_peers(stdout, 0, 0, &gbcfg);
 
-	OSMO_ASSERT(!gbproxy_tlli_info_by_tlli(peer, local_tlli));
-	tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi, sizeof(imsi));
-	OSMO_ASSERT(tlli_info);
-	OSMO_ASSERT(tlli_info->is_deregistered);
+	OSMO_ASSERT(!gbproxy_link_info_by_tlli(peer, local_tlli));
+	link_info = gbproxy_link_info_by_imsi(peer, imsi, sizeof(imsi));
+	OSMO_ASSERT(link_info);
+	OSMO_ASSERT(link_info->is_deregistered);
 
 	dump_global(stdout, 0);
 
@@ -3607,11 +3607,11 @@
 	}
 }
 
-struct gbproxy_tlli_info *register_tlli(
+struct gbproxy_link_info *register_tlli(
 	struct gbproxy_peer *peer, uint32_t tlli,
 	const uint8_t *imsi, size_t imsi_len, time_t now)
 {
-	struct gbproxy_tlli_info *tlli_info;
+	struct gbproxy_link_info *link_info;
 	int imsi_matches = -1;
 	int tlli_already_known = 0;
 
@@ -3622,40 +3622,40 @@
 			return NULL;
 	}
 
-	tlli_info = gbproxy_tlli_info_by_tlli(peer, tlli);
+	link_info = gbproxy_link_info_by_tlli(peer, tlli);
 
-	if (!tlli_info) {
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi, imsi_len);
+	if (!link_info) {
+		link_info = gbproxy_link_info_by_imsi(peer, imsi, imsi_len);
 
-		if (tlli_info) {
+		if (link_info) {
 			/* TLLI has changed somehow, adjust it */
 			LOGP(DGPRS, LOGL_INFO,
 			     "The TLLI has changed from %08x to %08x\n",
-			     tlli_info->tlli.current, tlli);
-			tlli_info->tlli.current = tlli;
+			     link_info->tlli.current, tlli);
+			link_info->tlli.current = tlli;
 		}
 	}
 
-	if (!tlli_info) {
-		tlli_info = gbproxy_tlli_info_alloc(peer);
-		tlli_info->tlli.current = tlli;
+	if (!link_info) {
+		link_info = gbproxy_link_info_alloc(peer);
+		link_info->tlli.current = tlli;
 	} else {
-		gbproxy_detach_tlli_info(peer, tlli_info);
+		gbproxy_detach_link_info(peer, link_info);
 		tlli_already_known = 1;
 	}
 
-	OSMO_ASSERT(tlli_info != NULL);
+	OSMO_ASSERT(link_info != NULL);
 
 	if (!tlli_already_known)
 		LOGP(DGPRS, LOGL_INFO, "Adding TLLI %08x to list\n", tlli);
 
-	gbproxy_attach_tlli_info(peer, now, tlli_info);
-	gbproxy_update_tlli_info(tlli_info, imsi, imsi_len);
+	gbproxy_attach_link_info(peer, now, link_info);
+	gbproxy_update_link_info(link_info, imsi, imsi_len);
 
 	if (imsi_matches >= 0)
-		tlli_info->imsi_matches = imsi_matches;
+		link_info->imsi_matches = imsi_matches;
 
-	return tlli_info;
+	return link_info;
 }
 
 static void test_gbproxy_tlli_expire(void)
@@ -3683,7 +3683,7 @@
 	}
 
 	{
-		struct gbproxy_tlli_info *tlli_info;
+		struct gbproxy_link_info *link_info;
 
 		printf("Test TLLI replacement:\n");
 
@@ -3693,28 +3693,28 @@
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 0);
 
 		printf("  Add TLLI 1, IMSI 1\n");
-		tlli_info = register_tlli(peer, tlli1,
+		link_info = register_tlli(peer, tlli1,
 						  imsi1, ARRAY_SIZE(imsi1), now);
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli1);
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli1);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 1);
 
 		/* replace the old entry */
 		printf("  Add TLLI 2, IMSI 1 (should replace TLLI 1)\n");
-		tlli_info = register_tlli(peer, tlli2,
+		link_info = register_tlli(peer, tlli2,
 						  imsi1, ARRAY_SIZE(imsi1), now);
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli2);
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli2);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 1);
 
 		dump_peers(stdout, 2, now, &cfg);
 
 		/* verify that 5678 has survived */
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli2);
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
-		OSMO_ASSERT(!tlli_info);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli2);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
+		OSMO_ASSERT(!link_info);
 
 		printf("\n");
 
@@ -3722,7 +3722,7 @@
 	}
 
 	{
-		struct gbproxy_tlli_info *tlli_info;
+		struct gbproxy_link_info *link_info;
 
 		printf("Test IMSI replacement:\n");
 
@@ -3732,28 +3732,28 @@
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 0);
 
 		printf("  Add TLLI 1, IMSI 1\n");
-		tlli_info = register_tlli(peer, tlli1,
+		link_info = register_tlli(peer, tlli1,
 						  imsi1, ARRAY_SIZE(imsi1), now);
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli1);
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli1);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 1);
 
 		/* try to replace the old entry */
 		printf("  Add TLLI 1, IMSI 2 (should replace IMSI 1)\n");
-		tlli_info = register_tlli(peer, tlli1,
+		link_info = register_tlli(peer, tlli1,
 						  imsi2, ARRAY_SIZE(imsi2), now);
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli1);
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli1);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 1);
 
 		dump_peers(stdout, 2, now, &cfg);
 
 		/* verify that 5678 has survived */
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
-		OSMO_ASSERT(!tlli_info);
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli1);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
+		OSMO_ASSERT(!link_info);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli1);
 
 		printf("\n");
 
@@ -3761,7 +3761,7 @@
 	}
 
 	{
-		struct gbproxy_tlli_info *tlli_info;
+		struct gbproxy_link_info *link_info;
 		int num_removed;
 
 		printf("Test TLLI expiry, max_len == 1:\n");
@@ -3780,18 +3780,18 @@
 		register_tlli(peer, tlli2, imsi2, ARRAY_SIZE(imsi2), now);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 2);
 
-		num_removed = gbproxy_remove_stale_tlli_infos(peer, time(NULL) + 2);
+		num_removed = gbproxy_remove_stale_link_infos(peer, time(NULL) + 2);
 		OSMO_ASSERT(num_removed == 1);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 1);
 
 		dump_peers(stdout, 2, now, &cfg);
 
 		/* verify that 5678 has survived */
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
-		OSMO_ASSERT(!tlli_info);
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli2);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
+		OSMO_ASSERT(!link_info);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli2);
 
 		printf("\n");
 
@@ -3799,7 +3799,7 @@
 	}
 
 	{
-		struct gbproxy_tlli_info *tlli_info;
+		struct gbproxy_link_info *link_info;
 		int num_removed;
 
 		printf("Test TLLI expiry, max_age == 1:\n");
@@ -3818,18 +3818,18 @@
 				     now + 1);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 2);
 
-		num_removed = gbproxy_remove_stale_tlli_infos(peer, now + 2);
+		num_removed = gbproxy_remove_stale_link_infos(peer, now + 2);
 		OSMO_ASSERT(num_removed == 1);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 1);
 
 		dump_peers(stdout, 2, now + 2, &cfg);
 
 		/* verify that 5678 has survived */
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
-		OSMO_ASSERT(!tlli_info);
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli2);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
+		OSMO_ASSERT(!link_info);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli2);
 
 		printf("\n");
 
@@ -3837,7 +3837,7 @@
 	}
 
 	{
-		struct gbproxy_tlli_info *tlli_info;
+		struct gbproxy_link_info *link_info;
 		int num_removed;
 
 		printf("Test TLLI expiry, max_len == 2, max_age == 1:\n");
@@ -3864,20 +3864,20 @@
 		dump_peers(stdout, 2, now + 2, &cfg);
 
 		printf("  Remove stale TLLIs\n");
-		num_removed = gbproxy_remove_stale_tlli_infos(peer, now + 3);
+		num_removed = gbproxy_remove_stale_link_infos(peer, now + 3);
 		OSMO_ASSERT(num_removed == 2);
 		OSMO_ASSERT(peer->patch_state.enabled_tllis_count == 1);
 
 		dump_peers(stdout, 2, now + 2, &cfg);
 
 		/* verify that tlli3 has survived */
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
-		OSMO_ASSERT(!tlli_info);
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
-		OSMO_ASSERT(!tlli_info);
-		tlli_info = gbproxy_tlli_info_by_imsi(peer, imsi3, ARRAY_SIZE(imsi3));
-		OSMO_ASSERT(tlli_info);
-		OSMO_ASSERT(tlli_info->tlli.current == tlli3);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi1, ARRAY_SIZE(imsi1));
+		OSMO_ASSERT(!link_info);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi2, ARRAY_SIZE(imsi2));
+		OSMO_ASSERT(!link_info);
+		link_info = gbproxy_link_info_by_imsi(peer, imsi3, ARRAY_SIZE(imsi3));
+		OSMO_ASSERT(link_info);
+		OSMO_ASSERT(link_info->tlli.current == tlli3);
 
 		printf("\n");
 
