Allow configuration of SI5 neighbor list != SI2 neighbor list

This introducecs the new VTY command "neighbor-list mode manual-si5"
in combination with "si5 neighbor-list (add|del) arfcn <0-1024>",
which allows you to (optionally) have neighbor channel lists that
differ in SI5 and in SI2.
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index f40bcbd..03e7a7c 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -491,6 +491,12 @@
 	struct gsm_nm_state nm_state;
 };
 
+enum neigh_list_manual_mode {
+	NL_MODE_AUTOMATIC = 0,
+	NL_MODE_MANUAL = 1,
+	NL_MODE_MANUAL_SI5SEP = 2, /* SI2 and SI5 have separate neighbor lists */
+};
+
 /* One BTS */
 struct gsm_bts {
 	/* list header in net->bts_list */
@@ -542,7 +548,7 @@
 		struct gsm_nm_state nm_state;
 	} site_mgr;
 
-	int neigh_list_manual_mode;
+	enum neigh_list_manual_mode neigh_list_manual_mode;
 	/* parameters from which we build SYSTEM INFORMATION */
 	struct {
 		struct gsm48_rach_control rach_control;
@@ -553,10 +559,13 @@
 		struct gsm48_control_channel_descr chan_desc;
 		struct bitvec neigh_list;
 		struct bitvec cell_alloc;
+		struct bitvec si5_neigh_list;
 		struct {
 			/* bitmask large enough for all possible ARFCN's */
 			u_int8_t neigh_list[1024/8];
 			u_int8_t cell_alloc[1024/8];
+			/* If the user wants a different neighbor list in SI5 than in SI2 */
+			u_int8_t si5_neigh_list[1024/8];
 		} data;
 	} si_common;