Hi! AFAICT the code you point out is correct. In your analysis, please also take into account the function osmo_gsm48_rest_octets_si1_encode() which consumes the return value of is_dcs() as argument is1800_net.
We always try to keep encoding details out of our decision logic. So, since the function is called is_dcs(), it shall return 1 == true for DCS bands. Which value it is encoded as is "hidden" within osmo_gsm48_rest_octets_si1_encode(): if (is1800_net) bitvec_set_bit(&bv, L); else bitvec_set_bit(&bv, H); The bit written to SI1 is according to the specs you kindly point out: DCS band = 1800 band = L, and non-DCS = 1900 = H. Many thanks for your efforts and for pointing out possible bugs in osmocom! ~N