Nokia: Coding style

Running the entire bts_nokia_site.c through the 'Lindent' script
to match indent/coding style with remainder of project.

There are still lots of other cleanups pending, but this one is
a purely cosmetic one.
diff --git a/openbsc/src/libbsc/bts_nokia_site.c b/openbsc/src/libbsc/bts_nokia_site.c
index d30881b..033f6fe 100644
--- a/openbsc/src/libbsc/bts_nokia_site.c
+++ b/openbsc/src/libbsc/bts_nokia_site.c
@@ -45,37 +45,37 @@
 /* TODO: move statics to BTS context */
 static int do_reset = 1;
 /*static*/ int wait_reset = 0;
-struct osmo_timer_list reset_timer; /* timer to re-start after reset */
+struct osmo_timer_list reset_timer;	/* timer to re-start after reset */
 
-#define RESET_INTERVAL      0, 3000000 /* 3 seconds */
+#define RESET_INTERVAL      0, 3000000	/* 3 seconds */
 
 extern int abis_nm_sendmsg(struct gsm_bts *bts, struct msgb *msg);
 /* was static in system_information.c */
-extern int generate_cell_chan_list(uint8_t *chan_list, struct gsm_bts *bts);
+extern int generate_cell_chan_list(uint8_t * chan_list, struct gsm_bts *bts);
 
 static void abis_nm_queue_send_next(struct gsm_bts *bts);
 static void reset_timer_cb(void *_bts);
 static int abis_nm_reset(struct gsm_bts *bts, uint16_t ref);
-static int dump_elements(uint8_t *data, int len);
+static int dump_elements(uint8_t * data, int len);
 
 static void bootstrap_om_bts(struct gsm_bts *bts)
 {
-    LOGP(DNM, LOGL_NOTICE, "bootstrapping OML for BTS %u\n", bts->nr);
-        
-    if(do_reset)
-        abis_nm_reset(bts, 1);
+	LOGP(DNM, LOGL_NOTICE, "bootstrapping OML for BTS %u\n", bts->nr);
+
+	if (do_reset)
+		abis_nm_reset(bts, 1);
 }
 
 static void bootstrap_om_trx(struct gsm_bts_trx *trx)
 {
-    LOGP(DNM, LOGL_NOTICE, "bootstrapping OML for TRX %u/%u\n",
-         trx->bts->nr, trx->nr);
+	LOGP(DNM, LOGL_NOTICE, "bootstrapping OML for TRX %u/%u\n",
+	     trx->bts->nr, trx->nr);
 }
 
 static int shutdown_om(struct gsm_bts *bts)
 {
-    /* TODO !? */
-    return 0;
+	/* TODO !? */
+	return 0;
 }
 
 #define SAPI_OML    62
@@ -88,644 +88,647 @@
   
   Attention: this has to be adapted for MISDN  
 */
