Prepare for BTS attribute reporting via OML

* use define for number of attributes instead of magic number
* add sub_model to gsm_bts struct
* expand number of BTS features
* mark attributes parameter to abis_nm_get_attr() as const

Change-Id: I7ecb0c4339530d3a8354a2f94b34063dda87e030
Related: OS#1614
diff --git a/openbsc/src/libbsc/abis_nm.c b/openbsc/src/libbsc/abis_nm.c
index db0dbd2..5212f6a 100644
--- a/openbsc/src/libbsc/abis_nm.c
+++ b/openbsc/src/libbsc/abis_nm.c
@@ -439,6 +439,7 @@
 	return res;
 }
 
+/* 3GPP TS 52.021 §6.2.5 */
 static int abis_nm_rx_sw_act_req(struct msgb *mb)
 {
 	struct abis_om_hdr *oh = msgb_l2(mb);
@@ -447,7 +448,7 @@
 	struct tlv_parsed tp;
 	const uint8_t *sw_config;
 	int ret, sw_config_len, len;
-	struct abis_nm_sw_desc sw_descr[5];
+	struct abis_nm_sw_desc sw_descr[MAX_BTS_ATTR];
 
 	abis_nm_debugp_foh(DNM, foh);
 
@@ -1441,10 +1442,9 @@
 }
 #endif
 
-/* Chapter 8.11.1 */
-int abis_nm_get_attr(struct gsm_bts *bts, uint8_t obj_class,
-			uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr,
-			uint8_t *attr, uint8_t attr_len)
+/* 3GPP TS 52.021 § 8.11.1 */
+int abis_nm_get_attr(struct gsm_bts *bts, uint8_t obj_class, uint8_t bts_nr, uint8_t trx_nr, uint8_t ts_nr,
+		     const uint8_t *attr, uint8_t attr_len)
 {
 	struct abis_om_hdr *oh;
 	struct msgb *msg = nm_msgb_alloc();