From: Holger Hans Peter Freyther zecke@selfish.org
The iPhone5 (US) appears to have some issues with the SIs generated, or the nanoBTS is not sending them correctly. Add a hack to put all bands into the SI2/SI5 message.
This is a quick change without much reflection and watching for side effects. I have verfied that a network with ARFCN 134 and neighbors ARFCN 130 and 512 do not get generate the SI2ter and announce everything inside the SI2. --- openbsc/src/libbsc/system_information.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/openbsc/src/libbsc/system_information.c b/openbsc/src/libbsc/system_information.c index c901a4a..cb67011 100644 --- a/openbsc/src/libbsc/system_information.c +++ b/openbsc/src/libbsc/system_information.c @@ -44,6 +44,7 @@ * array. DCS1800 and PCS1900 can not be used at the same time so conserve * memory and do the below. */ +#if 0 static int band_compatible(const struct gsm_bts *bts, int arfcn) { enum gsm_band band = gsm_arfcn2band(arfcn); @@ -57,6 +58,7 @@ static int band_compatible(const struct gsm_bts *bts, int arfcn)
return 0; } +#endif
static int is_dcs_net(const struct gsm_bts *bts) { @@ -70,6 +72,11 @@ static int is_dcs_net(const struct gsm_bts *bts) static int use_arfcn(const struct gsm_bts *bts, const int bis, const int ter, const int pgsm, const int arfcn) { + if (bis || ter) + return 0; + return 1; +#if 0 + Correct but somehow broken with either the nanoBTS or the iPhone5 if (!bis && !ter && band_compatible(bts, arfcn)) return 1; if (bis && pgsm && band_compatible(bts, arfcn) && (arfcn < 1 || arfcn > 124)) @@ -77,6 +84,7 @@ static int use_arfcn(const struct gsm_bts *bts, const int bis, const int ter, if (ter && !band_compatible(bts, arfcn)) return 1; return 0; +#endif }
/* Frequency Lists as per TS 04.08 10.5.2.13 */