- 
+
 static void start_sabm_in_line(struct e1inp_line *line, int start, int sapi)
 {
-    struct e1inp_sign_link *link;
-    int i;
+	struct e1inp_sign_link *link;
+	int i;
 
-    for (i = 0; i < ARRAY_SIZE(line->ts); i++) {
-        struct e1inp_ts *ts = &line->ts[i];
+	for (i = 0; i < ARRAY_SIZE(line->ts); i++) {
+		struct e1inp_ts *ts = &line->ts[i];
 
-        if (ts->type != E1INP_TS_TYPE_SIGN)
-            continue;
+		if (ts->type != E1INP_TS_TYPE_SIGN)
+			continue;
 
-        llist_for_each_entry(link, &ts->sign.sign_links, list) {
-            if(sapi != -1 && link->sapi != sapi)
-                continue;
-            
-#if 0 /* debugging */   
-            printf("sap start/stop (%d): %d tei=%d sapi=%d\n", start, i + 1, link->tei, link->sapi);
+		llist_for_each_entry(link, &ts->sign.sign_links, list) {
+			if (sapi != -1 && link->sapi != sapi)
+				continue;
+
+#if 0				/* debugging */
+			printf("sap start/stop (%d): %d tei=%d sapi=%d\n",
+			       start, i + 1, link->tei, link->sapi);
 #endif
-            
-            if (start)
-                lapd_sap_start(ts->driver.dahdi.lapd, link->tei, link->sapi);
-            else
-                lapd_sap_stop(ts->driver.dahdi.lapd, link->tei, link->sapi);
-        }
-    }
+
+			if (start)
+				lapd_sap_start(ts->driver.dahdi.lapd, link->tei,
+					       link->sapi);
+			else
+				lapd_sap_stop(ts->driver.dahdi.lapd, link->tei,
+					      link->sapi);
+		}
+	}
 }
 
 /* Callback function to be called every time we receive a signal from INPUT */
 static int gbl_sig_cb(unsigned int subsys, unsigned int signal,
-              void *handler_data, void *signal_data)
+		      void *handler_data, void *signal_data)
 {
-    struct gsm_bts *bts;
+	struct gsm_bts *bts;
 
-    if (subsys != SS_GLOBAL)
-        return 0;
+	if (subsys != SS_GLOBAL)
+		return 0;
 
-    switch (signal) {
-    case S_GLOBAL_BTS_CLOSE_OM:
-        bts = signal_data;
-        if (bts->type == GSM_BTS_TYPE_NOKIA_SITE)
-            shutdown_om(signal_data);
-        break;
-    }
+	switch (signal) {
+	case S_GLOBAL_BTS_CLOSE_OM:
+		bts = signal_data;
+		if (bts->type == GSM_BTS_TYPE_NOKIA_SITE)
+			shutdown_om(signal_data);
+		break;
+	}
 
-    return 0;
+	return 0;
 }
 
 /* Callback function to be called every time we receive a signal from INPUT */
 static int inp_sig_cb(unsigned int subsys, unsigned int signal,
-              void *handler_data, void *signal_data)
+		      void *handler_data, void *signal_data)
 {
-    struct input_signal_data *isd = signal_data;
+	struct input_signal_data *isd = signal_data;
 
-    if (subsys != SS_INPUT)
-        return 0;
+	if (subsys != SS_INPUT)
+		return 0;
 
-    switch (signal) {
-    case S_INP_LINE_INIT:
-        start_sabm_in_line(isd->line, 1, SAPI_OML); /* start only OML */
-        break;      
-    case S_INP_TEI_DN:
-        break;      
-    case S_INP_TEI_UP:
-        switch (isd->link_type) {
-        case E1INP_SIGN_OML:
-            if (isd->trx->bts->type != GSM_BTS_TYPE_NOKIA_SITE)
-                break;
-                
-            if (isd->tei == isd->trx->bts->oml_tei)
-                bootstrap_om_bts(isd->trx->bts);
-            else
-                bootstrap_om_trx(isd->trx);
-            break;
-        }
-        break;
-    }
+	switch (signal) {
+	case S_INP_LINE_INIT:
+		start_sabm_in_line(isd->line, 1, SAPI_OML);	/* start only OML */
+		break;
+	case S_INP_TEI_DN:
+		break;
+	case S_INP_TEI_UP:
+		switch (isd->link_type) {
+		case E1INP_SIGN_OML:
+			if (isd->trx->bts->type != GSM_BTS_TYPE_NOKIA_SITE)
+				break;
 
-    return 0;
+			if (isd->tei == isd->trx->bts->oml_tei)
+				bootstrap_om_bts(isd->trx->bts);
+			else
+				bootstrap_om_trx(isd->trx);
+			break;
+		}
+		break;
+	}
+
+	return 0;
 }
 
 static void nm_statechg_evt(unsigned int signal,
-                struct nm_statechg_signal_data *nsd)
+			    struct nm_statechg_signal_data *nsd)
 {
-    if (nsd->bts->type != GSM_BTS_TYPE_NOKIA_SITE)
-        return;
+	if (nsd->bts->type != GSM_BTS_TYPE_NOKIA_SITE)
+		return;
 }
 
 static int nm_sig_cb(unsigned int subsys, unsigned int signal,
-             void *handler_data, void *signal_data)
+		     void *handler_data, void *signal_data)
 {
-    if (subsys != SS_NM)
-        return 0;
+	if (subsys != SS_NM)
+		return 0;
 
-    switch (signal) {
-    case S_NM_STATECHG_OPER:
-    case S_NM_STATECHG_ADM:
-        nm_statechg_evt(signal, signal_data);
-        break;
-    default:
-        break;
-    }
+	switch (signal) {
+	case S_NM_STATECHG_OPER:
+	case S_NM_STATECHG_ADM:
+		nm_statechg_evt(signal, signal_data);
+		break;
+	default:
+		break;
+	}
 
-    return 0;
+	return 0;
 }
 
 /* TODO: put in a separate file ? */
 
 static char *get_msg_type_name_string(uint8_t msg_type)
 {
-    switch(msg_type) {
-    case 0x80:
-        return "NOKIA_BTS_CONF_DATA";
-    case 0x81:
-        return "NOKIA_BTS_ACK";
-    case 0x82:
-        return "NOKIA_BTS_OMU_STARTED";
-    case 0x83:
-        return "NOKIA_BTS_START_DOWNLOAD_REQ";
-    case 0x84:
-        return "NOKIA_BTS_MF_REQ";
-    case 0x85:
-        return "NOKIA_BTS_AF_REQ";
-    case 0x86:
-        return "NOKIA_BTS_RESET_REQ";
-    case 0x87:
-        return "NOKIA_reserved";
-    case 0x88:
-        return "NOKIA_BTS_CONF_REQ";
-    case 0x89:
-        return "NOKIA_BTS_TEST_REQ";
-    case 0x8A:
-        return "NOKIA_BTS_TEST_REPORT";
-    case 0x8B:
-        return "NOKIA_reserved";
-    case 0x8C:
-        return "NOKIA_reserved";
-    case 0x8D:
-        return "NOKIA_reserved";
-    case 0x8E:
-        return "NOKIA_BTS_CONF_COMPL";
-    case 0x8F:
-        return "NOKIA_reserved";
-    case 0x90:
-        return "NOKIA_BTS_STM_TEST_REQ";
-    case 0x91:
-        return "NOKIA_BTS_STM_TEST_REPORT";
-    case 0x92:
-        return "NOKIA_BTS_TRANSMISSION_COMMAND";
-    case 0x93:
-        return "NOKIA_BTS_TRANSMISSION_ANSWER";
-    case 0x94:
-        return "NOKIA_BTS_HW_DB_UPLOAD_REQ";
-    case 0x95:
-        return "NOKIA_BTS_START_HW_DB_DOWNLOAD_REQ";
-    case 0x96:
-        return "NOKIA_BTS_HW_DB_SAVE_REQ";
-    case 0x97:
-        return "NOKIA_BTS_FLASH_ERASURE_REQ";
-    case 0x98:
-        return "NOKIA_BTS_HW_DB_DOWNLOAD_REQ";
-    case 0x99:
-        return "NOKIA_BTS_PWR_SUPPLY_CONTROL";
-    case 0x9A:
-        return "NOKIA_BTS_ATTRIBUTE_REQ";
-    case 0x9B:
-        return "NOKIA_BTS_ATTRIBUTE_REPORT";
-    case 0x9C:
-        return "NOKIA_BTS_HW_REQ";
-    case 0x9D:
-        return "NOKIA_BTS_HW_REPORT";
-    case 0x9E:
-        return "NOKIA_BTS_RTE_TEST_REQ";
-    case 0x9F:
-        return "NOKIA_BTS_RTE_TEST_REPORT";
-    case 0xA0:
-        return "NOKIA_BTS_HW_DB_VERIFICATION_REQ";
-    case 0xA1:
-        return "NOKIA_BTS_CLOCK_REQ";
-    case 0xA2:
-        return "NOKIA_AC_CIRCUIT_REQ_NACK";
-    case 0xA3:
-        return "NOKIA_AC_INTERRUPTED";
-    case 0xA4:
-        return "NOKIA_BTS_NEW_TRE_INFO";
-    case 0xA5:
-        return "NOKIA_AC_BSC_CIRCUITS_ALLOCATED";
-    case 0xA6:
-        return "NOKIA_BTS_TRE_POLL_LIST";
-    case 0xA7:
-        return "NOKIA_AC_CIRCUIT_REQ";
-    case 0xA8:
-        return "NOKIA_BTS_BLOCK_CTRL_REQ";
-    case 0xA9:
-        return "NOKIA_BTS_GSM_TIME_REQ";
-    case 0xAA:
-        return "NOKIA_BTS_GSM_TIME";
-    case 0xAB:
-        return "NOKIA_BTS_OUTPUT_CONTROL";
-    case 0xAC:
-        return "NOKIA_BTS_STATE_CHANGED";
-    case 0xAD:
-        return "NOKIA_BTS_SW_SAVE_REQ";
-    case 0xAE:
-        return "NOKIA_BTS_ALARM";
-    case 0xAF:
-        return "NOKIA_BTS_CHA_ADM_STATE";
-    case 0xB0:
-        return "NOKIA_AC_POOL_SIZE_REPORT";
-    case 0xB1:
-        return "NOKIA_AC_POOL_SIZE_INQUIRY";
-    case 0xB2:
-        return "NOKIA_BTS_COMMISS_TEST_COMPLETED";
-    case 0xB3:
-        return "NOKIA_BTS_COMMISS_TEST_REQ";
-    case 0xB4:
-        return "NOKIA_BTS_TRANSP_BTS_TO_BSC";
-    case 0xB5:
-        return "NOKIA_BTS_TRANSP_BSC_TO_BTS";
-    case 0xB6:
-        return "NOKIA_BTS_LCS_COMMAND";
-    case 0xB7:
-        return "NOKIA_BTS_LCS_ANSWER";
-    case 0xB8:
-        return "NOKIA_BTS_LMU_FN_OFFSET_COMMAND";
-    case 0xB9:
-        return "NOKIA_BTS_LMU_FN_OFFSET_ANSWER";
-    default:
-        return "unknown";   
-    }
+	switch (msg_type) {
+	case 0x80:
+		return "NOKIA_BTS_CONF_DATA";
+	case 0x81:
+		return "NOKIA_BTS_ACK";
+	case 0x82:
+		return "NOKIA_BTS_OMU_STARTED";
+	case 0x83:
+		return "NOKIA_BTS_START_DOWNLOAD_REQ";
+	case 0x84:
+		return "NOKIA_BTS_MF_REQ";
+	case 0x85:
+		return "NOKIA_BTS_AF_REQ";
+	case 0x86:
+		return "NOKIA_BTS_RESET_REQ";
+	case 0x87:
+		return "NOKIA_reserved";
+	case 0x88:
+		return "NOKIA_BTS_CONF_REQ";
+	case 0x89:
+		return "NOKIA_BTS_TEST_REQ";
+	case 0x8A:
+		return "NOKIA_BTS_TEST_REPORT";
+	case 0x8B:
+		return "NOKIA_reserved";
+	case 0x8C:
+		return "NOKIA_reserved";
+	case 0x8D:
+		return "NOKIA_reserved";
+	case 0x8E:
+		return "NOKIA_BTS_CONF_COMPL";
+	case 0x8F:
+		return "NOKIA_reserved";
+	case 0x90:
+		return "NOKIA_BTS_STM_TEST_REQ";
+	case 0x91:
+		return "NOKIA_BTS_STM_TEST_REPORT";
+	case 0x92:
+		return "NOKIA_BTS_TRANSMISSION_COMMAND";
+	case 0x93:
+		return "NOKIA_BTS_TRANSMISSION_ANSWER";
+	case 0x94:
+		return "NOKIA_BTS_HW_DB_UPLOAD_REQ";
+	case 0x95:
+		return "NOKIA_BTS_START_HW_DB_DOWNLOAD_REQ";
+	case 0x96:
+		return "NOKIA_BTS_HW_DB_SAVE_REQ";
+	case 0x97:
+		return "NOKIA_BTS_FLASH_ERASURE_REQ";
+	case 0x98:
+		return "NOKIA_BTS_HW_DB_DOWNLOAD_REQ";
+	case 0x99:
+		return "NOKIA_BTS_PWR_SUPPLY_CONTROL";
+	case 0x9A:
+		return "NOKIA_BTS_ATTRIBUTE_REQ";
+	case 0x9B:
+		return "NOKIA_BTS_ATTRIBUTE_REPORT";
+	case 0x9C:
+		return "NOKIA_BTS_HW_REQ";
+	case 0x9D:
+		return "NOKIA_BTS_HW_REPORT";
+	case 0x9E:
+		return "NOKIA_BTS_RTE_TEST_REQ";
+	case 0x9F:
+		return "NOKIA_BTS_RTE_TEST_REPORT";
+	case 0xA0:
+		return "NOKIA_BTS_HW_DB_VERIFICATION_REQ";
+	case 0xA1:
+		return "NOKIA_BTS_CLOCK_REQ";
+	case 0xA2:
+		return "NOKIA_AC_CIRCUIT_REQ_NACK";
+	case 0xA3:
+		return "NOKIA_AC_INTERRUPTED";
+	case 0xA4:
+		return "NOKIA_BTS_NEW_TRE_INFO";
+	case 0xA5:
+		return "NOKIA_AC_BSC_CIRCUITS_ALLOCATED";
+	case 0xA6:
+		return "NOKIA_BTS_TRE_POLL_LIST";
+	case 0xA7:
+		return "NOKIA_AC_CIRCUIT_REQ";
+	case 0xA8:
+		return "NOKIA_BTS_BLOCK_CTRL_REQ";
+	case 0xA9:
+		return "NOKIA_BTS_GSM_TIME_REQ";
+	case 0xAA:
+		return "NOKIA_BTS_GSM_TIME";
+	case 0xAB:
+		return "NOKIA_BTS_OUTPUT_CONTROL";
+	case 0xAC:
+		return "NOKIA_BTS_STATE_CHANGED";
+	case 0xAD:
+		return "NOKIA_BTS_SW_SAVE_REQ";
+	case 0xAE:
+		return "NOKIA_BTS_ALARM";
+	case 0xAF:
+		return "NOKIA_BTS_CHA_ADM_STATE";
+	case 0xB0:
+		return "NOKIA_AC_POOL_SIZE_REPORT";
+	case 0xB1:
+		return "NOKIA_AC_POOL_SIZE_INQUIRY";
+	case 0xB2:
+		return "NOKIA_BTS_COMMISS_TEST_COMPLETED";
+	case 0xB3:
+		return "NOKIA_BTS_COMMISS_TEST_REQ";
+	case 0xB4:
+		return "NOKIA_BTS_TRANSP_BTS_TO_BSC";
+	case 0xB5:
+		return "NOKIA_BTS_TRANSP_BSC_TO_BTS";
+	case 0xB6:
+		return "NOKIA_BTS_LCS_COMMAND";
+	case 0xB7:
+		return "NOKIA_BTS_LCS_ANSWER";
+	case 0xB8:
+		return "NOKIA_BTS_LMU_FN_OFFSET_COMMAND";
+	case 0xB9:
+		return "NOKIA_BTS_LMU_FN_OFFSET_ANSWER";
+	default:
+		return "unknown";
+	}
 }
 
 static char *get_element_name_string(uint16_t element)
 {
-    switch(element) {
-    case 0x01:
-        return "Ny1";
-    case 0x02:
-        return "T3105_F";
-    case 0x03:
-        return "Interference band limits";
-    case 0x04:
-        return "Interference report timer in secs";
-    case 0x05:
-        return "Channel configuration per TS";
-    case 0x06:
-        return "BSIC";
-    case 0x07:
-        return "RACH report timer in secs";
-    case 0x08:
-        return "Hardware database status";
-    case 0x09:
-        return "BTS RX level";
-    case 0x0A:
-        return "ARFN";
-    case 0x0B:
-        return "STM antenna attenuation";
-    case 0x0C:
-        return "Cell allocation bitmap";
-    case 0x0D:
-        return "Radio definition per TS";
-    case 0x0E:
-        return "Frame number";
-    case 0x0F:
-        return "Antenna diversity";
-    case 0x10:
-        return "T3105_D";
-    case 0x11:
-        return "File format";
-    case 0x12:
-        return "Last File";
-    case 0x13:
-        return "BTS type";
-    case 0x14:
-        return "Erasure mode";
-    case 0x15:
-        return "Hopping mode";
-    case 0x16:
-        return "Floating TRX";
-    case 0x17:
-        return "Power supplies";
-    case 0x18:
-        return "Reset type";
-    case 0x19:
-        return "Averaging period";
-    case 0x1A:
-        return "RBER2";
-    case 0x1B:
-        return "LAC";
-    case 0x1C:
-        return "CI";
-    case 0x1D:
-        return "Failure parameters";
-    case 0x1E:
-        return "(RF max power reduction)";
-    case 0x1F:
-        return "Measured RX_SENS";
-    case 0x20:
-        return "Extended cell radius";
-    case 0x21:
-        return "reserved";
-    case 0x22:
-        return "Success-Failure";
-    case 0x23:
-        return "Ack-Nack";
-    case 0x24:
-        return "OMU test results";
-    case 0x25:
-        return "File identity";
-    case 0x26:
-        return "Generation and version code";
-    case 0x27:
-        return "SW description";
-    case 0x28:
-        return "BCCH LEV";
-    case 0x29:
-        return "Test type";
-    case 0x2A:
-        return "Subscriber number";
-    case 0x2B:
-        return "reserved";
-    case 0x2C:
-        return "HSN";
-    case 0x2D:
-        return "reserved";
-    case 0x2E:
-        return "MS RXLEV";
-    case 0x2F:
-        return "MS TXLEV";
-    case 0x30:
-        return "RXQUAL";
-    case 0x31:
-        return "RX SENS";
-    case 0x32:
-        return "Alarm block";
-    case 0x33:
-        return "Neighbouring BCCH levels";
-    case 0x34:
-        return "STM report type";
-    case 0x35:
-        return "MA";
-    case 0x36:
-        return "MAIO";
-    case 0x37:
-        return "H_FLAG";
-    case 0x38:
-        return "TCH_ARFN";
-    case 0x39:
-        return "Clock output";
-    case 0x3A:
-        return "Transmitted power";
-    case 0x3B:
-        return "Clock sync";
-    case 0x3C:
-        return "TMS protocol discriminator";
-    case 0x3D:
-        return "TMS protocol data";
-    case 0x3E:
-        return "FER";
-    case 0x3F:
-        return "SWR result";
-    case 0x40:
-        return "Object identity";
-    case 0x41:
-        return "STM RX Antenna Test";
-    case 0x42:
-        return "reserved";
-    case 0x43:
-        return "reserved";
-    case 0x44:
-        return "Object current state";
-    case 0x45:
-        return "reserved";
-    case 0x46:
-        return "FU channel configuration";
-    case 0x47:
-        return "reserved";
-    case 0x48:
-        return "ARFN of a CU";
-    case 0x49:
-        return "FU radio definition";
-    case 0x4A:
-        return "reserved";
-    case 0x4B:
-        return "Severity";
-    case 0x4C:
-        return "Diversity selection";
-    case 0x4D:
-        return "RX antenna test";
-    case 0x4E:
-        return "RX antenna supervision period";
-    case 0x4F:
-        return "RX antenna state";
-    case 0x50:
-        return "Sector configuration";
-    case 0x51:
-        return "Additional info";
-    case 0x52:
-        return "SWR parameters";
-    case 0x53:
-        return "HW inquiry mode";
-    case 0x54:
-        return "reserved";
-    case 0x55:
-        return "Availability status";
-    case 0x56:
-        return "reserved";
-    case 0x57:
-        return "EAC inputs";
-    case 0x58:
-        return "EAC outputs";
-    case 0x59:
-        return "reserved";
-    case 0x5A:
-        return "Position";
-    case 0x5B:
-        return "HW unit identity";
-    case 0x5C:
-        return "RF test signal attenuation";
-    case 0x5D:
-        return "Operational state";
-    case 0x5E:
-        return "Logical object identity";
-    case 0x5F:
-        return "reserved";
-    case 0x60:
-        return "BS_TXPWR_OM";
-    case 0x61:
-        return "Loop_Duration";
-    case 0x62:
-        return "LNA_Path_Selection";
-    case 0x63:
-        return "Serial number";
-    case 0x64:
-        return "HW version";
-    case 0x65:
-        return "Obj. identity and obj. state";
-    case 0x66:
-        return "reserved";
-    case 0x67:
-        return "EAC input definition";
-    case 0x68:
-        return "EAC id and text";
-    case 0x69:
-        return "HW unit status";
-    case 0x6A:
-        return "SW release version";
-    case 0x6B:
-        return "FW version";
-    case 0x6C:
-        return "Bit_Error_Ratio";
-    case 0x6D:
-        return "RXLEV_with_Attenuation";
-    case 0x6E:
-        return "RXLEV_without_Attenuation";
-    case 0x6F:
-        return "reserved";
-    case 0x70:
-        return "CU_Results";
-    case 0x71:
-        return "reserved";
-    case 0x72:
-        return "LNA_Path_Results";
-    case 0x73:
-        return "RTE Results";
-    case 0x74:
-        return "Real Time";
-    case 0x75:
-        return "RX diversity selection";
-    case 0x76:
-        return "EAC input config";
-    case 0x77:
-        return "Feature support";
-    case 0x78:
-        return "File version";
-    case 0x79:
-        return "Outputs";
-    case 0x7A:
-        return "FU parameters";
-    case 0x7B:
-        return "Diagnostic info";
-    case 0x7C:
-        return "FU BSIC";
-    case 0x7D:
-        return "TRX Configuration";
-    case 0x7E:
-        return "Download status";
-    case 0x7F:
-        return "RX difference limit";
-    case 0x80:
-        return "TRX HW capability";
-    case 0x81:
-        return "Common HW config";
-    case 0x82:
-        return "Autoconfiguration pool size";
-    case 0x83:
-        return "TRE diagnostic info";
-    case 0x84:
-        return "TRE object identity";
-    case 0x85:
-        return "New TRE Info";
-    case 0x86:
-        return "Acknowledgement period";
-    case 0x87:
-        return "Synchronization mode";
-    case 0x88:
-        return "reserved";
-    case 0x89:
-        return "Block Control Data";
-    case 0x8A:
-        return "SW load mode";
-    case 0x8B:
-        return "Recommended recovery action";
-    case 0x8C:
-        return "BSC BCF id";
-    case 0x8D:
-        return "Q1 baud rate";
-    case 0x8E:
-        return "Allocation status";
-    case 0x8F:
-        return "Functional entity number";
-    case 0x90:
-        return "Transmission delay";
-    case 0x91:
-        return "Loop Duration ms";
-    case 0x92:
-        return "Logical channel";
-    case 0x93:
-        return "Q1 address";
-    case 0x94:
-        return "Alarm detail";
-    case 0x95:
-        return "Cabinet type";
-    case 0x96:
-        return "HW unit existence";
-    case 0x97:
-        return "RF power parameters";
-    case 0x98:
-        return "Message scenario";
-    case 0x99:
-        return "HW unit max amount";
-    case 0x9A:
-        return "Master TRX";
-    case 0x9B:
-        return "Transparent data";
-    case 0x9C:
-        return "BSC topology info";
-    case 0x9D:
-        return "Air i/f modulation";
-    case 0x9E:
-        return "LCS Q1 command data";
-    case 0x9F:
-        return "Frame number offset";
-    case 0xA0:
-        return "Abis TSL";
-    case 0xA1:
-        return "Dynamic pool info";
-    case 0xA2:
-        return "LCS LLP data";
-    case 0xA3:
-        return "LCS Q1 answer data";
-    case 0xA4:
-        return "DFCA FU Radio Definition";
-    case 0xA5:
-        return "Antenna hopping";
-    case 0xA6:
-        return "Field record sequence number";
-    case 0xA7:
-        return "Timeslot offslot";
-    case 0xA8:
-        return "EPCR capability";
-    case 0xA9:
-        return "Connectsite optional element";
-    case 0xAA:
-        return "TSC";
-    case 0xAB:
-        return "Special TX Power Setting";
-    case 0xAC:
-        return "Optional sync settings";
-    case 0xFA:
-        return "Abis If parameters";
-    default:
-        return "unknown";   
-    }
+	switch (element) {
+	case 0x01:
+		return "Ny1";
+	case 0x02:
+		return "T3105_F";
+	case 0x03:
+		return "Interference band limits";
+	case 0x04:
+		return "Interference report timer in secs";
+	case 0x05:
+		return "Channel configuration per TS";
+	case 0x06:
+		return "BSIC";
+	case 0x07:
+		return "RACH report timer in secs";
+	case 0x08:
+		return "Hardware database status";
+	case 0x09:
+		return "BTS RX level";
+	case 0x0A:
+		return "ARFN";
+	case 0x0B:
+		return "STM antenna attenuation";
+	case 0x0C:
+		return "Cell allocation bitmap";
+	case 0x0D:
+		return "Radio definition per TS";
+	case 0x0E:
+		return "Frame number";
+	case 0x0F:
+		return "Antenna diversity";
+	case 0x10:
+		return "T3105_D";
+	case 0x11:
+		return "File format";
+	case 0x12:
+		return "Last File";
+	case 0x13:
+		return "BTS type";
+	case 0x14:
+		return "Erasure mode";
+	case 0x15:
+		return "Hopping mode";
+	case 0x16:
+		return "Floating TRX";
+	case 0x17:
+		return "Power supplies";
+	case 0x18:
+		return "Reset type";
+	case 0x19:
+		return "Averaging period";
+	case 0x1A:
+		return "RBER2";
+	case 0x1B:
+		return "LAC";
+	case 0x1C:
+		return "CI";
+	case 0x1D:
+		return "Failure parameters";
+	case 0x1E:
+		return "(RF max power reduction)";
+	case 0x1F:
+		return "Measured RX_SENS";
+	case 0x20:
+		return "Extended cell radius";
+	case 0x21:
+		return "reserved";
+	case 0x22:
+		return "Success-Failure";
+	case 0x23:
+		return "Ack-Nack";
+	case 0x24:
+		return "OMU test results";
+	case 0x25:
+		return "File identity";
+	case 0x26:
+		return "Generation and version code";
+	case 0x27:
+		return "SW description";
+	case 0x28:
+		return "BCCH LEV";
+	case 0x29:
+		return "Test type";
+	case 0x2A:
+		return "Subscriber number";
+	case 0x2B:
+		return "reserved";
+	case 0x2C:
+		return "HSN";
+	case 0x2D:
+		return "reserved";
+	case 0x2E:
+		return "MS RXLEV";
+	case 0x2F:
+		return "MS TXLEV";
+	case 0x30:
+		return "RXQUAL";
+	case 0x31:
+		return "RX SENS";
+	case 0x32:
+		return "Alarm block";
+	case 0x33:
+		return "Neighbouring BCCH levels";
+	case 0x34:
+		return "STM report type";
+	case 0x35:
+		return "MA";
+	case 0x36:
+		return "MAIO";
+	case 0x37:
+		return "H_FLAG";
+	case 0x38:
+		return "TCH_ARFN";
+	case 0x39:
+		return "Clock output";
+	case 0x3A:
+		return "Transmitted power";
+	case 0x3B:
+		return "Clock sync";
+	case 0x3C:
+		return "TMS protocol discriminator";
+	case 0x3D:
+		return "TMS protocol data";
+	case 0x3E:
+		return "FER";
+	case 0x3F:
+		return "SWR result";
+	case 0x40:
+		return "Object identity";
+	case 0x41:
+		return "STM RX Antenna Test";
+	case 0x42:
+		return "reserved";
+	case 0x43:
+		return "reserved";
+	case 0x44:
+		return "Object current state";
+	case 0x45:
+		return "reserved";
+	case 0x46:
+		return "FU channel configuration";
+	case 0x47:
+		return "reserved";
+	case 0x48:
+		return "ARFN of a CU";
+	case 0x49:
+		return "FU radio definition";
+	case 0x4A:
+		return "reserved";
+	case 0x4B:
+		return "Severity";
+	case 0x4C:
+		return "Diversity selection";
+	case 0x4D:
+		return "RX antenna test";
+	case 0x4E:
+		return "RX antenna supervision period";
+	case 0x4F:
+		return "RX antenna state";
+	case 0x50:
+		return "Sector configuration";
+	case 0x51:
+		return "Additional info";
+	case 0x52:
+		return "SWR parameters";
+	case 0x53:
+		return "HW inquiry mode";
+	case 0x54:
+		return "reserved";
+	case 0x55:
+		return "Availability status";
+	case 0x56:
+		return "reserved";
+	case 0x57:
+		return "EAC inputs";
+	case 0x58:
+		return "EAC outputs";
+	case 0x59:
+		return "reserved";
+	case 0x5A:
+		return "Position";
+	case 0x5B:
+		return "HW unit identity";
+	case 0x5C:
+		return "RF test signal attenuation";
+	case 0x5D:
+		return "Operational state";
+	case 0x5E:
+		return "Logical object identity";
+	case 0x5F:
+		return "reserved";
+	case 0x60:
+		return "BS_TXPWR_OM";
+	case 0x61:
+		return "Loop_Duration";
+	case 0x62:
+		return "LNA_Path_Selection";
+	case 0x63:
+		return "Serial number";
+	case 0x64:
+		return "HW version";
+	case 0x65:
+		return "Obj. identity and obj. state";
+	case 0x66:
+		return "reserved";
+	case 0x67:
+		return "EAC input definition";
+	case 0x68:
+		return "EAC id and text";
+	case 0x69:
+		return "HW unit status";
+	case 0x6A:
+		return "SW release version";
+	case 0x6B:
+		return "FW version";
+	case 0x6C:
+		return "Bit_Error_Ratio";
+	case 0x6D:
+		return "RXLEV_with_Attenuation";
+	case 0x6E:
+		return "RXLEV_without_Attenuation";
+	case 0x6F:
+		return "reserved";
+	case 0x70:
+		return "CU_Results";
+	case 0x71:
+		return "reserved";
+	case 0x72:
+		return "LNA_Path_Results";
+	case 0x73:
+		return "RTE Results";
+	case 0x74:
+		return "Real Time";
+	case 0x75:
+		return "RX diversity selection";
+	case 0x76:
+		return "EAC input config";
+	case 0x77:
+		return "Feature support";
+	case 0x78:
+		return "File version";
+	case 0x79:
+		return "Outputs";
+	case 0x7A:
+		return "FU parameters";
+	case 0x7B:
+		return "Diagnostic info";
+	case 0x7C:
+		return "FU BSIC";
+	case 0x7D:
+		return "TRX Configuration";
+	case 0x7E:
+		return "Download status";
+	case 0x7F:
+		return "RX difference limit";
+	case 0x80:
+		return "TRX HW capability";
+	case 0x81:
+		return "Common HW config";
+	case 0x82:
+		return "Autoconfiguration pool size";
+	case 0x83:
+		return "TRE diagnostic info";
+	case 0x84:
+		return "TRE object identity";
+	case 0x85:
+		return "New TRE Info";
+	case 0x86:
+		return "Acknowledgement period";
+	case 0x87:
+		return "Synchronization mode";
+	case 0x88:
+		return "reserved";
+	case 0x89:
+		return "Block Control Data";
+	case 0x8A:
+		return "SW load mode";
+	case 0x8B:
+		return "Recommended recovery action";
+	case 0x8C:
+		return "BSC BCF id";
+	case 0x8D:
+		return "Q1 baud rate";
+	case 0x8E:
+		return "Allocation status";
+	case 0x8F:
+		return "Functional entity number";
+	case 0x90:
+		return "Transmission delay";
+	case 0x91:
+		return "Loop Duration ms";
+	case 0x92:
+		return "Logical channel";
+	case 0x93:
+		return "Q1 address";
+	case 0x94:
+		return "Alarm detail";
+	case 0x95:
+		return "Cabinet type";
+	case 0x96:
+		return "HW unit existence";
+	case 0x97:
+		return "RF power parameters";
+	case 0x98:
+		return "Message scenario";
+	case 0x99:
+		return "HW unit max amount";
+	case 0x9A:
+		return "Master TRX";
+	case 0x9B:
+		return "Transparent data";
+	case 0x9C:
+		return "BSC topology info";
+	case 0x9D:
+		return "Air i/f modulation";
+	case 0x9E:
+		return "LCS Q1 command data";
+	case 0x9F:
+		return "Frame number offset";
+	case 0xA0:
+		return "Abis TSL";
+	case 0xA1:
+		return "Dynamic pool info";
+	case 0xA2:
+		return "LCS LLP data";
+	case 0xA3:
+		return "LCS Q1 answer data";
+	case 0xA4:
+		return "DFCA FU Radio Definition";
+	case 0xA5:
+		return "Antenna hopping";
+	case 0xA6:
+		return "Field record sequence number";
+	case 0xA7:
+		return "Timeslot offslot";
+	case 0xA8:
+		return "EPCR capability";
+	case 0xA9:
+		return "Connectsite optional element";
+	case 0xAA:
+		return "TSC";
+	case 0xAB:
+		return "Special TX Power Setting";
+	case 0xAC:
+		return "Optional sync settings";
+	case 0xFA:
+		return "Abis If parameters";
+	default:
+		return "unknown";
+	}
 }
 
 static char *get_bts_type_string(uint8_t type)
 {
-    switch(type) {
-    case 0x0A: 
-        return "MetroSite GSM 900";
-    case 0x0B: 
-        return "MetroSite GSM 1800";
-    case 0x0C:
-        return "MetroSite GSM 1900 (PCS)";
-    case 0x0D:
-        return "MetroSite GSM 900 & 1800";
-    case 0x0E:
-        return "InSite GSM 900";
-    case 0x0F:
-        return "InSite GSM 1800";
-    case 0x10:
-        return "InSite GSM 1900";
-    case 0x11:
-        return "UltraSite GSM 900";
-    case 0x12:
-        return "UltraSite GSM 1800";
-    case 0x13:
-        return "UltraSite GSM/US-TDMA 1900";
-    case 0x14:
-        return "UltraSite GSM 900 & 1800";
-    case 0x16:
-        return "UltraSite GSM/US-TDMA 850";
-    case 0x18:
-        return "MetroSite GSM/US-TDMA 850";
-    case 0x19:
-        return "UltraSite GSM 800/1900";
-    default:
-        return "unknown";   
-    }
+	switch (type) {
+	case 0x0A:
+		return "MetroSite GSM 900";
+	case 0x0B:
+		return "MetroSite GSM 1800";
+	case 0x0C:
+		return "MetroSite GSM 1900 (PCS)";
+	case 0x0D:
+		return "MetroSite GSM 900 & 1800";
+	case 0x0E:
+		return "InSite GSM 900";
+	case 0x0F:
+		return "InSite GSM 1800";
+	case 0x10:
+		return "InSite GSM 1900";
+	case 0x11:
+		return "UltraSite GSM 900";
+	case 0x12:
+		return "UltraSite GSM 1800";
+	case 0x13:
+		return "UltraSite GSM/US-TDMA 1900";
+	case 0x14:
+		return "UltraSite GSM 900 & 1800";
+	case 0x16:
+		return "UltraSite GSM/US-TDMA 850";
+	case 0x18:
+		return "MetroSite GSM/US-TDMA 850";
+	case 0x19:
+		return "UltraSite GSM 800/1900";
+	default:
+		return "unknown";
+	}
 }
 
 static char *get_severity_string(uint8_t severity)
 {
-    switch(severity) {
-    case 0:
-        return "indeterminate";
-    case 1:
-        return "critical";
-    case 2:
-        return "major";
-    case 3:
-        return "minor";
-    case 4:
-        return "warning";
-    default:
-        return "unknown";   
-    }
+	switch (severity) {
+	case 0:
+		return "indeterminate";
+	case 1:
+		return "critical";
+	case 2:
+		return "major";
+	case 3:
+		return "minor";
+	case 4:
+		return "warning";
+	default:
+		return "unknown";
+	}
 }
 
 /* TODO: put in a separate file ? */
