GSM Paging implementation in OpenBSC == Code structure == The code is implemented in the libbsc/paging.c file. The external interface is documented/specified in the include/openbsc/paging.h header file. The code is used by the NITB and BSC application. == Implementation == Paging can be initiated in two ways. The standard way is to page by LAC. Each BTS has its own list/queue of outstanding paging operation. When a subscriber is paged one "struct paging_request" per BTS will be allocated and added to the tail of the list. The BTS is supposed to be configured to not repeat the paging. A paging_request will remain in the queue until a paging response or at the expiry of the T3113. Every 500 milliseconds a RSL paging command is send to the BTS. The 500 milliseconds is a throttling to not crash the ip.access nanoBTS. Once one paging_request has been handled it will be put at the end of the queue/list and the available slots for the BTS will be decreased. The available slots will be updated based on the paging load information element of the CCCH Load indication. If no paging slots are considered to be available and no load indication is sent a timer is started. The current timeout is 500 milliseconds and at the expiry of the timer the available slots will be set to 20. OpenBSC has the " paging free <-1-1024>" configuration option. In case there are less free channels than required no paging request will be sent to the BTS. Instead it will be attempted to send the paging request at the next timeout (500 milliseconds). == Limitation == The paging throughput could be higher but this has lead to crashes on the ip.access nanoBTS in the past. == Configuration == === ip.access nanoBTS === The current CCCH Load indication threshold is 10% and the period is 1 second. The code can be found inside the src/libbsc/bts_ipaccess_nanobts.c inside the nanobts_attr_bts array.