[GPRS] add data structures for OML of NSE,CELL,NSVCE

Supporting GPRS means we have a number of additional OML objects to
deal with.  We need to extend our gsm_bts structure to at least
include the nm_state for each of those objects.
diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h
index a493a69..d04b0c7 100644
--- a/openbsc/include/openbsc/gsm_data.h
+++ b/openbsc/include/openbsc/gsm_data.h
@@ -289,6 +289,12 @@
 	struct gsm_nm_state nm_state;
 };
 
+struct gsm_bts_gprs_nsvc {
+	struct gsm_bts *bts;
+	int id;
+	struct gsm_nm_state nm_state;
+};
+
 /* One BTS */
 struct gsm_bts {
 	/* list header in net->bts_list */
@@ -356,6 +362,17 @@
 			struct gsm_envabtse envabtse[4];
 		} bs11;
 	};
+
+	/* Not entirely sure how ip.access specific this is */
+	struct {
+		struct {
+			struct gsm_nm_state nm_state;
+		} nse;
+		struct {
+			struct gsm_nm_state nm_state;
+		} cell;
+		struct gsm_bts_gprs_nsvc nsvc[2];
+	} gprs;
 	
 	/* transceivers */
 	int num_trx;
diff --git a/openbsc/src/abis_nm.c b/openbsc/src/abis_nm.c
index 369eaf6..b5f10bd 100755
--- a/openbsc/src/abis_nm.c
+++ b/openbsc/src/abis_nm.c
@@ -656,6 +656,17 @@
 			return NULL;
 		nm_state = &bts->bs11.envabtse[obj_inst->trx_nr].nm_state;
 		break;
+	case NM_OC_GPRS_NSE:
+		nm_state = &bts->gprs.nse.nm_state;
+		break;
+	case NM_OC_GPRS_CELL:
+		nm_state = &bts->gprs.cell.nm_state;
+		break;
+	case NM_OC_GPRS_NSVC:
+		if (obj_inst->trx_nr > ARRAY_SIZE(bts->gprs.nsvc))
+			return NULL;
+		nm_state = &bts->gprs.nsvc[obj_inst->trx_nr].nm_state;
+		break;
 	}
 	return nm_state;
 }
@@ -695,6 +706,17 @@
 	case NM_OC_SITE_MANAGER:
 		obj = &bts->site_mgr;
 		break;
+	case NM_OC_GPRS_NSE:
+		obj = &bts->gprs.nse;
+		break;
+	case NM_OC_GPRS_CELL:
+		obj = &bts->gprs.cell;
+		break;
+	case NM_OC_GPRS_NSVC:
+		if (obj_inst->trx_nr > ARRAY_SIZE(bts->gprs.nsvc))
+			return NULL;
+		obj = &bts->gprs.nsvc[obj_inst->trx_nr];
+		break;
 	}
 	return obj;
 }
diff --git a/openbsc/src/gsm_data.c b/openbsc/src/gsm_data.c
index 6767c3f..de9f4b9 100644
--- a/openbsc/src/gsm_data.c
+++ b/openbsc/src/gsm_data.c
@@ -139,6 +139,7 @@
 			      u_int8_t tsc, u_int8_t bsic)
 {
 	struct gsm_bts *bts = talloc(net, struct gsm_bts);
+	int i;
 
 	if (!bts)
 		return NULL;
@@ -153,6 +154,11 @@
 	INIT_LLIST_HEAD(&bts->trx_list);
 	bts->ms_max_power = 15;	/* dBm */
 
+	for (i = 0; i < ARRAY_SIZE(bts->gprs.nsvc); i++) {
+		bts->gprs.nsvc[i].bts = bts;
+		bts->gprs.nsvc[i].id = i;
+	}
+
 	/* create our primary TRX */
 	bts->c0 = gsm_bts_trx_alloc(bts);
 	if (!bts->c0) {