@@ -755,178 +758,172 @@
 #define OM_ALLOC_SIZE       1024
 #define OM_HEADROOM_SIZE    128
 
-static uint8_t fu_config_template[] =
-{
-  0x7F, 0x7A, 0x39, 
-  /* ID = 0x7A (FU parameters) ## constructed ## */
-  /* length = 57 */
-  /* [3] */
+static uint8_t fu_config_template[] = {
+	0x7F, 0x7A, 0x39,
+	/* ID = 0x7A (FU parameters) ## constructed ## */
+	/* length = 57 */
+	/* [3] */
 
-     0x5F, 0x40, 0x04, 
-     /* ID = 0x40 (Object identity) */
-     /* length = 4 */
-     /* [6] */
-     0x00, 0x07, 0x01, 0xFF, 
+	0x5F, 0x40, 0x04,
+	/* ID = 0x40 (Object identity) */
+	/* length = 4 */
+	/* [6] */
+	0x00, 0x07, 0x01, 0xFF,
 
-     0x41, 0x02, 
-     /* ID = 0x01 (Ny1) */
-     /* length = 2 */
-     /* [12] */
-     0x00, 0x05, 
+	0x41, 0x02,
+	/* ID = 0x01 (Ny1) */
+	/* length = 2 */
+	/* [12] */
+	0x00, 0x05,
 
-     0x42, 0x02, 
-     /* ID = 0x02 (T3105_F) */
-     /* length = 2 */
-     /* [16] */
-     0x00, 0x28, 
+	0x42, 0x02,
+	/* ID = 0x02 (T3105_F) */
+	/* length = 2 */
+	/* [16] */
+	0x00, 0x28,
 
-     0x50, 0x02, 
-     /* ID = 0x10 (T3105_D) */
-     /* length = 2 */
-     /* [20] */
-     0x00, 0x28, 
+	0x50, 0x02,
+	/* ID = 0x10 (T3105_D) */
+	/* length = 2 */
+	/* [20] */
+	0x00, 0x28,
 
-     0x43, 0x05, 
-     /* ID = 0x03 (Interference band limits) */
-     /* length = 5 */
-     /* [24] */
-     0x0F, 0x1B, 0x27, 0x33, 0x3F, 
+	0x43, 0x05,
+	/* ID = 0x03 (Interference band limits) */
+	/* length = 5 */
+	/* [24] */
+	0x0F, 0x1B, 0x27, 0x33, 0x3F,
 
-     0x44, 0x02, 
-     /* ID = 0x04 (Interference report timer in secs) */
-     /* length = 2 */
-     /* [31] */
-     0x00, 0x10, 
+	0x44, 0x02,
+	/* ID = 0x04 (Interference report timer in secs) */
+	/* length = 2 */
+	/* [31] */
+	0x00, 0x10,
 
-     0x47, 0x01, 
-     /* ID = 0x07 (RACH report timer in secs) */
-     /* length = 1 */
-     /* [35] */
-     0x1E, 
+	0x47, 0x01,
+	/* ID = 0x07 (RACH report timer in secs) */
+	/* length = 1 */
+	/* [35] */
+	0x1E,
 
-     0x4C, 0x10, 
-     /* ID = 0x0C (Cell allocation bitmap) ####### */
-     /* length = 16 */
-     /* [38] */
-     0x8F, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+	0x4C, 0x10,
+	/* ID = 0x0C (Cell allocation bitmap) ####### */
+	/* length = 16 */
+	/* [38] */
+	0x8F, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 
-     0x59, 0x01, 
-     /* ID = 0x19 (Averaging period) */
-     /* length = 1 */
-     /* [56] */
-     0x01, 
+	0x59, 0x01,
+	/* ID = 0x19 (Averaging period) */
+	/* length = 1 */
+	/* [56] */
+	0x01,
 
-     0x5E, 0x01, 
-     /* ID = 0x1E ((RF max power reduction)) */
-     /* length = 1 */
-     /* [59] */
-     0x00, 
+	0x5E, 0x01,
+	/* ID = 0x1E ((RF max power reduction)) */
+	/* length = 1 */
+	/* [59] */
+	0x00,
 
-   
-  0x7F, 0x46, 0x11, 
-  /* ID = 0x46 (FU channel configuration) ## constructed ## */
-  /* length = 17 */
-  /* [63] */
+	0x7F, 0x46, 0x11,
+	/* ID = 0x46 (FU channel configuration) ## constructed ## */
+	/* length = 17 */
+	/* [63] */
 
-     0x5F, 0x40, 0x04, 
-     /* ID = 0x40 (Object identity) */
-     /* length = 4 */
-     /* [66] */
-     0x00, 0x07, 0x01, 0xFF, 
+	0x5F, 0x40, 0x04,
+	/* ID = 0x40 (Object identity) */
+	/* length = 4 */
+	/* [66] */
+	0x00, 0x07, 0x01, 0xFF,
 
-     0x45, 0x08, 
-     /* ID = 0x05 (Channel configuration per TS) */
-     /* length = 8 */
-     /* [72] */
-     0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 
+	0x45, 0x08,
+	/* ID = 0x05 (Channel configuration per TS) */
+	/* length = 8 */
+	/* [72] */
+	0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
 
-   
-  0x7F, 0x65, 0x0B, 
-  /* ID = 0x65 (Obj. identity and obj. state) ## constructed ## */
-  /* length = 11 */
-  /* [83] */
+	0x7F, 0x65, 0x0B,
+	/* ID = 0x65 (Obj. identity and obj. state) ## constructed ## */
+	/* length = 11 */
+	/* [83] */
 
-     0x5F, 0x40, 0x04, 
-     /* ID = 0x40 (Object identity) */
-     /* length = 4 */
-     /* [86] */
-     0x00, 0x04, 0x01, 0xFF, 
+	0x5F, 0x40, 0x04,
+	/* ID = 0x40 (Object identity) */
+	/* length = 4 */
+	/* [86] */
+	0x00, 0x04, 0x01, 0xFF,
 
-     0x5F, 0x44, 0x01, 
-     /* ID = 0x44 (Object current state) */
-     /* length = 1 */
-     /* [93] */
-     0x03, 
+	0x5F, 0x44, 0x01,
+	/* ID = 0x44 (Object current state) */
+	/* length = 1 */
+	/* [93] */
+	0x03,
 
-   
-  0x7F, 0x7C, 0x0A, 
-  /* ID = 0x7C (FU BSIC) ## constructed ## */
-  /* length = 10 */
-  /* [97] */
+	0x7F, 0x7C, 0x0A,
+	/* ID = 0x7C (FU BSIC) ## constructed ## */
+	/* length = 10 */
+	/* [97] */
 
-     0x5F, 0x40, 0x04, 
-     /* ID = 0x40 (Object identity) */
-     /* length = 4 */
-     /* [100] */
-     0x00, 0x07, 0x01, 0xFF, 
+	0x5F, 0x40, 0x04,
+	/* ID = 0x40 (Object identity) */
+	/* length = 4 */
+	/* [100] */
+	0x00, 0x07, 0x01, 0xFF,
 
-     0x46, 0x01, 
-     /* ID = 0x06 (BSIC) */
-     /* length = 1 */
-     /* [106] */
-     0x00, 
+	0x46, 0x01,
+	/* ID = 0x06 (BSIC) */
+	/* length = 1 */
+	/* [106] */
+	0x00,
 
-   
-  0x7F, 0x48, 0x0B, 
-  /* ID = 0x48 (ARFN of a CU) ## constructed ## */
-  /* length = 11 */
-  /* [110] */
+	0x7F, 0x48, 0x0B,
+	/* ID = 0x48 (ARFN of a CU) ## constructed ## */
+	/* length = 11 */
+	/* [110] */
 
-     0x5F, 0x40, 0x04, 
-     /* ID = 0x40 (Object identity) */
-     /* length = 4 */
-     /* [113] */
-     0x00, 0x08, 0x01, 0xFF, 
+	0x5F, 0x40, 0x04,
+	/* ID = 0x40 (Object identity) */
+	/* length = 4 */
+	/* [113] */
+	0x00, 0x08, 0x01, 0xFF,
 
-     0x4A, 0x02, 
-     /* ID = 0x0A (ARFN) ####### */
-     /* length = 2 */
-     /* [119] */
-     0x03, 0x62, 
+	0x4A, 0x02,
+	/* ID = 0x0A (ARFN) ####### */
+	/* length = 2 */
+	/* [119] */
+	0x03, 0x62,
 
-   
-  0x7F, 0x49, 0x59, 
-  /* ID = 0x49 (FU radio definition) ## constructed ## */
-  /* length = 89 */
-  /* [124] */
+	0x7F, 0x49, 0x59,
+	/* ID = 0x49 (FU radio definition) ## constructed ## */
+	/* length = 89 */
+	/* [124] */
 
-     0x5F, 0x40, 0x04, 
-     /* ID = 0x40 (Object identity) */
-     /* length = 4 */
-     /* [127] */
-     0x00, 0x07, 0x01, 0xFF, 
+	0x5F, 0x40, 0x04,
+	/* ID = 0x40 (Object identity) */
+	/* length = 4 */
+	/* [127] */
+	0x00, 0x07, 0x01, 0xFF,
 
-     0x4D, 0x50, 
-     /* ID = 0x0D (Radio definition per TS) ####### */
-     /* length = 80 */
-     /* [133] */
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MA */
-     0x03, 0x62, /* HSN, MAIO or ARFCN if no hopping */
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x03, 0x62, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x03, 0x62, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x03, 0x62, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x03, 0x62, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x03, 0x62, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x03, 0x62, 
-     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
-     0x03, 0x62, 
+	0x4D, 0x50,
+	/* ID = 0x0D (Radio definition per TS) ####### */
+	/* length = 80 */
+	/* [133] */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,	/* MA */
+	0x03, 0x62,		/* HSN, MAIO or ARFCN if no hopping */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x03, 0x62,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x03, 0x62,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x03, 0x62,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x03, 0x62,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x03, 0x62,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x03, 0x62,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x03, 0x62,
 };
 
 /* TODO: put in a separate file ? */
@@ -935,288 +932,287 @@
   build the configuration for each TRX  
 */
 
-static int make_fu_config(struct gsm_bts_trx *trx, uint8_t id, uint8_t *fu_config, int *hopping)
+static int make_fu_config(struct gsm_bts_trx *trx, uint8_t id,
+			  uint8_t * fu_config, int *hopping)
 {
-    int i;
-    
-    *hopping = 0;
-    
-    memcpy(fu_config, fu_config_template, sizeof(fu_config_template));
-    
-    /* set ID */
-    
-    fu_config[  6 + 2] = id;
-    fu_config[ 66 + 2] = id;
-    fu_config[ 86 + 2] = id;
-    fu_config[100 + 2] = id;
-    fu_config[113 + 2] = id;
-    fu_config[127 + 2] = id;
-    
-    /* set ARFCN */
-    
-    uint16_t arfcn = trx->arfcn;
-    
-    fu_config[119] = arfcn >> 8;
-    fu_config[119 + 1] = arfcn & 0xFF;
-    
-    for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
-        struct gsm_bts_trx_ts *ts = &trx->ts[i];
+	int i;
 
-        if (ts->hopping.enabled) {
-            /* reverse order */
-            int j;
-            for(j = 0; j < ts->hopping.ma_len; j++)
-                fu_config[133 + (i * 10) + (7 - j)] = ts->hopping.ma_data[j];
-            fu_config[133 + 8 + (i * 10)] = ts->hopping.hsn;
-            fu_config[133 + 8 + 1 + (i * 10)] = ts->hopping.maio;
-            *hopping = 1;
-        } else {
-            fu_config[133 + 8 + (i * 10)] = arfcn >> 8;
-            fu_config[133 + 8 + 1 + (i * 10)] = arfcn & 0xFF;
-        }
-    }
-    
-    /* set BSIC */
-    
-    /* 
-       Attention: all TRX except the first one seem to get the TSC
-       from the CHANNEL ACTIVATION command (in CHANNEL IDENTIFICATION,
-       GSM 04.08 CHANNEL DESCRIPTION). 
-       There was a bug in rsl_chan_activate_lchan() setting this parameter.       
-    */
-    
-    uint8_t bsic = trx->bts->bsic;
-            
-    fu_config[106] = bsic;
-            
-    /* set CA */
-    
-    if(generate_cell_chan_list(&fu_config[38], trx->bts) != 0) {    
-        fprintf(stderr, "generate_cell_chan_list failed\n");
-        return 0;
-    }
-                                    
-    /* set channel configuration */
-    
-    for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
-        struct gsm_bts_trx_ts *ts = &trx->ts[i];
-        uint8_t chan_config;                
-        
-        /*
-            0 = FCCH + SCH + BCCH + CCCH
-            1 = FCCH + SCH + BCCH + CCCH + SDCCH/4 + SACCH/4
-            2 = BCCH + CCCH (This combination is not used in any BTS)
-            3 = FCCH + SCH + BCCH + CCCH + SDCCH/4 with SDCCH2 used as CBCH
-            4 = SDCCH/8 + SACCH/8
-            5 = SDCCH/8 with SDCCH2 used as CBCH
-            6 = TCH/F + FACCH/F + SACCH/F
-            7 = E-RACH (Talk family)
-            9 = Dual rate (capability for TCH/F and TCH/H)
-            10 = reserved for BTS internal use
-            11 = PBCCH + PCCCH + PDTCH + PACCH + PTCCH (This channel configuration type can be used in GPRS release 2).
-            0xFF = spare TS 
-        */
-        
-        if(ts->pchan == GSM_PCHAN_NONE)
-            chan_config = 0xFF;
-        else if(ts->pchan == GSM_PCHAN_CCCH)
-            chan_config = 0;
-        else if(ts->pchan == GSM_PCHAN_CCCH_SDCCH4)
-            chan_config = 1;
-        else if(ts->pchan == GSM_PCHAN_TCH_F)
-            chan_config = 6; /* 9 should work too */
-        else if(ts->pchan == GSM_PCHAN_TCH_H)
-            chan_config = 9;
-        else if(ts->pchan == GSM_PCHAN_SDCCH8_SACCH8C)
-            chan_config = 4;
-        else if(ts->pchan == GSM_PCHAN_PDCH)
-            chan_config = 11;
-        else {      
-            fprintf(stderr, "unsupported channel config %d for timeslot %d\n", ts->pchan, i);
-            return 0;
-        }
-        
-        fu_config[72 + i] = chan_config; 
-    }   
-    return sizeof(fu_config_template);
+	*hopping = 0;
+
+	memcpy(fu_config, fu_config_template, sizeof(fu_config_template));
+
+	/* set ID */
+
+	fu_config[6 + 2] = id;
+	fu_config[66 + 2] = id;
+	fu_config[86 + 2] = id;
+	fu_config[100 + 2] = id;
+	fu_config[113 + 2] = id;
+	fu_config[127 + 2] = id;
+
+	/* set ARFCN */
+
+	uint16_t arfcn = trx->arfcn;
+
+	fu_config[119] = arfcn >> 8;
+	fu_config[119 + 1] = arfcn & 0xFF;
+
+	for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
+		struct gsm_bts_trx_ts *ts = &trx->ts[i];
+
+		if (ts->hopping.enabled) {
+			/* reverse order */
+			int j;
+			for (j = 0; j < ts->hopping.ma_len; j++)
+				fu_config[133 + (i * 10) + (7 - j)] =
+				    ts->hopping.ma_data[j];
+			fu_config[133 + 8 + (i * 10)] = ts->hopping.hsn;
+			fu_config[133 + 8 + 1 + (i * 10)] = ts->hopping.maio;
+			*hopping = 1;
+		} else {
+			fu_config[133 + 8 + (i * 10)] = arfcn >> 8;
+			fu_config[133 + 8 + 1 + (i * 10)] = arfcn & 0xFF;
+		}
+	}
+
+	/* set BSIC */
+
+	/* 
+	   Attention: all TRX except the first one seem to get the TSC
+	   from the CHANNEL ACTIVATION command (in CHANNEL IDENTIFICATION,
+	   GSM 04.08 CHANNEL DESCRIPTION). 
+	   There was a bug in rsl_chan_activate_lchan() setting this parameter.       
+	 */
+
+	uint8_t bsic = trx->bts->bsic;
+
+	fu_config[106] = bsic;
+
+	/* set CA */
+
+	if (generate_cell_chan_list(&fu_config[38], trx->bts) != 0) {
+		fprintf(stderr, "generate_cell_chan_list failed\n");
+		return 0;
+	}
+
+	/* set channel configuration */
+
+	for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
+		struct gsm_bts_trx_ts *ts = &trx->ts[i];
+		uint8_t chan_config;
+
+		/*
+		   0 = FCCH + SCH + BCCH + CCCH
+		   1 = FCCH + SCH + BCCH + CCCH + SDCCH/4 + SACCH/4
+		   2 = BCCH + CCCH (This combination is not used in any BTS)
+		   3 = FCCH + SCH + BCCH + CCCH + SDCCH/4 with SDCCH2 used as CBCH
+		   4 = SDCCH/8 + SACCH/8
+		   5 = SDCCH/8 with SDCCH2 used as CBCH
+		   6 = TCH/F + FACCH/F + SACCH/F
+		   7 = E-RACH (Talk family)
+		   9 = Dual rate (capability for TCH/F and TCH/H)
+		   10 = reserved for BTS internal use
+		   11 = PBCCH + PCCCH + PDTCH + PACCH + PTCCH (This channel configuration type can be used in GPRS release 2).
+		   0xFF = spare TS 
+		 */
+
+		if (ts->pchan == GSM_PCHAN_NONE)
+			chan_config = 0xFF;
+		else if (ts->pchan == GSM_PCHAN_CCCH)
+			chan_config = 0;
+		else if (ts->pchan == GSM_PCHAN_CCCH_SDCCH4)
+			chan_config = 1;
+		else if (ts->pchan == GSM_PCHAN_TCH_F)
+			chan_config = 6;	/* 9 should work too */
+		else if (ts->pchan == GSM_PCHAN_TCH_H)
+			chan_config = 9;
+		else if (ts->pchan == GSM_PCHAN_SDCCH8_SACCH8C)
+			chan_config = 4;
+		else if (ts->pchan == GSM_PCHAN_PDCH)
+			chan_config = 11;
+		else {
+			fprintf(stderr,
+				"unsupported channel config %d for timeslot %d\n",
+				ts->pchan, i);
+			return 0;
+		}
+
+		fu_config[72 + i] = chan_config;
+	}
+	return sizeof(fu_config_template);
 }
 
 /* TODO: put in a separate file ? */
 
