gprs_ns2: add member name to bind

Every bind will have a unique name. Add a name argument
to all bind creating functions and require them to be unique.

This is an API break but there wasn't yet a release with NS2.

Change-Id: I8f1d66b7b3b12da12db8b5e6bd08c1beff085b3e
diff --git a/src/gb/gprs_ns2_udp.c b/src/gb/gprs_ns2_udp.c
index b923e81..3eb8116 100644
--- a/src/gb/gprs_ns2_udp.c
+++ b/src/gb/gprs_ns2_udp.c
@@ -298,6 +298,7 @@
  *  \param[out] result if set, returns the bind object
  *  \return 0 on success; negative in case of error */
 int gprs_ns2_ip_bind(struct gprs_ns2_inst *nsi,
+		     const char *name,
 		     const struct osmo_sockaddr *local,
 		     int dscp,
 		     struct gprs_ns2_vc_bind **result)
@@ -306,6 +307,12 @@
 	struct priv_bind *priv;
 	int rc;
 
+	if (!name)
+		return -EINVAL;
+
+	if (gprs_ns2_bind_by_name(nsi, name))
+		return -EALREADY;
+
 	bind = gprs_ns2_ip_bind_by_sockaddr(nsi, local);
 	if (bind) {
 		*result = bind;
@@ -316,6 +323,12 @@
 	if (!bind)
 		return -ENOSPC;
 
+	bind->name = talloc_strdup(bind, name);
+	if (!bind->name) {
+		talloc_free(bind);
+		return -ENOSPC;
+	}
+
 	if (local->u.sa.sa_family != AF_INET && local->u.sa.sa_family != AF_INET6) {
 		talloc_free(bind);
 		return -EINVAL;