add BSIC parameter to gsm_bts_neighbor()

When looking for the gsm_bts of a neighbor cell, use BSIC and ARFCN
tuple rather than just ARFCN for better identification purpose.
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index 33ec328..012481a 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -503,7 +503,8 @@
 struct gsm_bts *gsm_bts_num(struct gsm_network *net, int num);
 
 /* Get reference to a neighbor cell on a given BCCH ARFCN */
-struct gsm_bts *gsm_bts_neighbor(const struct gsm_bts *bts, u_int16_t arfcn);
+struct gsm_bts *gsm_bts_neighbor(const struct gsm_bts *bts,
+				 u_int16_t arfcn, u_int8_t bsic);
 
 struct gsm_bts_trx *gsm_bts_trx_num(struct gsm_bts *bts, int num);
 
diff --git a/openbsc/src/gsm_data.c b/openbsc/src/gsm_data.c
index 9fb4526..91a854f 100644
--- a/openbsc/src/gsm_data.c
+++ b/openbsc/src/gsm_data.c
@@ -235,7 +235,8 @@
 }
 
 /* Get reference to a neighbor cell on a given BCCH ARFCN */
-struct gsm_bts *gsm_bts_neighbor(const struct gsm_bts *bts, u_int16_t arfcn)
+struct gsm_bts *gsm_bts_neighbor(const struct gsm_bts *bts,
+				 u_int16_t arfcn, u_int8_t bsic)
 {
 	struct gsm_bts *neigh;
 	/* FIXME: use some better heuristics here to determine which cell
@@ -244,7 +245,8 @@
 	 * cell */
 
 	llist_for_each_entry(neigh, &bts->network->bts_list, list) {
-		if (neigh->c0->arfcn == arfcn)
+		if (neigh->c0->arfcn == arfcn &&
+		    neigh->bsic == bsic)
 			return neigh;
 	}