-static uint8_t bts_config_1[] =
+static uint8_t bts_config_1[] = {
+	0x4E, 0x02,
+	/* ID = 0x0E (Frame number) */
+	/* length = 2 */
+	/* [2] */
+	0xFF, 0xFF,
+
+	0x5F, 0x4E, 0x02,
+	/* ID = 0x4E (RX antenna supervision period) */
+	/* length = 2 */
+	/* [7] */
+	0xFF, 0xFF,
+
+	0x5F, 0x50, 0x02,
+	/* ID = 0x50 (Sector configuration) */
+	/* length = 2 */
+	/* [12] */
+	0x01, 0x01,
+};
+
+static uint8_t bts_config_2[] = {
+	0x55, 0x02,
+	/* ID = 0x15 (Hopping mode) */
+	/* length = 2 */
+	/* [2] */
+	0x01, 0x00,
+
+	0x5F, 0x75, 0x02,
+	/* ID = 0x75 (RX diversity selection) */
+	/* length = 2 */
+	/* [7] */
+	0x01, 0x01,
+};
+
+static uint8_t bts_config_3[] = {
+	0x5F, 0x20, 0x02,
+	/* ID = 0x20 (Extended cell radius) */
+	/* length = 2 */
+	/* [3] */
+	0x01, 0x00,
+};
+
+static uint8_t bts_config_4[] = {
+	0x5F, 0x74, 0x09,
+	/* ID = 0x74 (Real Time) */
+	/* length = 9 */
+	/* [3] year-high, year-low, month, day, hour, minute, second, msec-high, msec-low */
+	0x07, 0xDB, 0x06, 0x02, 0x0B, 0x20, 0x0C, 0x00,
+	0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [15] */
+	0x01, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [21] */
+	0x02, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [27] */
+	0x03, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [33] */
+	0x04, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [39] */
+	0x05, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [45] */
+	0x06, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [51] */
+	0x07, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [57] */
+	0x08, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [63] */
+	0x09, 0x01, 0x00,
+
+	0x5F, 0x76, 0x03,
+	/* ID = 0x76 (EAC input config) */
+	/* length = 3 */
+	/* [69] */
+	0x0A, 0x01, 0x00,
+};
+
+static uint8_t bts_config_insite[] = {
+	0x4E, 0x02,
+	/* ID = 0x0E (Frame number) */
+	/* length = 2 */
+	/* [2] */
+	0xFF, 0xFF,
+
+	0x5F, 0x4E, 0x02,
+	/* ID = 0x4E (RX antenna supervision period) */
+	/* length = 2 */
+	/* [7] */
+	0xFF, 0xFF,
+
+	0x5F, 0x50, 0x02,
+	/* ID = 0x50 (Sector configuration) */
+	/* length = 2 */
+	/* [12] */
+	0x01, 0x01,
+
+	0x55, 0x02,
+	/* ID = 0x15 (Hopping mode) */
+	/* length = 2 */
+	/* [16] */
+	0x01, 0x00,
+
+	0x5F, 0x20, 0x02,
+	/* ID = 0x20 (Extended cell radius) */
+	/* length = 2 */
+	/* [21] */
+	0x01, 0x00,
+
+	0x5F, 0x74, 0x09,
+	/* ID = 0x74 (Real Time) */
+	/* length = 9 */
+	/* [26] */
+	0x07, 0xDB, 0x07, 0x0A, 0x0F, 0x09, 0x0B, 0x00,
+	0x00,
+};
+
+void set_real_time(uint8_t * real_time)
 {
-  0x4E, 0x02, 
-  /* ID = 0x0E (Frame number) */
-  /* length = 2 */
-  /* [2] */
-  0xFF, 0xFF, 
+	time_t t;
+	struct tm *tm;
 
-  0x5F, 0x4E, 0x02, 
-  /* ID = 0x4E (RX antenna supervision period) */
-  /* length = 2 */
-  /* [7] */
-  0xFF, 0xFF, 
+	t = time(NULL);
+	tm = localtime(&t);
 
-  0x5F, 0x50, 0x02, 
-  /* ID = 0x50 (Sector configuration) */
-  /* length = 2 */
-  /* [12] */
-  0x01, 0x01, 
-};
+	/* year-high, year-low, month, day, hour, minute, second, msec-high, msec-low */
 
