[paging] Introduce a variable containing the free paging slots

Start with a large number of available slots. It is guranteed
that we will - at some point - get a paging load and will properly
update the counter and keep it updated.

diff --git a/include/openbsc/gsm_data.h b/include/openbsc/gsm_data.h
index c87b25d..006a8c0 100644
--- a/include/openbsc/gsm_data.h
+++ b/include/openbsc/gsm_data.h
@@ -204,6 +204,9 @@
 	struct gsm_paging_request *last_request;
 	struct gsm_bts *bts;
 
+	/* load */
+	u_int16_t available_slots;
+
 	/* tick timer */
 	struct timer_list paging_timer;
 };
diff --git a/include/openbsc/paging.h b/include/openbsc/paging.h
index 1260a9b..0e5a0d4 100644
--- a/include/openbsc/paging.h
+++ b/include/openbsc/paging.h
@@ -38,4 +38,7 @@
 /* stop paging requests */
 void paging_request_stop(struct gsm_bts *bts, struct gsm_subscriber *subscr);
 
+/* update paging load */
+void paging_update_buffer_space(struct gsm_bts *bts, u_int16_t);
+
 #endif
diff --git a/src/abis_rsl.c b/src/abis_rsl.c
index 1c78bf7..ad869f4db 100644
--- a/src/abis_rsl.c
+++ b/src/abis_rsl.c
@@ -32,6 +32,7 @@
 #include <openbsc/chan_alloc.h>
 #include <openbsc/debug.h>
 #include <openbsc/tlv.h>
+#include <openbsc/paging.h>
 
 #define RSL_ALLOC_SIZE		1024
 #define RSL_ALLOC_HEADROOM	128
@@ -673,6 +674,7 @@
 		pg_buf_space = rslh->data[1] << 8 | rslh->data[2];
 		DEBUGP(DRSL, "CCCH LOAD IND, free paging buffer space: %u\n",
 			pg_buf_space);
+		paging_update_buffer_space(msg->trx->bts, pg_buf_space);
 		break;
 	case RSL_IE_RACH_LOAD:
 		if (msg->data_len >= 7) {
diff --git a/src/paging.c b/src/paging.c
index 4826690..55f6d81 100644
--- a/src/paging.c
+++ b/src/paging.c
@@ -134,6 +134,9 @@
 	INIT_LLIST_HEAD(&bts->paging.pending_requests);
 	bts->paging.paging_timer.cb = paging_handle_pending_requests;
 	bts->paging.paging_timer.data = &bts->paging;
+
+	/* Large number, until we get a proper message */
+	bts->paging.available_slots = 0xffff;
 }
 
 static int paging_pending_request(struct gsm_bts_paging_state *bts,
@@ -181,3 +184,8 @@
 		}
 	}
 }
+
+void paging_update_buffer_space(struct gsm_bts *bts, u_int16_t free_slots)
+{
+	bts->paging.available_slots = free_slots;
+}