diff options
-rw-r--r-- | include/openbsc/gsm_data.h | 3 | ||||
-rw-r--r-- | include/openbsc/paging.h | 3 | ||||
-rw-r--r-- | src/abis_rsl.c | 2 | ||||
-rw-r--r-- | src/paging.c | 8 |
4 files changed, 16 insertions, 0 deletions
diff --git a/include/openbsc/gsm_data.h b/include/openbsc/gsm_data.h index c87b25da1..006a8c0e4 100644 --- a/include/openbsc/gsm_data.h +++ b/include/openbsc/gsm_data.h @@ -204,6 +204,9 @@ struct gsm_bts_paging_state { 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 1260a9b34..0e5a0d447 100644 --- a/include/openbsc/paging.h +++ b/include/openbsc/paging.h @@ -38,4 +38,7 @@ void paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr, int type /* 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 1c78bf72c..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 @@ static int rsl_rx_ccch_load(struct msgb *msg) 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 482669052..55f6d810f 100644 --- a/src/paging.c +++ b/src/paging.c @@ -134,6 +134,9 @@ void paging_init(struct gsm_bts *bts) 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_request_stop(struct gsm_bts *bts, struct gsm_subscriber *subscr) } } } + +void paging_update_buffer_space(struct gsm_bts *bts, u_int16_t free_slots) +{ + bts->paging.available_slots = free_slots; +} |