-static uint8_t bts_config_2[] =
-{
-  0x55, 0x02, 
-  /* ID = 0x15 (Hopping mode) */
-  /* length = 2 */
-  /* [2] */
-  0x01, 0x00, 
-
-  0x5F, 0x75, 0x02, 
-  /* ID = 0x75 (RX diversity selection) */
-  /* length = 2 */
-  /* [7] */
-  0x01, 0x01, 
-};
-
-static uint8_t bts_config_3[] =
-{  
-  0x5F, 0x20, 0x02, 
-  /* ID = 0x20 (Extended cell radius) */
-  /* length = 2 */
-  /* [3] */
-  0x01, 0x00, 
-};
-
-static uint8_t bts_config_4[] =
-{    
-  0x5F, 0x74, 0x09, 
-  /* ID = 0x74 (Real Time) */
-  /* length = 9 */
-  /* [3] year-high, year-low, month, day, hour, minute, second, msec-high, msec-low */
-  0x07, 0xDB, 0x06, 0x02, 0x0B, 0x20, 0x0C, 0x00, 
-  0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [15] */
-  0x01, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [21] */
-  0x02, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [27] */
-  0x03, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [33] */
-  0x04, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [39] */
-  0x05, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [45] */
-  0x06, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [51] */
-  0x07, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [57] */
-  0x08, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [63] */
-  0x09, 0x01, 0x00, 
-
-  0x5F, 0x76, 0x03, 
-  /* ID = 0x76 (EAC input config) */
-  /* length = 3 */
-  /* [69] */
-  0x0A, 0x01, 0x00, 
-};
-
-static uint8_t bts_config_insite[] =
-{
-  0x4E, 0x02, 
-  /* ID = 0x0E (Frame number) */
-  /* length = 2 */
-  /* [2] */
-  0xFF, 0xFF, 
-
-  0x5F, 0x4E, 0x02, 
-  /* ID = 0x4E (RX antenna supervision period) */
-  /* length = 2 */
-  /* [7] */
-  0xFF, 0xFF, 
-
-  0x5F, 0x50, 0x02, 
-  /* ID = 0x50 (Sector configuration) */
-  /* length = 2 */
-  /* [12] */
-  0x01, 0x01, 
-
-  0x55, 0x02, 
-  /* ID = 0x15 (Hopping mode) */
-  /* length = 2 */
-  /* [16] */
-  0x01, 0x00, 
-
-  0x5F, 0x20, 0x02, 
-  /* ID = 0x20 (Extended cell radius) */
-  /* length = 2 */
-  /* [21] */
-  0x01, 0x00, 
-
-  0x5F, 0x74, 0x09, 
-  /* ID = 0x74 (Real Time) */
-  /* length = 9 */
-  /* [26] */
-  0x07, 0xDB, 0x07, 0x0A, 0x0F, 0x09, 0x0B, 0x00, 
-  0x00, 
-};
-
-void set_real_time(uint8_t *real_time)
-{
-    time_t t;
-    struct tm *tm;
-
-    t = time(NULL);
-    tm = localtime(&t);
-
-    /* year-high, year-low, month, day, hour, minute, second, msec-high, msec-low */
-  
-    real_time[0] = (1900 + tm->tm_year) >> 8;
-    real_time[1] = (1900 + tm->tm_year) & 0xFF;
-    real_time[2] = tm->tm_mon + 1;
-    real_time[3] = tm->tm_mday;
-    real_time[4] = tm->tm_hour;
-    real_time[5] = tm->tm_min;
-    real_time[6] = tm->tm_sec;
-    real_time[7] = 0; 
-    real_time[8] = 0;
+	real_time[0] = (1900 + tm->tm_year) >> 8;
+	real_time[1] = (1900 + tm->tm_year) & 0xFF;
+	real_time[2] = tm->tm_mon + 1;
+	real_time[3] = tm->tm_mday;
+	real_time[4] = tm->tm_hour;
+	real_time[5] = tm->tm_min;
+	real_time[6] = tm->tm_sec;
+	real_time[7] = 0;
+	real_time[8] = 0;
 }
 
 /* TODO: put in a separate file ? */
@@ -1227,423 +1223,438 @@
   
 */
 
-static int make_bts_config(uint8_t bts_type, int n_trx, uint8_t *fu_config, int need_hopping)
+static int make_bts_config(uint8_t bts_type, int n_trx, uint8_t * fu_config,
+			   int need_hopping)
 {
-    /* is it an InSite BTS ? */
-    if(bts_type == 0x0E || bts_type == 0x0F || bts_type == 0x10) { /* TODO */
-        if(n_trx != 1) {
-            fprintf(stderr, "InSite has only one TRX\n");       
-            return 0;
-        }
-        if(need_hopping != 0) {
-            fprintf(stderr, "InSite does not support hopping\n");
-            return 0;
-        }
-        memcpy(fu_config, bts_config_insite, sizeof(bts_config_insite));
-        set_real_time(&fu_config[26]);
-        return sizeof(bts_config_insite);
-    }
-                
-    int len = 0;
-    int i;
-    
-    memcpy(fu_config + len, bts_config_1, sizeof(bts_config_1));    
-    
-    /* set sector configuration */
-    fu_config[len + 12 - 1] = 1 + n_trx; /* len */
-    for(i = 0; i < n_trx; i++)
-        fu_config[len + 12 + 1 + i] = ((i + 1) & 0xFF);
-    
-    len += (sizeof(bts_config_1) + (n_trx - 1));
+	/* is it an InSite BTS ? */
+	if (bts_type == 0x0E || bts_type == 0x0F || bts_type == 0x10) {	/* TODO */
+		if (n_trx != 1) {
+			fprintf(stderr, "InSite has only one TRX\n");
+			return 0;
+		}
+		if (need_hopping != 0) {
+			fprintf(stderr, "InSite does not support hopping\n");
+			return 0;
+		}
+		memcpy(fu_config, bts_config_insite, sizeof(bts_config_insite));
+		set_real_time(&fu_config[26]);
+		return sizeof(bts_config_insite);
+	}
 
-    memcpy(fu_config + len, bts_config_2, sizeof(bts_config_2));
-    /* set hopping mode (Baseband and RF hopping work for the MetroSite) */
-    if(need_hopping)
-        fu_config[len + 2 + 1] = 1; /* 0: no hopping, 1: Baseband hopping, 2: RF hopping */
-    len += sizeof(bts_config_2);
-    
-    /* set extended cell radius for each TRX */ 
-    for(i = 0; i < n_trx; i++) {
-        memcpy(fu_config + len, bts_config_3, sizeof(bts_config_3));
-        fu_config[len + 3] = ((i + 1) & 0xFF);
-        len += sizeof(bts_config_3);
-    }
-    
-    memcpy(fu_config + len, bts_config_4, sizeof(bts_config_4));
-    set_real_time(&fu_config[len + 3]);
-    len += sizeof(bts_config_4);
-    
-    return len;
+	int len = 0;
+	int i;
+
+	memcpy(fu_config + len, bts_config_1, sizeof(bts_config_1));
+
+	/* set sector configuration */
+	fu_config[len + 12 - 1] = 1 + n_trx;	/* len */
+	for (i = 0; i < n_trx; i++)
+		fu_config[len + 12 + 1 + i] = ((i + 1) & 0xFF);
+
+	len += (sizeof(bts_config_1) + (n_trx - 1));
+
+	memcpy(fu_config + len, bts_config_2, sizeof(bts_config_2));
+	/* set hopping mode (Baseband and RF hopping work for the MetroSite) */
+	if (need_hopping)
+		fu_config[len + 2 + 1] = 1;	/* 0: no hopping, 1: Baseband hopping, 2: RF hopping */
+	len += sizeof(bts_config_2);
+
+	/* set extended cell radius for each TRX */
+	for (i = 0; i < n_trx; i++) {
+		memcpy(fu_config + len, bts_config_3, sizeof(bts_config_3));
+		fu_config[len + 3] = ((i + 1) & 0xFF);
+		len += sizeof(bts_config_3);
+	}
+
+	memcpy(fu_config + len, bts_config_4, sizeof(bts_config_4));
+	set_real_time(&fu_config[len + 3]);
+	len += sizeof(bts_config_4);
+
+	return len;
 }
 
 /* TODO: put in a separate file ? */
 
 static struct msgb *nm_msgb_alloc(void)
 {
-    return msgb_alloc_headroom(OM_ALLOC_SIZE, OM_HEADROOM_SIZE,
-                   "OML");
+	return msgb_alloc_headroom(OM_ALLOC_SIZE, OM_HEADROOM_SIZE, "OML");
 }
 
 /* TODO: put in a separate file ? */
 
 struct abis_om_nokia_hdr {
-    uint8_t  msg_type;
-    uint8_t  spare;
-    uint16_t reference;
-    uint8_t  data[0];
+	uint8_t msg_type;
+	uint8_t spare;
+	uint16_t reference;
+	uint8_t data[0];
 } __attribute__ ((packed));
 
 #define ABIS_OM_NOKIA_HDR_SIZE (sizeof(struct abis_om_hdr) + sizeof(struct abis_om_nokia_hdr))
 
