Holger Hans Peter Freyther
ab6cd921e3
tbf: Update the legend and mention invalid as well
...
We should not see it but the legend should be complete.
2013-11-26 20:57:42 +01:00
Holger Hans Peter Freyther
9c5539d46d
tbf/rlc: Move the counting of unacked frames into the RLC V_B class
...
Whenwe receive a final ack we assume that all the unacked frames
have been acked now. Move the counting to V_B and now the caller
can remove the BSN and the "lost" variable which has always been
zero.
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
86dc355a33
tbf: Split the handling of DL ACK/NACK into two separate parts
...
Split the handling of the final ack and the handling of frames
that is moving frames.
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
bc15570651
tbf/rlc: Change the code and generate the entire state in the V_B
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
e358ff8fa4
tbf/rlc: Move the moving of V(A) into the V_B code
...
Move the code that moves the V_B to the first not acked frame. Return
how many indexes the V_B was moved and update the V_A in the caller.
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
df6b4f52e0
tbf/rlc: Move the parsing of RBB to Decoding, move window marking out
...
Move the parsing of the bitbmap out of the TBF code into Decoding.
Move the updating of the V_B into the V_B class. Add some comments
about handling the mod_sns, mod_sns_half parameters by using template
code.
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
9eb8ace260
tbf: Fix the indention of this routine
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
12c039cdb2
debug_diagram: Remove the special debug_diagram compilation mode
...
This approach is somehow flawed. We need/want to debug problems on
systems with real traffic and re-compiling it with debug_diagram
is not an option. All internal logging needs to be expressive enough
so we can understand what is going on (e.g. create a script to
post-process the output).
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
a6ba67cb3a
tbf: Simplify the create_dl_acked_block into two parts
...
Separate the resend from creating a new block. It shows that the
first_fin_ack is always set to FALSE for re-sending. This might
not be what we want.
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
8b16ae30fe
tbf/rlc: Move the marking of frames for resend into the v_b
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
c03e38291a
tbf: Move the check if the window is stalled to a separate method
2013-11-26 20:57:24 +01:00
Holger Hans Peter Freyther
1577779526
rlc/tbf: Move the loop into the gprs_rlc_v_b class
2013-11-26 20:57:19 +01:00
Holger Hans Peter Freyther
ef93bdb19b
tbf: Count how often we re-start a BSN in the send routine
...
There appears to be a scheduling issue. Even without any NACKs
we are re-transmitting a lot of frames. It might be because of
this.
2013-11-24 00:01:50 +01:00
Holger Hans Peter Freyther
64b49bc3ce
tbf: Always increase the tx_counter when we transmit a frame
...
In case the ACK could not be scheduled we were not increasing the
tx_counter. Change the code flow to always increase the tx_counter
after we have created a frame.
2013-11-23 23:16:07 +01:00
Holger Hans Peter Freyther
b18aedcc50
tbf: Make the ws and sns number "private" (they should also be const)
2013-11-23 16:27:50 +01:00
Holger Hans Peter Freyther
321f3c3104
rlc: Move the ack state array into a separate class that can be tested
2013-11-23 16:19:17 +01:00
Holger Hans Peter Freyther
092478f294
rlc: Count nacked frames in the statistics too
2013-11-23 01:01:19 +01:00
Holger Hans Peter Freyther
58db60c68e
rlc: Start to move things out of the tbf into the rlc
...
Add remarks of possible broken behavior inside the tbf
routines. Move the preparation (and init) into the new
rlc.cpp file.
2013-11-19 21:26:43 +01:00
Daniel Willmann
c3d5325fc8
tbf: The memory regions overlap so memmove should be used
2013-11-19 21:26:43 +01:00
Holger Hans Peter Freyther
c70aae4697
rlc: Count the window stalls on the RLC level
2013-11-19 17:09:37 +01:00
Holger Hans Peter Freyther
e5dc2a0ac5
rlc: Pass the gprs_rlc_data to the assemble function for assembly
2013-11-13 20:17:06 +01:00
Holger Hans Peter Freyther
796270bf83
rlc: Put a block and the length into a separate object
...
This will ease passing things around.
2013-11-13 20:05:00 +01:00
Holger Hans Peter Freyther
9241fd0957
rlc: Begin to move the rlc block handling into a separate object
...
The secret of gprs_rlc will be the manipulation of the blocks for
the current window. We might add the window handling in this class
as well.
2013-11-13 19:51:55 +01:00
Holger Hans Peter Freyther
e9429b5d3e
rlc: Count the sent and resent RLC blocks
2013-11-13 19:36:57 +01:00
Holger Hans Peter Freyther
55cf994c29
tbf: Re-use the code that is re-using the tbf
...
Address the fixme and re-use the code. Fix the counting in the
final ack case and provide a log message in the other case. Prefix
it with the tbf name
2013-11-13 18:15:45 +01:00
Holger Hans Peter Freyther
b1302b083e
llc: Move the decision if a frame has expired into the LLC
...
This way the generation of the expiry information and the check
is at the same place. This should make reading the code more easy.
2013-11-13 17:16:28 +01:00
Holger Hans Peter Freyther
e23102602c
llc: Move some more secrets from the TBF into the LLC
...
Introduce a method to append data to a TBF and then reset the
read pointer when the frame has been sent.
2013-11-13 17:08:07 +01:00
Holger Hans Peter Freyther
b3d5ee2934
bts: Count the number of llc frames that were "scheduled" to be sent
...
This does not mean that they have been successfully transferred
to the SGSN/MS but at least that they have reached a certain point
in the message flow.
2013-11-13 16:43:26 +01:00
Holger Hans Peter Freyther
51e093bd1c
llc: Use timeradd and timercmp and fix for < 1s PDU llc timeouts
2013-11-13 15:35:45 +01:00
Holger Hans Peter Freyther
fce431cf3a
llc: Move the timeout calculation into the TBF
2013-11-13 15:17:12 +01:00
Holger Hans Peter Freyther
aa35ba7584
tbf: Count how often we re-use a TBF that was already being deactivated
2013-11-13 15:02:50 +01:00
Holger Hans Peter Freyther
857281f7ff
llc: Remove one of the two variants to put data into the frame
2013-11-13 14:58:19 +01:00
Holger Hans Peter Freyther
a6e47c7f54
llc: Add another warning for me to take a look
2013-11-11 20:08:35 +01:00
Holger Hans Peter Freyther
5697b4ccfa
tbf: Make sure that tfi is signed so we can make a < 0 check
...
For the failure check we need this variable to be < 0.
Fixes: Coverity CID 1107941
2013-11-11 16:22:39 +01:00
Holger Hans Peter Freyther
acb5427bda
llc: Move all direct accesses to the frame into the llc structure
...
Add some todo items where we could add assertions now that I see
the constraints and invariants of this code.
2013-11-07 08:15:58 +01:00
Holger Hans Peter Freyther
b7840466ce
tbf: Split create_dl_acked_block into two methods
...
The method was more than 300 hundred lines of code. Split the
selection of the index and the creation of the dl_msg.
2013-11-07 07:50:26 +01:00
Holger Hans Peter Freyther
a1da251c10
tbf: Move the tbf_handle and tbf_append_data into the class
2013-11-07 07:32:51 +01:00
Holger Hans Peter Freyther
096f6f9f39
llc: Move the llc code out of the tbf.cpp into a new dedicated one
2013-11-07 07:21:06 +01:00
Holger Hans Peter Freyther
758dc12c9f
llc: First routines moved from the TBF into the LLC
2013-11-07 07:16:21 +01:00
Holger Hans Peter Freyther
28e5378b55
llc: Begin creating a LLC class and move counts into it.
...
Begin to move state of the LLC into a separate object. This will
allow to make side-effects more clear and kill some code duplication.
2013-11-06 20:23:56 +01:00
Holger Hans Peter Freyther
9948514086
tbf: Move the tx part into the tbf as it accesses internal data
2013-11-06 20:15:11 +01:00
Holger Hans Peter Freyther
77e05971b4
tbf: Move the llc handling into the tbf (from the bts)
...
This will be moved to a LLC class in the future but after this
we can make the sns/ws private now and have little to update
outside the tbf.
2013-11-06 19:16:43 +01:00
Holger Hans Peter Freyther
bc1626e5de
tbf: Update the timing advance for the new tlli based on the old one
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
b809866be5
tbf: Learn and propagate the TLLI changes due a new P-TMSI
...
During a routing area update a new P-TMSI was assigned. During
the PACKET CONTROL ACK on the DL we notice the change of TLLI
but didn't propagate this. This means that a Routing Area Update
Complete was only sent after a new RACH request.
Addresses:
<0007> gprs_rlcmac_meas.cpp:103 UL RSSI of TLLI=0x88661bc6: -67 dBm
<0002> bts.cpp:945 Got ACK, but UL TBF is gone TLLI=0xe512eba3
<0007> gprs_rlcmac_meas.cpp:158 DL packet loss of IMSI=274080000004765 / TLLI=0xe512eba3: 0%
<0002> tbf.cpp:668 TBF TFI=0 TLLI=0x88661bc6 T3169 timeout during transsmission
<0002> tbf.cpp:690 - Assignment was on PACCH
<0002> tbf.cpp:694 - No uplink data received yet
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
5464c9baf2
tbf: Have one imsi field and assign it through a function
...
Have one IMSI field per TBF and assign through a function call.
The IMSI should be used to look-up the TBF on the SGSN->PCU
direction.
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
34f6e5ebe6
tbf: Make tfi private and update the code
...
All logging code that used tbf->tfi is now using tbf_name to
print the the TBF. External code is now using tfi() which is
inlined and should result in the same code being generated as
before (+debug code that can be stripped).
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
474685e26e
tbf: Make the tlli "private" and update the updating code
...
Now all updates to the tlli/tlli_valid are in one place. If we
implement the policy to update the matching/linked TBF we can
now to do it in a single place. Add a todo item for that as I
am waiting for feedback from the mailinglist.
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
bd449f57a7
tbf: Create tbf_name and use it in log statements
...
This is like gsm_lchan_name and should be used in log statements.
This way we can easily change the information that is printed and
we know how to search things. The other part is that direct use
of tfi/tlli is removed which will allow us to make them private
and at the same time start to resolve the "tlli" updated in many
places.
Not old log statements are changed yet. This will done whenever
a bad log statement is seen on the console...
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
ec80f82824
tbf: Remove the trx_no field from the tbf, go through the trx object
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
fc498c9e7b
tbf: Go through the trx to get the ARFCN
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
875fc895a8
bts: Further logging improvements for TFI/TLLI output
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
8d0e489484
tbf: Log the TFI and TLLI so we can try to figure out more from logs
...
<0002> tbf.cpp:444 Poll timeout for DL TBF=0
<0002> tbf.cpp:513 - Timeout for polling PACKET DOWNLINK ACK.
<0002> tbf.cpp:688 - Assignment was on PACCH
<0002> tbf.cpp:694 - Downlink ACK was received
<0008> gprs_bssgp_pcu.cpp:154 LLC [SGSN -> PCU] = TLLI: 0xd6942c78 IMSI: 274080000004765 len: 506
<0002> bts.cpp:974 PACKET DOWNLINK ACK with unknown FN=2213128 TFI=0 (TRX 0 TS 6)
2013-10-30 21:24:13 +01:00
Holger Hans Peter Freyther
15bb1a2a51
misc: Change the logging for the tbf and what to log
...
TLLIs got printed as TBF. Fix that but also rename things to
TFI. The TFI is not required to be unique per BTS but it is
the indicator we use right now.
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
90b87ea5e6
misc: Fix typo.. resource in english only has one 's'
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
1997787c52
llc: Count timedout and silently dropped frames
...
A DL tbf can be discarded and then the already queued LLCs will
be silently dropped. Count this event.
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
158776411b
bts: Provide the first set of counters
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
61a0a04d26
tbf: Move gprs_rlcmac_send_data_block_acknowledged into tbf
...
We can now remove the gprs_rlcmac_data as the code has been
moved into the tbf, pdch and bts.
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
3dc56a3b34
tbf: Move gprs_rlcmac_send_packet_uplink_assignment into the tbf
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
ae03f22199
tbf: Move gprs_rlcmac_send_packet_uplink_assignment to the tbf
...
Again the function was called send but didn't do any sending
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
22b31190cb
tbf: Fix typo in thecomment
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
46bcb8d59d
tbf: Move gprs_rlcmac_send_uplink_ack into the tbf
...
The method was called send but didn't send anything. Move
it to the tbf
2013-10-30 21:24:12 +01:00
Holger Hans Peter Freyther
2db7e7e7db
tbf: Move gprs_rlcmac_send_packet_downlink_assignment into the tbf
...
This method was called _send_packet_ but actually didn't do any
sending at all. It just formated the right assignment. I replaced
tbf-> with nothing.
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
24c1a5ba29
bts: Move gprs_rlcmac_trigger_downlink_assignment into BTS
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
42de18f347
debug_dl_ass_idle: Remove the feature as it is obviously broken
...
strncpy takes three arguments but only two are given. This feature
would also only work if there is one tbf at a time.
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
d9262b3b55
tbf: Move gprs_rlcmac_poll_timeout into the tbf
...
Move the gprs_rlcmac_poll_timeout method into the tbf class and
gprs_rlcmac_downlink_assignment into the BTS.
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
70ddde6929
tbf/bts: Move the tfi_find_free into the bts
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
f63cabd931
tbf/pdch/bts: Move the tbf look-up by tfi into the BTS
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
6673005215
tbf: Fix typo in the debug message
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
782f6ddf99
tbf: Add todo item tht could help improving debugging
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
86300bbeea
tbf: Move the timer routine into the class
...
The timer is used for various timeouts and there is still external
client code that is calling it. In a perfect world the client code
would indicate that an event has happened and the internal timer
will be stopped. The best compromise is the "stop_t3191" method. It
allows to add semantic verification that the timer has been running.
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
af8094d799
tbf: Move the handle tineout into the tbf class
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
aa9c326d7e
tbf: Move the updating of the data into the tbf class
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
d11290b90b
pdch/tbf: Move gprs_rlcmac_rcv_data_block_acknowledged into the pdch
...
Move the method into the PDCH. Extract the finding of TLLI into a
new class called Decoding. Move the assemble and forward LLC frames
into the TBF as it is poking in the internals of the TBF.
2013-10-30 21:24:11 +01:00
Holger Hans Peter Freyther
b65e08a7be
misc: Remove the bts parameter from calls that take a tbf
...
Mark some of the tbf manipulation that is burried in the data
sending routine.. that it should be moved around.
2013-10-30 21:24:10 +01:00
Holger Hans Peter Freyther
1702f102af
tbf: First round of removing llc handling from the rlcmac_data
...
The code in gprs_rlcmac_data should ask the TBF for help in packing
the frames but it really shouldn't poke in the internals of the
tbf structure. This is very bad capsuling and has plenty of copy
and paste.
At the same thime this will be the most dangerous refactoring of
the code base.
2013-10-30 21:24:10 +01:00
Holger Hans Peter Freyther
34bd8bdf30
bts/tbf: Move the lists into the BTS and do the look-up from the BTS
...
The list belongs to the BTS. This makes cleaning this up more easy
and establishes a hierachy of resources that start from the BTS. The
debug_diagram code is now broken.
2013-10-30 21:24:10 +01:00
Holger Hans Peter Freyther
9f0c1d216a
tbf: Keep a pointer from the tbf to the BTS
...
This is preparing the next commits and will ease working with
the debug_diagram when the global lists are killed. It will
simplify the APIin the long run.
2013-10-30 21:24:10 +01:00
Holger Hans Peter Freyther
111614a994
ta: Create TimingAdvance class and make it belong to the BTS
...
This allows us to easily flush the state in case a PCU/BTS
connection is lost.
2013-10-30 21:24:10 +01:00
Holger Hans Peter Freyther
67ed34eedb
bts: Move struct gprs_rlcmac_bts and other structs into a bts.h
...
Begin to make the BTS a real C++ object with real responsibilities.
The biggest issue will be the pcu_vty.c that might not like C++
at all.
2013-10-30 21:20:45 +01:00
Holger Hans Peter Freyther
1b33361bab
bts: Remove the global state from the tbf
2013-10-30 21:20:45 +01:00
Holger Hans Peter Freyther
344ff48756
bts: Remove the global state gprs_rlcmac_trigger_downlink_assignment
...
Remove the global state from gprs_rlcmac_trigger_downlink_assignment
and walk up to the pcu_l1_if.cpp where I find the timeout handling
that should be part of the SBA and TBF functionality. In terms of
hierachies things start to be more clear.
There should be the BTS object. That holds the SBA and TBF Controllers
that can allocate TBFs and SBAs and will handle the timeout polling
for a BTS.
2013-10-30 21:20:44 +01:00
Holger Hans Peter Freyther
173a240a7e
bts: Remove global state and the usage of the gprs_rlcmac_bts
...
Global state makes mocking/writing tests more difficult. Continue
by removing direct usage of the bts and adding it as pointer to
the function calls (showing the true dependencies of the functions)
2013-10-30 21:20:44 +01:00
Holger Hans Peter Freyther
743bafa50c
alloc: Introduce a backpointer from the tbf to the trx and simplify code
...
Kill all the level of indirections where one needs to have the BTS
the TBF to find the TRX.
2013-10-30 14:45:57 +01:00
Holger Hans Peter Freyther
96efa70a9e
alloc: Call it trx_no and not trx as it is not trx object
2013-10-30 14:45:57 +01:00
Holger Hans Peter Freyther
1c344e2668
tbf: Prepare to make thing things private in the tbf, start with the state
...
There really shouldn't be too many callers of state. Instead the
tbf should dispatch depending on the internal state. For now
introduce state_is and state_is_not accessor functions so we can
start to see who is using the internal state.
2013-10-28 12:54:09 +04:00
Holger Hans Peter Freyther
7380babdba
tbf: Move the tbf_timer_cb into the tbf class
...
Introduce the first instance method for printing out diagonistic
about itself and create a jump function for it.
2013-10-28 12:53:49 +04:00
Holger Hans Peter Freyther
455613076a
tbf: Move many routines related to the tbf from gprs_rlcmac to tbf.c
2013-10-28 12:52:59 +04:00
Holger Hans Peter Freyther
4f6a4e5d6d
tbf: Add another variant of the free_all now by pdch
2013-10-28 12:52:33 +04:00
Holger Hans Peter Freyther
964ddb6aa0
tbf: Move the code to close all timeslots into the tbf class
...
Move the code out of the sysmocom_socket (as this is only required
to talk to our hardware) and into the TBF class that actually knows
what a TBF is.
2013-10-28 12:52:15 +04:00
Holger Hans Peter Freyther
8692128365
tbf: Move the alloc_ul_tbf into tbf.c and change signature
...
Add the bts parameter to the method list. This would be a static
method of the class (in case the TBF would be a class)
2013-10-18 15:17:43 +04:00
Holger Hans Peter Freyther
bb20b2c64c
tbf: Add more to do items for refactoring on the dl assignment
2013-10-18 15:17:27 +04:00
Holger Hans Peter Freyther
bcafdf8d90
tbf: Warn about copy and paste between different tbf alloc routines
...
These need to be re-factored to use a common allocation routine.
2013-10-18 15:17:13 +04:00
Holger Hans Peter Freyther
443c822f77
tbf: Move the creation of a new tbf for the downlink to a new method
...
Move the code that is dedicated to handle the assignment of a new
TFI/TBF for the downlink into a new method.
2013-10-18 15:16:56 +04:00
Holger Hans Peter Freyther
d868928888
tbf: Create an assign method for IMSI.
...
This will allow us to set flags (like IMSI) present and will
be of help when fixing the tbf lookup.
2013-10-18 15:16:42 +04:00
Holger Hans Peter Freyther
d1d114f5b7
tbf: Move code that sets the tbf's ms_class to a central place
2013-10-18 15:16:27 +04:00
Holger Hans Peter Freyther
31d0df92ac
tbf: Separate the easy path out of the receive path
...
* Create a look up routine for the TBF that will allow us to
easily find a TBF by IMSI...
* Separate the code that works on an existing TBF.
2013-10-18 15:16:11 +04:00
Holger Hans Peter Freyther
17c31ce173
tbf: Begin to add some structure to the tbf code
...
The TBF should use the IMSI to identify a block flow but all
handling is spread across the entire code. Start to clean this
up by moving relevant code into the tbf file. Afterwards one
can clean up and add more internal structure.
2013-10-18 15:15:49 +04:00