Commit Graph

99 Commits

Author SHA1 Message Date
Andreas Eversberg 106ea79337 Fix: Align TLLI to 32 bit margin, before converting it 2012-12-18 10:04:24 +01:00
Andreas Eversberg f01929bcb6 Rework on multislot allocation algorithm
The slots are choosen in a way that later selection of slots for
concurrent TBFs will have the same downlink/uplink control channel
(PACCH).
This is required for polling acknowledge of new TBF assignment on PACCH.
The MS will always have the same PACCH uplink slot while beeing in packet
transfer mode.
2012-12-18 10:03:50 +01:00
Andreas Eversberg afdd9e1be5 Fix: Don't use TIMING_ADVANCE_INDEX in assignment messages, if not used
Some MS will leave packet transfer mode, if TAI is given, but no timing
advance control messages are sent on PTCCH. This could results in
permanent loss of larger packets.
2012-12-18 10:03:14 +01:00
Andreas Eversberg 3a7eb6b80f Fix: Drop ongoing UL TBF, if another UL TBF is established for same TLLI
This happens, if the mobile looses coverage and establishes a subsequent
uplink TBF.
2012-12-18 10:03:05 +01:00
Andreas Eversberg 0c9b50c498 Fix: Handling of final acknowledge on downlink TBFs
It is essential to initialize the first_fin_ack variable.

Also it is essential not to free TBF, in case the final ack is not
received, but all frames have been acked. In this special case, we resend
the final block again and again (and poll), until we receive the final
ack.
2012-12-18 10:02:58 +01:00
Andreas Eversberg aafcd703f3 Fix: Be sure to check if the PACKET DOWNLINK ACK belongs to the polled MS 2012-12-18 10:02:44 +01:00
Andreas Eversberg b83e2a7d5c Adding flow chart diagram of ongoing TBFs and their events
It is quite essential. It shows how TBFs are related and helps to estimate
states and timers (timeouts) of the MS.

In order to use it, it must be defined by a switch at gprs_rlcmac.h.
2012-12-18 10:02:20 +01:00
Ivan Kluchnikov 9eb552b239 Merge branch 'jolly'
Conflicts:
	src/gprs_bssgp_pcu.cpp
	src/gprs_rlcmac.cpp
	src/gprs_rlcmac_data.cpp
	src/gprs_rlcmac_sched.cpp
2012-10-05 18:17:57 +04:00
Andreas Eversberg 499ff415a9 Allow setting of seperate coding schemes for uplink and downlink 2012-10-03 14:21:36 +02:00
Andreas Eversberg 3b1332cdb4 Replace switch/case construct by a structure, to define coding schemes
A new attribute at TBF instance indicates the current scheme used.
2012-10-03 14:20:53 +02:00
Andreas Eversberg 5f14bd9410 Fix: Poll correctly for downlink acknowlege, to prevent window stalling 2012-10-03 14:20:26 +02:00
Andreas Eversberg a9be1547b1 Use PCH confirm from BTS to start downlink packet flow
Since we don't know when the IMM.ASS message is sent on it's paging group
on PCH, we will wait for confirm from BTS and start packet flow then.
2012-09-27 09:23:24 +02:00
Andreas Eversberg 99a107dbee Free existing UL/DL TBF, if RACH has been received from MS
In this case the mobile has lost existing flows, so it make sense to free
them. The TFI(s) can be re-used immidiately, because they are not
associated by MS anymore.
2012-09-27 09:21:52 +02:00
Andreas Eversberg aafcbbb252 Set Alpha and Gamma at assingment messages for power control
The initial power control value Alpha must be set in SI13.
2012-09-27 09:20:45 +02:00
Andreas Eversberg df4d20e95b Fix: T3193 is now started with the correct value 2012-09-24 13:49:38 +02:00
Andreas Eversberg adb2f18538 Assign TFI to complete TRX, not just one TS
This is required, since we may change slot allocation. In case of a
change, we do not want to be unable to change, if the same TFI on one of
the other slots is already in use by a different TBF (having same TFI, but
on different slot).
2012-08-07 17:06:08 +02:00
Andreas Eversberg 07e97cf8a5 Adding single block allocation
It is mandatory to support it because MS may request a single block.
In this case the network must assign a single block.

It is possible to force single block allocation for all uplink requests
on RACH. (VTY option)
2012-08-07 16:00:56 +02:00
Andreas Eversberg cbcd124588 Fix: Add timer for downlink TBF in assignment state
This is required, since the UL TBF which is used to assign downlink TBF
may be freed due to timeouts.
2012-08-07 15:48:21 +02:00
Andreas Eversberg 14db19ed11 Adding flags for debugging assignment and polling timeout 2012-08-06 15:03:03 +02:00
Andreas Eversberg 802bb6eac8 Adding polling for packet control ack at packet downlink/uplink assignment 2012-08-06 11:15:05 +02:00
Andreas Eversberg 08e93cdc3f Use final_ack_sent and contention_resolution_done to define ongoing UL TBF
Both flags can be used to determine wether assignment must be sent on PCH
or on AGCH. Before contention resolution is done, mobile will ignore
downlink assinment. When final uplink acknowledge was sent, the mobile
will go back to PCH after reception of akcnowledge.
2012-07-26 08:13:06 +02:00
Andreas Eversberg 6681bb8d0c Replaced malloc() by talloc_zero() to be able to track memeory leaks 2012-07-25 08:48:44 +02:00
Holger Freyther 1115f5972c misc: Fix typos in the comments
ressource -> resorce
2012-07-24 11:20:02 +02:00
Andreas Eversberg b3ded4cf98 Added debugging of downlink bandwidth 2012-07-24 10:47:24 +02:00
Andreas Eversberg 7f5352c17b Fix: gprs_rlcmac_trigger_downlink_assignment() selects correct channel
In order to select correct channel (PCH or PACCH), a tbf pointer is set
in case of PACCH. The tbf pointer points to TBF whose PACCH is used.
2012-07-23 18:25:43 +02:00
Andreas Eversberg bc65586917 Fix: Kill pending downlink TBF, if mobile requests uplink TBF on RACH
If the mobile misses assignment, it changes back to idle mode. In this
case we must kill the pending downlink TBF, because it is not used by
mobile and we can assign a new downlink TBF for new downlink data.
(We may not have two downlink TBF with same TLLI!)
2012-07-23 18:25:43 +02:00
Andreas Eversberg 7438df7d70 Fix: Send downlink assignment on PCH twice to make reception more safe
If the mobile is not fast enough switching back to CCCH, the second
assignment, which is sent later is usefull in this case.
2012-07-23 18:25:43 +02:00
Andreas Eversberg 642c7d3f5b Fix: We don't use timer to define when assignment is complete on PACCH
Instead we use the event of sending assignment message. Then we set the
TBF state to 'FLOW'.
2012-07-23 18:25:43 +02:00
Andreas Eversberg 24131bf55b Add check of lifetime of LLC frame
If lifetime expires of queued LLC frames, they are discarded. The number
of discarded frames and the sum of their octets are reported to SGSN
via LLC-DISCARDED message.

The lifetime can be overridden via VTY. The value can be centi-seconds
or "infinite".
2012-07-21 11:09:58 +02:00
Andreas Eversberg 4b470ffe07 Changed log levels, to indicate abnormal events 2012-07-16 12:02:40 +02:00
Andreas Eversberg 0f13c40147 Check for downlink sequence is out of range
This may happen, if Packer Downlink Assignment was not received by MS, so
old TBF with old sequence number is still alive. In this case we free TBF.
2012-07-16 11:59:23 +02:00
Andreas Eversberg f54a89e881 Change polling interval for Packet Downlink Ack/Nack
This lowers the risk for stalling of transmit window.
2012-07-16 11:56:11 +02:00
Andreas Eversberg 67e4f2f1fd If we already sent final Packet Uplink Ack/Nack, request DL TBF on PCH
If network does not respond fast enough, the MS might already received
final Packet Uplink Ack/Nack, so we need to assign new DL TBF on PCH.
2012-07-15 19:36:49 +02:00
Andreas Eversberg 67a1976974 No content resolution is required when UL TBF is requested during DL TBF 2012-07-15 19:35:46 +02:00
Andreas Eversberg c8466f42c5 Ignore Packet Resource Request 2012-07-15 19:34:53 +02:00
Andreas Eversberg ee31b78cfd Fixed contention resolution issue
In order to do downlink assignment during uplink TBF, the content
resolution must be completed. It is completed when the first Packet
Uplink Ack/Nack message is transmitted to the mobile.
2012-07-15 16:27:01 +02:00
Andreas Eversberg 6664a90365 Downlink transfer is finished if all packets are acknowleged
It turned out that the final ack flag may not be set, but all packets
have been acknowledged. This patch will finish transfer in case all
blocks are acknowledged.
2012-07-15 06:52:19 +02:00
Andreas Eversberg 5e043dac8c Polling for downlink ack/nack is performed only on suitable slot
The slot must be the control channel TS, which is selected by the
allocation algorithm. The MS must be able to respond at this TS.