-static int abis_nm_send(struct gsm_bts *bts, uint8_t msg_type, uint16_t ref, uint8_t *data, int len_data)
+static int abis_nm_send(struct gsm_bts *bts, uint8_t msg_type, uint16_t ref,
+			uint8_t * data, int len_data)
 {
-    struct abis_om_hdr *oh;
-    struct abis_om_nokia_hdr *noh;
-    struct msgb *msg = nm_msgb_alloc();
-    
-    oh = (struct abis_om_hdr *) msgb_put(msg, ABIS_OM_NOKIA_HDR_SIZE + len_data);
-        
-    oh->mdisc = ABIS_OM_MDISC_FOM;
-    oh->placement = ABIS_OM_PLACEMENT_ONLY;
-    oh->sequence = 0;
-    oh->length = sizeof(struct abis_om_nokia_hdr) + len_data;
+	struct abis_om_hdr *oh;
+	struct abis_om_nokia_hdr *noh;
+	struct msgb *msg = nm_msgb_alloc();
 
-    noh = (struct abis_om_nokia_hdr *)oh->data; 
-    
-    noh->msg_type = msg_type;
-    noh->spare = 0;
-    noh->reference = htons(ref);
-    memcpy(noh->data, data, len_data);
-    
-    DEBUGPC(DNM, "Sending %s\n", get_msg_type_name_string(msg_type));
+	oh = (struct abis_om_hdr *)msgb_put(msg,
+					    ABIS_OM_NOKIA_HDR_SIZE + len_data);
 
-    return abis_nm_sendmsg(bts, msg);
+	oh->mdisc = ABIS_OM_MDISC_FOM;
+	oh->placement = ABIS_OM_PLACEMENT_ONLY;
+	oh->sequence = 0;
+	oh->length = sizeof(struct abis_om_nokia_hdr) + len_data;
+
+	noh = (struct abis_om_nokia_hdr *)oh->data;
+
+	noh->msg_type = msg_type;
+	noh->spare = 0;
+	noh->reference = htons(ref);
+	memcpy(noh->data, data, len_data);
+
+	DEBUGPC(DNM, "Sending %s\n", get_msg_type_name_string(msg_type));
+
+	return abis_nm_sendmsg(bts, msg);
 }
 
 /* TODO: put in a separate file ? */
 
 static uint8_t download_req[] = {
-  0x5F, 0x25, 0x0B, 
-  /* ID = 0x25 (File identity) */
-  /* length = 11 */
-  /* [3] */
-  0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 
-  0x2A, 0x2A, 0x2A, 
+	0x5F, 0x25, 0x0B,
+	/* ID = 0x25 (File identity) */
+	/* length = 11 */
+	/* [3] */
+	0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
+	0x2A, 0x2A, 0x2A,
 
-  0x5F, 0x78, 0x03, 
-  /* ID = 0x78 (File version) */
-  /* length = 3 */
-  /* [17] */
-  0x2A, 0x2A, 0x2A, 
+	0x5F, 0x78, 0x03,
+	/* ID = 0x78 (File version) */
+	/* length = 3 */
+	/* [17] */
+	0x2A, 0x2A, 0x2A,
 
-  0x5F, 0x81, 0x0A, 0x01, 
-  /* ID = 0x8A (SW load mode) */
-  /* length = 1 */
-  /* [24] */
-  0x01, 
+	0x5F, 0x81, 0x0A, 0x01,
+	/* ID = 0x8A (SW load mode) */
+	/* length = 1 */
+	/* [24] */
+	0x01,
 
-  0x5F, 0x81, 0x06, 0x01, 
-  /* ID = 0x86 (Acknowledgement period) */
-  /* length = 1 */
-  /* [29] */
-  0x01, 
+	0x5F, 0x81, 0x06, 0x01,
+	/* ID = 0x86 (Acknowledgement period) */
+	/* length = 1 */
+	/* [29] */
+	0x01,
 };
 
 static int abis_nm_download_req(struct gsm_bts *bts, uint16_t ref)
 {
-    uint8_t *data = download_req;
-    int len_data = sizeof(download_req);
-    
-    return abis_nm_send(bts, NOKIA_MSG_START_DOWNLOAD_REQ, ref, data, len_data);
+	uint8_t *data = download_req;
+	int len_data = sizeof(download_req);
+
+	return abis_nm_send(bts, NOKIA_MSG_START_DOWNLOAD_REQ, ref, data,
+			    len_data);
 }
 
 /* TODO: put in a separate file ? */
 
 static uint8_t ack[] = {
-  0x5F, 0x23, 0x01, 
-  /* ID = 0x23 (Ack-Nack) */
-  /* length = 1 */
-  /* [3] */
-  0x01, 
+	0x5F, 0x23, 0x01,
+	/* ID = 0x23 (Ack-Nack) */
+	/* length = 1 */
+	/* [3] */
+	0x01,
 };
 
 static int abis_nm_ack(struct gsm_bts *bts, uint16_t ref)
 {
-    uint8_t *data = ack;
-    int len_data = sizeof(ack);
-    
-    return abis_nm_send(bts, NOKIA_MSG_ACK, ref, data, len_data);
+	uint8_t *data = ack;
+	int len_data = sizeof(ack);
+
+	return abis_nm_send(bts, NOKIA_MSG_ACK, ref, data, len_data);
 }
 
 /* TODO: put in a separate file ? */
 
 static uint8_t reset[] = {
-  0x5F, 0x40, 0x04, 
-  /* ID = 0x40 (Object identity) */
-  /* length = 4 */
-  /* [3] */
-  0x00, 0x01, 0xFF, 0xFF, 
+	0x5F, 0x40, 0x04,
+	/* ID = 0x40 (Object identity) */
+	/* length = 4 */
+	/* [3] */
+	0x00, 0x01, 0xFF, 0xFF,
 };
 
 static int abis_nm_reset(struct gsm_bts *bts, uint16_t ref)
 {
-    uint8_t *data = reset;
-    int len_data = sizeof(reset);
-    
-    return abis_nm_send(bts, NOKIA_MSG_RESET_REQ, ref, data, len_data);
+	uint8_t *data = reset;
+	int len_data = sizeof(reset);
+
+	return abis_nm_send(bts, NOKIA_MSG_RESET_REQ, ref, data, len_data);
 }
 
 /* TODO: put in a separate file ? */
 
-static int abis_nm_send_multi_segments(struct gsm_bts *bts, uint8_t msg_type, uint16_t ref, uint8_t *data, int len)
+static int abis_nm_send_multi_segments(struct gsm_bts *bts, uint8_t msg_type,
+				       uint16_t ref, uint8_t * data, int len)
 {
-    int len_remain, len_to_send, max_send;
-    int seq = 0;
-    int ret;
-        
-    len_remain = len;
-    
-    while(len_remain) { 
-        struct abis_om_hdr *oh;
-        struct abis_om_nokia_hdr *noh;
-        struct msgb *msg = nm_msgb_alloc();
-        
-        if(seq == 0)
-            max_send = 256 - sizeof(struct abis_om_nokia_hdr);
-        else
-            max_send = 256;
-            
-        if(len_remain > max_send) {
-            len_to_send = max_send;
-            
-            if(seq == 0) {
-                /* first segment */
-                oh = (struct abis_om_hdr *) msgb_put(msg, ABIS_OM_NOKIA_HDR_SIZE + len_to_send);
-        
-                oh->mdisc = ABIS_OM_MDISC_FOM;
-                oh->placement = ABIS_OM_PLACEMENT_FIRST; /* first segment of multi-segment message */
-                oh->sequence = seq;
-                oh->length = 0; /* 256 bytes */
-            
-                noh = (struct abis_om_nokia_hdr *)oh->data; 
-    
-                noh->msg_type = msg_type;
-                noh->spare = 0;
-                noh->reference = htons(ref);
-                memcpy(noh->data, data, len_to_send);
-            } else {
-                /* segment in between */
-                oh = (struct abis_om_hdr *) msgb_put(msg, sizeof(struct abis_om_hdr) + len_to_send);
-        
-                oh->mdisc = ABIS_OM_MDISC_FOM;
-                oh->placement = ABIS_OM_PLACEMENT_MIDDLE; /* segment of multi-segment message */
-                oh->sequence = seq;
-                oh->length = 0; /* 256 bytes */
-            
-                memcpy(oh->data, data, len_to_send);
-            }
-        }
-        else {
-        
-            len_to_send = len_remain;
-        
-            /* check if message fits in a single segment */
-            
-            if(seq == 0)
-                return abis_nm_send(bts, msg_type, ref, data, len_to_send);
-                    
-            /* last segment */
-            
-            oh = (struct abis_om_hdr *) msgb_put(msg, sizeof(struct abis_om_hdr) + len_to_send);
-        
-            oh->mdisc = ABIS_OM_MDISC_FOM;
-            oh->placement = ABIS_OM_PLACEMENT_LAST; /* last segment of multi-segment message */
-            oh->sequence = seq;
-            oh->length = len_to_send;
-            
-            memcpy(oh->data, data, len_to_send);
-        }
-    
-        DEBUGPC(DNM, "Sending multi-segment %d\n", seq);
+	int len_remain, len_to_send, max_send;
+	int seq = 0;
+	int ret;
 
-        ret = abis_nm_sendmsg(bts, msg);
-        if(ret < 0)
-            return ret;
-        
-        abis_nm_queue_send_next(bts);
-            
-        /* next segment */  
-        len_remain -= len_to_send;
-        data += len_to_send;
-        seq++;
-    }
-    return ret;
+	len_remain = len;
+
+	while (len_remain) {
+		struct abis_om_hdr *oh;
+		struct abis_om_nokia_hdr *noh;
+		struct msgb *msg = nm_msgb_alloc();
+
+		if (seq == 0)
+			max_send = 256 - sizeof(struct abis_om_nokia_hdr);
+		else
+			max_send = 256;
+
+		if (len_remain > max_send) {
+			len_to_send = max_send;
+
+			if (seq == 0) {
+				/* first segment */
+				oh = (struct abis_om_hdr *)msgb_put(msg,
+								    ABIS_OM_NOKIA_HDR_SIZE
+								    +
+								    len_to_send);
+
+				oh->mdisc = ABIS_OM_MDISC_FOM;
+				oh->placement = ABIS_OM_PLACEMENT_FIRST;	/* first segment of multi-segment message */
+				oh->sequence = seq;
+				oh->length = 0;	/* 256 bytes */
+
+				noh = (struct abis_om_nokia_hdr *)oh->data;
+
+				noh->msg_type = msg_type;
+				noh->spare = 0;
+				noh->reference = htons(ref);
+				memcpy(noh->data, data, len_to_send);
+			} else {
+				/* segment in between */
+				oh = (struct abis_om_hdr *)msgb_put(msg,
+								    sizeof
+								    (struct
+								     abis_om_hdr)
+								    +
+								    len_to_send);
+
+				oh->mdisc = ABIS_OM_MDISC_FOM;
+				oh->placement = ABIS_OM_PLACEMENT_MIDDLE;	/* segment of multi-segment message */
+				oh->sequence = seq;
+				oh->length = 0;	/* 256 bytes */
+
+				memcpy(oh->data, data, len_to_send);
+			}
+		} else {
+
+			len_to_send = len_remain;
+
+			/* check if message fits in a single segment */
+
+			if (seq == 0)
+				return abis_nm_send(bts, msg_type, ref, data,
+						    len_to_send);
+
+			/* last segment */
+
+			oh = (struct abis_om_hdr *)msgb_put(msg,
+							    sizeof(struct
+								   abis_om_hdr)
+							    + len_to_send);
+
+			oh->mdisc = ABIS_OM_MDISC_FOM;
+			oh->placement = ABIS_OM_PLACEMENT_LAST;	/* last segment of multi-segment message */
+			oh->sequence = seq;
+			oh->length = len_to_send;
+
+			memcpy(oh->data, data, len_to_send);
+		}
+
+		DEBUGPC(DNM, "Sending multi-segment %d\n", seq);
+
+		ret = abis_nm_sendmsg(bts, msg);
+		if (ret < 0)
+			return ret;
+
+		abis_nm_queue_send_next(bts);
+
+		/* next segment */
+		len_remain -= len_to_send;
+		data += len_to_send;
+		seq++;
+	}
+	return ret;
 }
 
 /* TODO: put in a separate file ? */
 
 static int abis_nm_send_config(struct gsm_bts *bts, uint8_t bts_type)
 {
-    struct gsm_bts_trx *trx;        
-    uint8_t config[2048]; /* TODO: might be too small if lots of TRX are used */
-    int len = 0;
-    int idx = 0;
-    int ret;
-    int hopping = 0;
-    int need_hopping = 0;
-        
-    memset(config, 0, sizeof(config));
-        
-    llist_for_each_entry(trx, &bts->trx_list, list)
-    {
-#if 0 /* debugging */   
-        printf("TRX\n");
-        printf("  arfcn: %d\n", trx->arfcn);
-        printf("  bsic: %d\n", trx->bts->bsic);
-        uint8_t ca[20];
-        memset(ca, 0xFF, sizeof(ca));
-        ret = generate_cell_chan_list(ca, trx->bts);
-        printf("  ca (%d): %s\n", ret, osmo_hexdump(ca, sizeof(ca)));                                    
-        int i;
-        for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
-            struct gsm_bts_trx_ts *ts = &trx->ts[i];
-                
-            printf("  pchan %d: %d\n", i, ts->pchan);
-        }           
-#endif          
-        ret = make_fu_config(trx, idx + 1, config + len, &hopping);
-        need_hopping |= hopping;
-        len += ret;
-            
-        idx++;
-    }
-        
-    ret = make_bts_config(bts_type, idx, config + len, need_hopping);
-    len += ret;
-        
-#if 0 /* debugging */   
-    dump_elements(config, len); 
+	struct gsm_bts_trx *trx;
+	uint8_t config[2048];	/* TODO: might be too small if lots of TRX are used */
+	int len = 0;
+	int idx = 0;
+	int ret;
+	int hopping = 0;
+	int need_hopping = 0;
+
+	memset(config, 0, sizeof(config));
+
+	llist_for_each_entry(trx, &bts->trx_list, list) {
+#if 0				/* debugging */
+		printf("TRX\n");
+		printf("  arfcn: %d\n", trx->arfcn);
+		printf("  bsic: %d\n", trx->bts->bsic);
+		uint8_t ca[20];
+		memset(ca, 0xFF, sizeof(ca));
+		ret = generate_cell_chan_list(ca, trx->bts);
+		printf("  ca (%d): %s\n", ret, osmo_hexdump(ca, sizeof(ca)));
+		int i;
+		for (i = 0; i < ARRAY_SIZE(trx->ts); i++) {
+			struct gsm_bts_trx_ts *ts = &trx->ts[i];
+
+			printf("  pchan %d: %d\n", i, ts->pchan);
+		}
 #endif
-    
-    return abis_nm_send_multi_segments(bts, NOKIA_MSG_CONF_DATA, 1, config, len);
+		ret = make_fu_config(trx, idx + 1, config + len, &hopping);
+		need_hopping |= hopping;
+		len += ret;
+
+		idx++;
+	}
+
+	ret = make_bts_config(bts_type, idx, config + len, need_hopping);
+	len += ret;
+
+#if 0				/* debugging */
+	dump_elements(config, len);
+#endif
+
+	return abis_nm_send_multi_segments(bts, NOKIA_MSG_CONF_DATA, 1, config,
+					   len);
 }
 
 #define GET_NEXT_BYTE if(idx >= len) return 0; \
