gprs_ns2_sns: dynamic calculate the maximum NS-VCs

The previous hard-coded value could be not enough if the user configures
too many local binds. Allow at least 8 NS-VCs. In case the user
configures too many binds (> 2) increase the maximum NS-VCs to allow
the SGSN to have 4 redundant connections.

Change-Id: Iae859dc504716fd6f705e72db5fc293b4b3298e7
diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c
index 9091c9a..50a1f9b 100644
--- a/src/gb/gprs_ns2_sns.c
+++ b/src/gb/gprs_ns2_sns.c
@@ -1265,6 +1265,7 @@
 	gss->sns_nsvc = nsvc;
 	nsvc->sns_only = true;
 
+	/* count how many bindings are available (only UDP binds) */
 	int count = 0;
 	llist_for_each_entry(bind, &nsi->binding, list) {
 		if (!gprs_ns2_is_ip_bind(bind))
@@ -1320,6 +1321,7 @@
 
 		gss->num_ip4_local = count;
 		gss->num_max_ip4_remote = 4;
+		gss->num_max_nsvcs = OSMO_MAX(gss->num_max_ip4_remote * 4, 8);
 		break;
 	case IPv6:
 		/* IPv6 */
@@ -1358,11 +1360,10 @@
 		}
 		gss->num_ip6_local = count;
 		gss->num_max_ip6_remote = 4;
+		gss->num_max_nsvcs = OSMO_MAX(gss->num_max_ip6_remote * 4, 8);
 		break;
 	}
 
-	gss->num_max_nsvcs = 8;
-
 	return osmo_fsm_inst_dispatch(nse->bss_sns_fi, GPRS_SNS_EV_START, NULL);
 
 err: