+static u_int8_t *gsm48_si3(struct gsm_net *net, struct gsm_bts_conf *conf)
+{
+ static u_int8_t si[23];
+ int i, bit, octet;
+
+ memset(&si, 0, sizeof(si));
+
+ /* header */
+#warning testing
+ si[0] = 0x59;
+ si[1] = 0x06;
+ si[2] = 0x1B;
+ /* cell 10.5.1.1 */
+ si[3] = ci >> 8;
+ si[4] = ci;
+ /* lai 10.5.1.3 */
+ gsm0408_generate_lai(&si[5], network->country_code,
+ network->network_code,
+ conf->location_area_code);
+ /* desc 10.5.2.11 */
+ si[10] = conf->att << 6;
+ si[10] |= conf->bs_ag_blks_res << 3;
+ si[10] |= conf->ccch_conf;
+ si[11] = conf->bs_pa_mfrms;
+ si[12] = conf->t3212_decihours;
+ /* option 10.5.2.3 */
+ si[13] = conf->pwrc << 6;
+ si[13] |= conf->dtx << 4;
+ si[13] |= conf->rl_timeout;
+ /* selection 10.5.2.4 */
+ si[14] = conf->csel_hyst << 5;
+ si[14] |= conf->ms_txpwr_max_cch;
+ si[15] = conf->acs << 7;
+ si[15] |= conf->neci << 6;
+ si[15] |= conf->rxlev_access_min;
+ /* rach 10.5.2.29 */
+ si[16] = (conf->max_trans << 6);
+ si[16] |= (conf->tx_integer << 2);
+ si[16] |= (conf->cell_barr << 1);
+ si[16] |= conf->re;
+ si[17] = (conf->ec << 2);
+ for (i = 0; i < conf->ac_len; i++) {
+ if (conf->ac_list[i] <= 15 && conf->ac_list[i] != 10) {
+ bit = conf->ac_list[i] & 7;
+ octet = data->ac_list[i] / 8;
+ si[18 - octet] |= (1 << bit);
+ }
+ }
+ /* rest 10.5.2.34 */
+}
+