-                        ub = data[idx++]; 
+                        ub = data[idx++];
 
-static int find_element(uint8_t *data, int len, uint16_t id, uint8_t *value, int max_value)
-{   
-    uint8_t ub;
-    int idx = 0;
-    int found = 0;
-    int constructed;
-    uint16_t id_value;
-        
-    for(;;) {   
-    
-        GET_NEXT_BYTE;
-        
-        /* encoding bit, construced means that other elements are contained */
-        constructed = ((ub & 0x20) ? 1 : 0);
-        
-        if((ub & 0x1F) == 0x1F) {
-            /* fixed pattern, ID follows */
-            GET_NEXT_BYTE; /* ID */
-            id_value = ub & 0x7F;
-            if(ub & 0x80) { 
-                /* extension bit */
-                GET_NEXT_BYTE; /* ID low part */
-                id_value = (id_value << 7) | (ub & 0x7F);
-            }
-            if(id_value == id)
-                found = 1;
-        }
-        else {
-            id_value = (ub & 0x3F);
-            if(id_value == id)
-                found = 1;
-        }
-        
-        GET_NEXT_BYTE; /* length */
-        
-        if(found) {
-            /* get data */
-            uint8_t n = ub;
-            uint8_t i;
-            for(i = 0; i < n; i++) {
-                GET_NEXT_BYTE;
-                if(max_value <= 0)
-                    return -1; /* buffer too small */
-                *value = ub;
-                value++;
-                max_value--;
-            }
-            return n; /* length */
-        }
-        else {
-            /* skip data */
-            uint8_t n = ub;
-            uint8_t i;
-            for(i = 0; i < n; i++) {
-                GET_NEXT_BYTE;
-            }
-        }
-    }
-    return 0; /* not found */
+static int find_element(uint8_t * data, int len, uint16_t id, uint8_t * value,
+			int max_value)
+{
+	uint8_t ub;
+	int idx = 0;
+	int found = 0;
+	int constructed;
+	uint16_t id_value;
+
+	for (;;) {
+
+		GET_NEXT_BYTE;
+
+		/* encoding bit, construced means that other elements are contained */
+		constructed = ((ub & 0x20) ? 1 : 0);
+
+		if ((ub & 0x1F) == 0x1F) {
+			/* fixed pattern, ID follows */
+			GET_NEXT_BYTE;	/* ID */
+			id_value = ub & 0x7F;
+			if (ub & 0x80) {
+				/* extension bit */
+				GET_NEXT_BYTE;	/* ID low part */
+				id_value = (id_value << 7) | (ub & 0x7F);
+			}
+			if (id_value == id)
+				found = 1;
+		} else {
+			id_value = (ub & 0x3F);
+			if (id_value == id)
+				found = 1;
+		}
+
+		GET_NEXT_BYTE;	/* length */
+
+		if (found) {
+			/* get data */
+			uint8_t n = ub;
+			uint8_t i;
+			for (i = 0; i < n; i++) {
+				GET_NEXT_BYTE;
+				if (max_value <= 0)
+					return -1;	/* buffer too small */
+				*value = ub;
+				value++;
+				max_value--;
+			}
+			return n;	/* length */
+		} else {
+			/* skip data */
+			uint8_t n = ub;
+			uint8_t i;
+			for (i = 0; i < n; i++) {
+				GET_NEXT_BYTE;
+			}
+		}
+	}
+	return 0;		/* not found */
 }
 
-static int dump_elements(uint8_t *data, int len)
-{   
-    uint8_t ub;
-    int idx = 0;
-    int constructed;
-    uint16_t id_value;
-    static char indent[100] = ""; /* TODO: move static to BTS context */
-        
-    for(;;) {   
-    
-        GET_NEXT_BYTE;
-        
-        /* encoding bit, construced means that other elements are contained */
-        constructed = ((ub & 0x20) ? 1 : 0);
-        
-        if((ub & 0x1F) == 0x1F) {
-            /* fixed pattern, ID follows */
-            GET_NEXT_BYTE; /* ID */
-            id_value = ub & 0x7F;
-            if(ub & 0x80) { 
-                /* extension bit */
-                GET_NEXT_BYTE; /* ID low part */
-                id_value = (id_value << 7) | (ub & 0x7F);
-            }
-            
-        }
-        else {
-            id_value = (ub & 0x3F);
-        }
-        
-        GET_NEXT_BYTE; /* length */
-        
-        printf("%s--ID = 0x%02X (%s) %s\n", indent, id_value, get_element_name_string(id_value), constructed ? "** constructed **" : "");
-        printf("%s  length = %d\n", indent, ub);        
-        printf("%s  %s\n", indent, osmo_hexdump(data + idx, ub));
+static int dump_elements(uint8_t * data, int len)
+{
+	uint8_t ub;
+	int idx = 0;
+	int constructed;
+	uint16_t id_value;
+	static char indent[100] = "";	/* TODO: move static to BTS context */
 
-        if(constructed) {
-            int indent_len = strlen(indent);
-            strcat(indent, "   ");          
-            
-            dump_elements(data + idx, ub);          
-            
-            indent[indent_len] = 0;
-        }
-        /* skip data */
-        uint8_t n = ub;
-        uint8_t i;
-        for(i = 0; i < n; i++) {
-            GET_NEXT_BYTE;
-        }
-    }
-    return 0;
+	for (;;) {
+
+		GET_NEXT_BYTE;
+
+		/* encoding bit, construced means that other elements are contained */
+		constructed = ((ub & 0x20) ? 1 : 0);
+
+		if ((ub & 0x1F) == 0x1F) {
+			/* fixed pattern, ID follows */
+			GET_NEXT_BYTE;	/* ID */
+			id_value = ub & 0x7F;
+			if (ub & 0x80) {
+				/* extension bit */
+				GET_NEXT_BYTE;	/* ID low part */
+				id_value = (id_value << 7) | (ub & 0x7F);
+			}
+
+		} else {
+			id_value = (ub & 0x3F);
+		}
+
+		GET_NEXT_BYTE;	/* length */
+
+		printf("%s--ID = 0x%02X (%s) %s\n", indent, id_value,
+		       get_element_name_string(id_value),
+		       constructed ? "** constructed **" : "");
+		printf("%s  length = %d\n", indent, ub);
+		printf("%s  %s\n", indent, osmo_hexdump(data + idx, ub));
+
+		if (constructed) {
+			int indent_len = strlen(indent);
+			strcat(indent, "   ");
+
+			dump_elements(data + idx, ub);
+
+			indent[indent_len] = 0;
+		}
+		/* skip data */
+		uint8_t n = ub;
+		uint8_t i;
+		for (i = 0; i < n; i++) {
+			GET_NEXT_BYTE;
+		}
+	}
+	return 0;
 }
 
 /* TODO: put in a separate file ? */
@@ -1652,19 +1663,19 @@
 
 static void abis_nm_queue_send_next(struct gsm_bts *bts)
 {
-    int wait = 0;
-    struct msgb *msg;
-    /* the queue is empty */
-    while (!llist_empty(&bts->abis_queue)) {
-        msg = msgb_dequeue(&bts->abis_queue);
-        wait = OBSC_NM_W_ACK_CB(msg);
-        _abis_nm_sendmsg(msg, 0);
+	int wait = 0;
+	struct msgb *msg;
+	/* the queue is empty */
+	while (!llist_empty(&bts->abis_queue)) {
+		msg = msgb_dequeue(&bts->abis_queue);
+		wait = OBSC_NM_W_ACK_CB(msg);
+		_abis_nm_sendmsg(msg, 0);
 
-        if (wait)
-            break;
-    }
+		if (wait)
+			break;
+	}
 
-    bts->abis_nm_pend = wait;
+	bts->abis_nm_pend = wait;
 }
 
 /* TODO: put in a separate file ? */
@@ -1673,22 +1684,22 @@
 
 static void reset_timer_cb(void *_bts)
 {
-    struct gsm_bts *bts = _bts;
-    struct gsm_e1_subslot *e1_link = &bts->oml_e1_link;
-    struct e1inp_line *line;
-    
-    wait_reset = 0;
-    
-    /* OML link */
-    line = e1inp_line_get(e1_link->e1_nr);
-    if (!line) {
-        LOGP(DINP, LOGL_ERROR, "BTS %u OML link referring to "
-             "non-existing E1 line %u\n", bts->nr, e1_link->e1_nr);
-        return;
-    }
-    
-    start_sabm_in_line(line, 0, -1); /* stop all first */
-    start_sabm_in_line(line, 1, SAPI_OML); /* start only OML */
+	struct gsm_bts *bts = _bts;
+	struct gsm_e1_subslot *e1_link = &bts->oml_e1_link;
+	struct e1inp_line *line;
+
+	wait_reset = 0;
+
+	/* OML link */
+	line = e1inp_line_get(e1_link->e1_nr);
+	if (!line) {
+		LOGP(DINP, LOGL_ERROR, "BTS %u OML link referring to "
+		     "non-existing E1 line %u\n", bts->nr, e1_link->e1_nr);
+		return;
+	}
+
+	start_sabm_in_line(line, 0, -1);	/* stop all first */
+	start_sabm_in_line(line, 1, SAPI_OML);	/* start only OML */
 }
 
 /* TODO: put in a separate file ? */
@@ -1716,234 +1727,256 @@
 
 static int abis_nm_rcvmsg_fom(struct msgb *mb)
 {
-    struct gsm_bts *bts = mb->trx->bts;
-    struct abis_om_hdr *oh = msgb_l2(mb);
-    struct abis_om_nokia_hdr *noh = msgb_l3(mb);
-    uint8_t mt = noh->msg_type;
-    int ret = 0;
-    uint16_t ref = ntohs(noh->reference);
-    /* TODO: move statics to BTS context */
-    static int conf = 0;
-    static uint8_t bts_type = 0xFF;
-    uint8_t info[256];
-    uint8_t ack = 0xFF;
-    uint8_t severity = 0xFF;
-    int str_len;
-    int len_data;
+	struct gsm_bts *bts = mb->trx->bts;
+	struct abis_om_hdr *oh = msgb_l2(mb);
+	struct abis_om_nokia_hdr *noh = msgb_l3(mb);
+	uint8_t mt = noh->msg_type;
+	int ret = 0;
+	uint16_t ref = ntohs(noh->reference);
+	/* TODO: move statics to BTS context */
+	static int conf = 0;
+	static uint8_t bts_type = 0xFF;
+	uint8_t info[256];
+	uint8_t ack = 0xFF;
+	uint8_t severity = 0xFF;
+	int str_len;
+	int len_data;
 
-    if(wait_reset) {
-        LOGP(DNM, LOGL_INFO, "Ignore message while waiting for reset\n");
-        return ret;
-    }
+	if (wait_reset) {
+		LOGP(DNM, LOGL_INFO,
+		     "Ignore message while waiting for reset\n");
+		return ret;
+	}
 
-    if(oh->length < sizeof(struct abis_om_nokia_hdr)) { 
-        LOGP(DNM, LOGL_ERROR, "Message too short\n");
-        return -EINVAL;
-    }
-    
-    len_data = oh->length - sizeof(struct abis_om_nokia_hdr);
-    LOGP(DNM, LOGL_INFO, "(0x%02X) %s\n", mt, get_msg_type_name_string(mt));
-#if 0 /* debugging */   
-    dump_elements(noh->data, len_data); 
+	if (oh->length < sizeof(struct abis_om_nokia_hdr)) {
+		LOGP(DNM, LOGL_ERROR, "Message too short\n");
+		return -EINVAL;
+	}
+
+	len_data = oh->length - sizeof(struct abis_om_nokia_hdr);
+	LOGP(DNM, LOGL_INFO, "(0x%02X) %s\n", mt, get_msg_type_name_string(mt));
+#if 0				/* debugging */
+	dump_elements(noh->data, len_data);
 #endif
-    
-    switch (mt) {
-    case NOKIA_MSG_OMU_STARTED:
-        if(find_element(noh->data, len_data, NOKIA_EI_BTS_TYPE, &bts_type, sizeof(uint8_t)) == sizeof(uint8_t))
-            LOGP(DNM, LOGL_INFO, "BTS type = %d (%s)\n", bts_type, get_bts_type_string(bts_type));
-        else
-            LOGP(DNM, LOGL_ERROR, "BTS type not found\n");
-        /* send START_DOWNLOAD_REQ */
-        abis_nm_download_req(bts, ref);
-        break;
-    case NOKIA_MSG_MF_REQ:
-        break;
-    case NOKIA_MSG_CONF_REQ:
-        /* send ACK */
-        abis_nm_ack(bts, ref);
-        abis_nm_queue_send_next(bts);
-        /* send CONF_DATA */
-        abis_nm_send_config(bts, bts_type);
-        conf = 1;
-        break;
-    case NOKIA_MSG_ACK:
-        if(find_element(noh->data, len_data, NOKIA_EI_ACK, &ack, sizeof(uint8_t)) == sizeof(uint8_t)) {
-            LOGP(DNM, LOGL_INFO, "ACK = %d\n", ack);
-            if(ack != 1) {
-                LOGP(DNM, LOGL_ERROR, "No ACK received (%d)\n", ack);
-                /* TODO: properly handle failures (NACK) */                     
-            }
-        }
-        else
-            LOGP(DNM, LOGL_ERROR, "ACK not found\n");
 
-        /* TODO: the assumption for the following is that no NACK was received */
-            
-        /* ACK for reset message ? */
-        if(do_reset != 0) {
-            do_reset = 0;
-            
-            /* 
-              TODO: For the InSite processing the received data is 
-              blocked in the driver during reset.
-              Otherwise the LAPD module might assert because the InSite
-              sends garbage on the E1 line during reset.
-              This is done by looking at "wait_reset" in the driver
-              (function handle_ts1_read()) and ignoring the received data.
-              It seems to be necessary for the MetroSite too.
-            */
-            wait_reset = 1;
-            
-            reset_timer.cb = &reset_timer_cb;
-            reset_timer.data = bts;
-            osmo_timer_schedule(&reset_timer, RESET_INTERVAL);
-            
-            struct gsm_e1_subslot *e1_link = &bts->oml_e1_link;
-            struct e1inp_line *line;
-            /* OML link */
-            line = e1inp_line_get(e1_link->e1_nr);
-            if (!line) {
-                LOGP(DINP, LOGL_ERROR, "BTS %u OML link referring to "
-                     "non-existing E1 line %u\n", bts->nr, e1_link->e1_nr);
-                return -ENOMEM;
-            }
-    
-            start_sabm_in_line(line, 0, -1); /* stop all first */           
-        }
-        
-        /* ACK for CONF DATA message ? */
-        if(conf != 0) {         
-            /* start TRX  (RSL link) */
-            
-            struct gsm_e1_subslot *e1_link = &mb->trx->rsl_e1_link;
-            struct e1inp_line *line;
-            
-            conf = 0;
-            
-            /* RSL Link */
-            line = e1inp_line_get(e1_link->e1_nr);
-            if (!line) {
-                LOGP(DINP, LOGL_ERROR, "TRX (%u/%u) RSL link referring "
-                     "to non-existing E1 line %u\n", mb->trx->bts->nr,
-                     mb->trx->nr, e1_link->e1_nr);
-                return -ENOMEM;
-            }            
-            /* start TRX */         
-            start_sabm_in_line(line, 1, SAPI_RSL); /* start only RSL */
-        }
-        break;
-    case NOKIA_MSG_STATE_CHANGED:
-        /* send ACK */
-        abis_nm_ack(bts, ref);
-        break;
-    case NOKIA_MSG_CONF_COMPLETE:
-        /* send ACK */
-        abis_nm_ack(bts, ref);
-        break;
-    case NOKIA_MSG_BLOCK_CTRL_REQ: /* seems to be send when something goes wrong !? */
-        /* send ACK (do we have to send an ACK ?) */
-        abis_nm_ack(bts, ref);
-        break;
-    case NOKIA_MSG_ALARM:
-        find_element(noh->data, len_data, NOKIA_EI_SEVERITY, &severity, sizeof(severity));
-        /* TODO: there might be alarms with both elements set */
-        str_len = find_element(noh->data, len_data, NOKIA_EI_ADD_INFO, info, sizeof(info));
-        if(str_len > 0) {
-            info[str_len] = 0;
-            LOGP(DNM, LOGL_INFO, "ALARM Severity %s (%d) : %s\n", get_severity_string(severity), severity, info);
-        } else { /* nothing found, try details */       
-            str_len = find_element(noh->data, len_data, NOKIA_EI_ALARM_DETAIL, info, sizeof(info));
-            if(str_len > 0) {
-                uint16_t code;
-                info[str_len] = 0;              
-                code = (info[0] << 8) + info[1];
-                LOGP(DNM, LOGL_INFO, "ALARM Severity %s (%d), code 0x%X : %s\n", get_severity_string(severity), severity, code, info + 2);
-            }
-        }
-        /* send ACK */
-        abis_nm_ack(bts, ref);
-        break;
-    }
+	switch (mt) {
+	case NOKIA_MSG_OMU_STARTED:
+		if (find_element
+		    (noh->data, len_data, NOKIA_EI_BTS_TYPE, &bts_type,
+		     sizeof(uint8_t)) == sizeof(uint8_t))
+			LOGP(DNM, LOGL_INFO, "BTS type = %d (%s)\n", bts_type,
+			     get_bts_type_string(bts_type));
+		else
+			LOGP(DNM, LOGL_ERROR, "BTS type not found\n");
+		/* send START_DOWNLOAD_REQ */
+		abis_nm_download_req(bts, ref);
+		break;
+	case NOKIA_MSG_MF_REQ:
+		break;
+	case NOKIA_MSG_CONF_REQ:
+		/* send ACK */
+		abis_nm_ack(bts, ref);
+		abis_nm_queue_send_next(bts);
+		/* send CONF_DATA */
+		abis_nm_send_config(bts, bts_type);
+		conf = 1;
+		break;
+	case NOKIA_MSG_ACK:
+		if (find_element
+		    (noh->data, len_data, NOKIA_EI_ACK, &ack,
+		     sizeof(uint8_t)) == sizeof(uint8_t)) {
+			LOGP(DNM, LOGL_INFO, "ACK = %d\n", ack);
+			if (ack != 1) {
+				LOGP(DNM, LOGL_ERROR, "No ACK received (%d)\n",
+				     ack);
+				/* TODO: properly handle failures (NACK) */
+			}
+		} else
+			LOGP(DNM, LOGL_ERROR, "ACK not found\n");
 
-    abis_nm_queue_send_next(bts);
-    
-    return ret;
+		/* TODO: the assumption for the following is that no NACK was received */
+
+		/* ACK for reset message ? */
+		if (do_reset != 0) {
+			do_reset = 0;
+
+			/* 
+			   TODO: For the InSite processing the received data is 
+			   blocked in the driver during reset.
+			   Otherwise the LAPD module might assert because the InSite
+			   sends garbage on the E1 line during reset.
+			   This is done by looking at "wait_reset" in the driver
+			   (function handle_ts1_read()) and ignoring the received data.
+			   It seems to be necessary for the MetroSite too.
+			 */
+			wait_reset = 1;
+
+			reset_timer.cb = &reset_timer_cb;
+			reset_timer.data = bts;
+			osmo_timer_schedule(&reset_timer, RESET_INTERVAL);
+
+			struct gsm_e1_subslot *e1_link = &bts->oml_e1_link;
+			struct e1inp_line *line;
+			/* OML link */
+			line = e1inp_line_get(e1_link->e1_nr);
+			if (!line) {
+				LOGP(DINP, LOGL_ERROR,
+				     "BTS %u OML link referring to "
+				     "non-existing E1 line %u\n", bts->nr,
+				     e1_link->e1_nr);
+				return -ENOMEM;
+			}
+
+			start_sabm_in_line(line, 0, -1);	/* stop all first */
+		}
+
+		/* ACK for CONF DATA message ? */
+		if (conf != 0) {
+			/* start TRX  (RSL link) */
+
+			struct gsm_e1_subslot *e1_link = &mb->trx->rsl_e1_link;
+			struct e1inp_line *line;
+
+			conf = 0;
+
+			/* RSL Link */
+			line = e1inp_line_get(e1_link->e1_nr);
+			if (!line) {
+				LOGP(DINP, LOGL_ERROR,
+				     "TRX (%u/%u) RSL link referring "
+				     "to non-existing E1 line %u\n",
+				     mb->trx->bts->nr, mb->trx->nr,
+				     e1_link->e1_nr);
+				return -ENOMEM;
+			}
+			/* start TRX */
+			start_sabm_in_line(line, 1, SAPI_RSL);	/* start only RSL */
+		}
+		break;
+	case NOKIA_MSG_STATE_CHANGED:
+		/* send ACK */
+		abis_nm_ack(bts, ref);
+		break;
+	case NOKIA_MSG_CONF_COMPLETE:
+		/* send ACK */
+		abis_nm_ack(bts, ref);
+		break;
+	case NOKIA_MSG_BLOCK_CTRL_REQ:	/* seems to be send when something goes wrong !? */
+		/* send ACK (do we have to send an ACK ?) */
+		abis_nm_ack(bts, ref);
+		break;
+	case NOKIA_MSG_ALARM:
+		find_element(noh->data, len_data, NOKIA_EI_SEVERITY, &severity,
+			     sizeof(severity));
+		/* TODO: there might be alarms with both elements set */
+		str_len =
+		    find_element(noh->data, len_data, NOKIA_EI_ADD_INFO, info,
+				 sizeof(info));
+		if (str_len > 0) {
+			info[str_len] = 0;
+			LOGP(DNM, LOGL_INFO, "ALARM Severity %s (%d) : %s\n",
+			     get_severity_string(severity), severity, info);
+		} else {	/* nothing found, try details */
+			str_len =
+			    find_element(noh->data, len_data,
+					 NOKIA_EI_ALARM_DETAIL, info,
+					 sizeof(info));
+			if (str_len > 0) {
+				uint16_t code;
+				info[str_len] = 0;
+				code = (info[0] << 8) + info[1];
+				LOGP(DNM, LOGL_INFO,
+				     "ALARM Severity %s (%d), code 0x%X : %s\n",
+				     get_severity_string(severity), severity,
+				     code, info + 2);
+			}
+		}
+		/* send ACK */
+		abis_nm_ack(bts, ref);
+		break;
+	}
+
+	abis_nm_queue_send_next(bts);
+
+	return ret;
 }
 
 /* TODO: put in a separate file ? */
 
 int abis_nokia_rcvmsg(struct msgb *msg)
 {
-    struct abis_om_hdr *oh = msgb_l2(msg);
-    int rc = 0;
+	struct abis_om_hdr *oh = msgb_l2(msg);
+	int rc = 0;
 
-    /* Various consistency checks */
-    if (oh->placement != ABIS_OM_PLACEMENT_ONLY) {
-        LOGP(DNM, LOGL_ERROR, "ABIS OML placement 0x%x not supported\n",
-            oh->placement);
-        if (oh->placement != ABIS_OM_PLACEMENT_FIRST)
-            return -EINVAL;
-    }
-    if (oh->sequence != 0) {
-        LOGP(DNM, LOGL_ERROR, "ABIS OML sequence 0x%x != 0x00\n",
-            oh->sequence);
-        return -EINVAL;
-    }
-    msg->l3h = (unsigned char *)oh + sizeof(*oh);
+	/* Various consistency checks */
+	if (oh->placement != ABIS_OM_PLACEMENT_ONLY) {
+		LOGP(DNM, LOGL_ERROR, "ABIS OML placement 0x%x not supported\n",
+		     oh->placement);
+		if (oh->placement != ABIS_OM_PLACEMENT_FIRST)
+			return -EINVAL;
+	}
+	if (oh->sequence != 0) {
+		LOGP(DNM, LOGL_ERROR, "ABIS OML sequence 0x%x != 0x00\n",
+		     oh->sequence);
+		return -EINVAL;
+	}
+	msg->l3h = (unsigned char *)oh + sizeof(*oh);
 
-    switch (oh->mdisc) {
-    case ABIS_OM_MDISC_FOM:
-        LOGP(DNM, LOGL_INFO, "ABIS_OM_MDISC_FOM\n");
-        rc = abis_nm_rcvmsg_fom(msg);
-        break;
-    case ABIS_OM_MDISC_MANUF:
-        LOGP(DNM, LOGL_INFO, "ABIS_OM_MDISC_MANUF\n");
-        break;
-    case ABIS_OM_MDISC_MMI:
-    case ABIS_OM_MDISC_TRAU:
-        LOGP(DNM, LOGL_ERROR, "unimplemented ABIS OML message discriminator 0x%x\n",
-            oh->mdisc);
-        break;
-    default:
-        LOGP(DNM, LOGL_ERROR, "unknown ABIS OML message discriminator 0x%x\n",
-            oh->mdisc);
-        return -EINVAL;
-    }
+	switch (oh->mdisc) {
+	case ABIS_OM_MDISC_FOM:
+		LOGP(DNM, LOGL_INFO, "ABIS_OM_MDISC_FOM\n");
+		rc = abis_nm_rcvmsg_fom(msg);
+		break;
+	case ABIS_OM_MDISC_MANUF:
+		LOGP(DNM, LOGL_INFO, "ABIS_OM_MDISC_MANUF\n");
+		break;
+	case ABIS_OM_MDISC_MMI:
+	case ABIS_OM_MDISC_TRAU:
+		LOGP(DNM, LOGL_ERROR,
+		     "unimplemented ABIS OML message discriminator 0x%x\n",
+		     oh->mdisc);
+		break;
+	default:
+		LOGP(DNM, LOGL_ERROR,
+		     "unknown ABIS OML message discriminator 0x%x\n",
+		     oh->mdisc);
+		return -EINVAL;
+	}
 
-    msgb_free(msg);
-    return rc;
+	msgb_free(msg);
+	return rc;
 }
 
 static int bts_model_nokia_site_start(struct gsm_network *net);
 
 static struct gsm_bts_model model_nokia_site = {
-    .type = GSM_BTS_TYPE_NOKIA_SITE,
-    .name = "nokia_site",
-    .start = bts_model_nokia_site_start,
-    .oml_rcvmsg = &abis_nokia_rcvmsg
+	.type = GSM_BTS_TYPE_NOKIA_SITE,
+	.name = "nokia_site",
+	.start = bts_model_nokia_site_start,
+	.oml_rcvmsg = &abis_nokia_rcvmsg
 };
 
 static struct gsm_network *my_net;
 
 static int bts_model_nokia_site_start(struct gsm_network *net)
 {
-    model_nokia_site.features.data = &model_nokia_site._features_data[0];
-    model_nokia_site.features.data_len = sizeof(model_nokia_site._features_data);
+	model_nokia_site.features.data = &model_nokia_site._features_data[0];
+	model_nokia_site.features.data_len =
+	    sizeof(model_nokia_site._features_data);
 
-    gsm_btsmodel_set_feature(&model_nokia_site, BTS_FEAT_HOPPING);
-    gsm_btsmodel_set_feature(&model_nokia_site, BTS_FEAT_HSCSD);
+	gsm_btsmodel_set_feature(&model_nokia_site, BTS_FEAT_HOPPING);
+	gsm_btsmodel_set_feature(&model_nokia_site, BTS_FEAT_HSCSD);
 
-    osmo_signal_register_handler(SS_INPUT, inp_sig_cb, NULL);
-    osmo_signal_register_handler(SS_GLOBAL, gbl_sig_cb, NULL);
-    osmo_signal_register_handler(SS_NM, nm_sig_cb, NULL);
+	osmo_signal_register_handler(SS_INPUT, inp_sig_cb, NULL);
+	osmo_signal_register_handler(SS_GLOBAL, gbl_sig_cb, NULL);
+	osmo_signal_register_handler(SS_NM, nm_sig_cb, NULL);
 
-    my_net = net;
-    
-    return 0;
+	my_net = net;
+
+	return 0;
 }
 
 int bts_model_nokia_site_init(void)
 {
-    return gsm_bts_model_register(&model_nokia_site);
+	return gsm_bts_model_register(&model_nokia_site);
 }
-