gprs_ns2: rework id strings of nsvcs

Ensure all nsvcs ids are unique as UDP ids might not be unique when
multiple NSVCs connect to the same remote endpoint (multiple binds).
Change the format of all ids to look similiar.
FR: NSE11-NSVC23-FR-fr0-DLCI13.
UDP: NSE11-NSVC-UDP-10.0.0.1:23000-192.168.1.1:24000
UDP: NSE11-NSVC23-UDP-10.0.0.1:23000-192.168.1.1:24000
UDP: NSE11-NSVC66-UDP-[fd01::1]:23000-[fd03::2]:24000

Change-Id: I618e263e73fcc64d4e46b57aa3a2cb2783837907
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c
index 7980df5..428fd4a 100644
--- a/src/gb/gprs_ns2_udp.c
+++ b/src/gb/gprs_ns2_udp.c
@@ -384,10 +384,10 @@
 					const struct osmo_sockaddr *remote)
 {
 	struct gprs_ns2_vc *nsvc;
+	const struct osmo_sockaddr *local;
 	struct priv_vc *priv;
 	enum gprs_ns2_vc_mode vc_mode;
-	char *sockaddr_str;
-	char idbuf[64];
+	char idbuf[256], tmp[INET6_ADDRSTRLEN + 8];
 
 	OSMO_ASSERT(gprs_ns2_is_ip_bind(bind));
 
@@ -402,10 +402,12 @@
 	if (gprs_ns2_nsvc_by_sockaddr_bind(bind, remote))
 		return NULL;
 
-	sockaddr_str = (char *)osmo_sockaddr_to_str(remote);
-	osmo_identifier_sanitize_buf(sockaddr_str, NULL, '_');
-	snprintf(idbuf, sizeof(idbuf), "%s-NSE%05u-remote-%s", gprs_ns2_lltype_str(nse->ll),
-		 nse->nsei, sockaddr_str);
+	local = gprs_ns2_ip_bind_sockaddr(bind);
+	osmo_sockaddr_to_str_buf(tmp, sizeof(tmp), local);
+	snprintf(idbuf, sizeof(idbuf), "NSE%05u-NSVC-%s-%s-%s", nse->nsei, gprs_ns2_lltype_str(nse->ll),
+		 tmp, osmo_sockaddr_to_str(remote));
+	osmo_identifier_sanitize_buf(idbuf, NULL, '_');
+
 	nsvc = ns2_vc_alloc(bind, nse, true, vc_mode, idbuf);
 	if (!nsvc)
 		return NULL;