At the BS we maintain a table recording which Upslot/Downslot has been alloted to which MS (in vlr_, specifically vlr_.upslot[][] and vlr_downslot[][]). When the BS receives a resource_request from an MS or a packet from its own IFQ (to be sent to an MS), it allocates the first free slot available to that MS. This is done in slot_allot(). If the MS is a GPRS MS, a slot is allocated from the pool of GPRS slots, else from the pool of GSM slots. By default, an MS is GPRS and four slots on each frequency are reserved for GPRS (this leaves only three slots on each frequency for GSM). Allocation is symmetric on the uplink and the downlink frequencies. Only single slot operation is supported ie each MS can be alloted only one slot.