gbproxy: Fix P-TMSI generation for repeated Attach Accept messages

Currently, when P-TMSI patching is enabled, a new BSS P-TMSI is
generated for each Attach Accept. So two duplicated, subsequent
Attach Accept messages will be mapped to different BSS side P-TMSI.
Because the last one will replace former ones in the link_info
struct, the MS will fail to access the SGSN if it uses the former
P-TMSI to derive the new TLLI.

This patch checks the SGSN P-TMSI already assigned to the link_info
and only generates a new BSS P-TMSI on mismatch (or if the BSS P-TMSI
hasn't been set yet).

Ticket: OW#1322
Sponsored-by: On-Waves ehf
diff --git a/openbsc/tests/gbproxy/gbproxy_test.c b/openbsc/tests/gbproxy/gbproxy_test.c
index f99924c..103b4bd 100644
--- a/openbsc/tests/gbproxy/gbproxy_test.c
+++ b/openbsc/tests/gbproxy/gbproxy_test.c
@@ -2530,11 +2530,11 @@
 
 	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.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->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);
@@ -2550,13 +2550,13 @@
 
 	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.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.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.bss_validated);
 	OSMO_ASSERT(!link_info->sgsn_tlli.net_validated);
 
 	send_llc_dl_ui(nsi, "GMM INFO", &sgsn_peer, 0x1002,
@@ -2568,10 +2568,10 @@
 
 	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); */
+	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);
 
 	/* Detach */
 	send_llc_ul_ui(nsi, "DETACH REQ", &bss_peer[0], 0x1002,