NAT: allow allocating BSC in arbitrary order

Check for existing BSC before allocating new one.
Track number of remaining BSCs on deallocation.
Explicitly use BSC number in allocation function.
diff --git a/openbsc/tests/bsc-nat/bsc_nat_test.c b/openbsc/tests/bsc-nat/bsc_nat_test.c
index a4b313c..a405763 100644
--- a/openbsc/tests/bsc-nat/bsc_nat_test.c
+++ b/openbsc/tests/bsc-nat/bsc_nat_test.c
@@ -316,7 +316,7 @@
 	printf("Testing connection tracking.\n");
 	nat = bsc_nat_alloc();
 	con = bsc_connection_alloc(nat);
-	con->cfg = bsc_config_alloc(nat, "foo");
+	con->cfg = bsc_config_alloc(nat, "foo", 0);
 	bsc_config_add_lac(con->cfg, 23);
 	bsc_config_add_lac(con->cfg, 49);
 	bsc_config_add_lac(con->cfg, 42);
@@ -434,7 +434,7 @@
 
 	nat = bsc_nat_alloc();
 	con = bsc_connection_alloc(nat);
-	cfg = bsc_config_alloc(nat, "unknown");
+	cfg = bsc_config_alloc(nat, "unknown", 0);
 	con->cfg = cfg;
 	bsc_config_add_lac(cfg, 23);
 	con->authenticated = 1;
@@ -476,7 +476,7 @@
 	nat->mgcp_cfg->trunk.number_endpoints = 64;
 
 	bsc = bsc_connection_alloc(nat);
-	bsc->cfg = bsc_config_alloc(nat, "foo");
+	bsc->cfg = bsc_config_alloc(nat, "foo", 0);
 	bsc->cfg->max_endpoints = 60;
 	bsc_config_add_lac(bsc->cfg, 2323);
 	bsc->last_endpoint = 0x22;
@@ -522,7 +522,7 @@
 	mgcp_endpoints_allocate(&nat->mgcp_cfg->trunk);
 
 	bsc = bsc_connection_alloc(nat);
-	bsc->cfg = bsc_config_alloc(nat, "foo");
+	bsc->cfg = bsc_config_alloc(nat, "foo", 0);
 	bsc_config_add_lac(bsc->cfg, 2323);
 	bsc->last_endpoint = 0x1e;
 	con.bsc = bsc;
@@ -874,7 +874,7 @@
 
 	struct bsc_nat *nat = bsc_nat_alloc();
 	struct bsc_connection *bsc = bsc_connection_alloc(nat);
-	bsc->cfg = bsc_config_alloc(nat, "foo");
+	bsc->cfg = bsc_config_alloc(nat, "foo", 0);
 	bsc_config_add_lac(bsc->cfg, 1234);
 	bsc->cfg->acc_lst_name = "bsc";
 	nat->acc_lst_name = "nat";
@@ -953,7 +953,7 @@
 	struct bsc_connection *bsc = bsc_connection_alloc(nat);
 	struct nat_sccp_connection *con = talloc_zero(0, struct nat_sccp_connection);
 
-	bsc->cfg = bsc_config_alloc(nat, "foo");
+	bsc->cfg = bsc_config_alloc(nat, "foo", 0);
 	bsc_config_add_lac(bsc->cfg, 23);
 	con->bsc = bsc;
 
@@ -1525,7 +1525,7 @@
 	/* initialize the testcase */
 	nat = bsc_nat_alloc();
 	bsc = bsc_connection_alloc(nat);
-	bsc->cfg = bsc_config_alloc(nat, "foo");
+	bsc->cfg = bsc_config_alloc(nat, "foo", 0);
 
 	memset(&con, 0, sizeof(con));
 	con.bsc = bsc;