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/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c
index 5af6d97..4348d6f 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c
@@ -799,17 +799,11 @@
       "BSC configuration\n" "Identifier of the BSC\n")
 {
 	int bsc_nr = atoi(argv[0]);
-	struct bsc_config *bsc;
+	struct bsc_config *bsc = bsc_config_num(_nat, bsc_nr);
 
-	if (bsc_nr > _nat->num_bsc) {
-		vty_out(vty, "%% The next unused BSC number is %u%s",
-			_nat->num_bsc, VTY_NEWLINE);
-		return CMD_WARNING;
-	} else if (bsc_nr == _nat->num_bsc) {
-		/* allocate a new one */
-		bsc = bsc_config_alloc(_nat, "unknown");
-	} else
-		bsc = bsc_config_num(_nat, bsc_nr);
+	/* allocate a new one */
+	if (!bsc)
+		bsc = bsc_config_alloc(_nat, "unknown", bsc_nr);
 
 	if (!bsc)
 		return CMD_WARNING;