The counter to trigger polling is incremented until polling has to be
performed. Then the counter stops. When the transmission of data block is
requested on control channel TS, the counter is reset. The counter-value
is also used to poll immediately when the transmission has finished.
2012-07-15 06:51:30 +02:00
Andreas Eversberg 592e04ab6d multislot: Rework of handling control channel / polling
In order to send control blocks to MS and receive control blocks from MS
(polling), it is required to select one timeslot that the MS must be
able to send and receive. The allocation algorithm must take care of
selecting that slot.
2012-07-15 06:25:37 +02:00
Andreas Eversberg f298fa87b9 multislot: Extracted "slot allocation algorithm" from tbf allocator
The current available algorithm only supports selecting a single slot
for downlink/uplink. (In the future, a multislot algorithm will follow.)
2012-07-13 14:50:57 +02:00
Andreas Eversberg b0c7ea72c8 Changed data structures for TBF and PDCH instances, to allow multislot
The new data structure is required to define slot/TFI assigment for MS
with multislot capability.

Now there are two lists for TBFs: uplink and downlink. It is possible to
have different TBFs with same TFI in the same direction, as long as they
are assigned on different timeslots.

See tbf.txt for description.

Note: This does not implement any multislot support. It defines the new
data structure. Currently only the first slot is assigned.
2012-07-13 14:46:03 +02:00
Ivan Kluchnikov ef7f28cc7f Merge branch 'jolly_new'
Merge is based on jolly_new branch with two modifications.
1. Modified PCU L1 interface.
pcu_l1_if.cpp - common functions for tx and rx messages on L1 interface.
sysmo_sock.cpp - SYSMO-PCU socket functions.
openbts_sock.cpp - OpenBTS-PCU socket functions.
pcuif_proto.h - L1 interface's primitives.
2. Modified encoding of RLC/MAC Control messages, now we use structures and encode_gsm_rlcmac_downlink() function for encode control blocks (without  hand-coding).
2012-07-12 14:49:15 +04:00
Andreas Eversberg e13fa2d569 Send downlink IMMEDIATE ASSIGNMENT on PCH and not on AGCH
The IMSI is used to define paging group on which it is sent.

This is tested with MS that requires correct paging group.
2012-07-09 17:10:44 +02:00
Andreas Eversberg 0e4030982f Restructured debugging levels to get better overview of TBFs/processes
Only when using LOGL_DEBUG, every detailled information is displayed.

When using LOGL_INFO, a summary of the process is displayed.

When using LOGL_NOTICE, only errors and warnings like timeouts
or invalid received informations are displayed.

When using LOGL_ERROR, only local error like software errorss are
displayed.
2012-07-06 11:04:57 +02:00
Andreas Eversberg 7b0450133c Fixed pseudo length of IMMEDIATE ASSIGNMENT message.
The pseudo length may not include the rest-octets, so it stays compatible
to non-GPRS phones.

At pcu_l1_if.c (OpenBTS) no pseudo length is given, so the frame is
only 22 bytes long. I could not test if it works.
2012-07-06 09:40:47 +02:00
Andreas Eversberg dfa563cd3b RLC/MAC process makes use from attributes, received from PCU socket
For OpenBTS interface and BSSGP, fixed values are still used.
2012-07-06 08:13:59 +02:00
Andreas Eversberg b3c6f6c716 Receive cell informations via PCU socket interface
These informations provide RAI, timers, counters and other attributes to
the BSSGP and RLC/MAC processes.

The attributes are stored in gprs_rlcmac_bts global structure.
2012-07-06 07:40:08 +02:00
Andreas Eversberg e6228b34a7 TBF acknowledged mode finished for both link directions 2012-07-03 13:36:03 +02:00
Andreas Eversberg 66690dd3c6 Rewrite of RLC/MAC uplink acknowledged TBF.
It uses history buffer and sends ack/nack control messages about received
blocks. It defragments the blocks and forwards them to upper layer. It
does content resolution and ignores other MS. It sends final ACK after
all blocks have been sucessfully received. Timers are used to detect
loss of uplink, and repeat lost final ACK.
2012-06-27 15:44:31 +02:00