osmo-pcu/src
Jacob Erlbeck 0c1c8778df tbf: Use a hysteresis when discarding DL LLC frames
Currently single LLC blocks are discarded when the PDU lifetime
expires. If an IP packet has been fragmented either on the IP or on
the LLC layer and is therefore distributed over several LLC frames,
the kept fragments are transmitted and then discarded by the MS
because of the missing PDU. This can cause massive IP packet loss
when there are many fragmented packets (e.g. when trying 'ping
-s1800' or if the GGSN chops downlink IP packets into several SNDCP
packets).

On the other hand, discarding too many packets might disturb the
congestion handling of TCP. Dropping plain TCP ACKs might also hinder
flow control and congestion avoidance.

This commit adds a hysteresis algorithm to the LLC discard loop. If
an LLC message's age reaches the high water mark, further message's
with an age above the low water mark are discarded, too. This is
aborted, if a GMM, a non-UI, or a small message is detected. In
these cases, that message is kept.

The following VTY commands are added (pcu config node):

- queue hysteresis <1-65535>   set the difference between high
                               (lifetime) and low watermark in
                               centiseconds
- no queue hysteresis          disable this feature (default)

Since the SGSN will most probably send all fragments of a single
N-PDU without much delay between them, a value slightly above the
average transmission delay jitter between SGSN and PCU is probably a
sensible value to discard all fragments of a single IP packet.

This is an experimental feature that might be replaced by more
advanced means of active queue management in the future.

Sponsored-by: On-Waves ehf
2015-04-02 12:34:48 +02:00
..
.gitignore Adding .gitignore to source directory 2012-06-27 17:45:15 +02:00
Makefile.am pcu: Add pcu_utils.h to Makefile.am 2015-03-29 13:55:42 +02:00
bitvector.cpp bitvector: Address compiler warnings about unsigned/signed 2013-08-02 13:39:13 +04:00
bitvector.h bitvector: Address compiler warnings about unsigned/signed 2013-08-02 13:39:13 +04:00
bts.cpp tbf: Don't use 'old' DL TBFs after reuse_tbf 2015-02-26 16:22:34 +01:00
bts.h tbf: Use a hysteresis when discarding DL LLC frames 2015-04-02 12:34:48 +02:00
csn1.cpp csn1: Add spaces between string literal and identifier 2014-06-04 17:17:48 +02:00
csn1.h Ported fixes and improvements from Wireshark for RLC/MAC control block decoding. Part 1. 2012-10-10 19:43:37 +04:00
decoding.cpp decoding: Cosmetic - change rbb decoding 2013-12-12 11:09:17 +01:00
decoding.h tbf/rlc: Move the parsing of RBB to Decoding, move window marking out 2013-11-26 20:57:24 +01:00
encoding.cpp tbf, ...: Make the fields in the dl/ul struct member variables 2014-08-07 16:12:05 +02:00
encoding.h encoding: Change function signature to use UL TBFs where it makes sense 2014-08-07 16:12:05 +02:00
femtobts.c femtobts: Remove code that is causing warnings with GCC 4.8 2013-08-02 13:36:52 +04:00
femtobts.h femtobts: Remove code that is causing warnings with GCC 4.8 2013-08-02 13:36:52 +04:00
gprs_bssgp_pcu.cpp bssgp: Handle BSSGP STATUS messages 2015-03-17 10:44:07 +01:00
gprs_bssgp_pcu.h Always exit and don't try to recover 2014-06-15 19:28:51 +02:00
gprs_debug.cpp Introduce new file for various measurements 2013-03-17 17:16:44 +01:00
gprs_debug.h Introduce new file for various measurements 2013-03-17 17:16:44 +01:00
gprs_rlcmac.cpp debug_diagram: Remove the special debug_diagram compilation mode 2013-11-26 20:57:24 +01:00
gprs_rlcmac.h tbf, gprs_rlcmac_meas: Move the DL bandwidth variables to the DL TBF 2014-08-08 14:15:24 +02:00
gprs_rlcmac_meas.cpp tbf, gprs_rlcmac_meas: Move the DL bandwidth variables to the DL TBF 2014-08-08 14:15:24 +02:00
gprs_rlcmac_sched.cpp tbf: Poll MS on idle DL TBFs 2015-03-25 12:34:38 +01:00
gprs_rlcmac_ts_alloc.cpp tbf, ...: Make the fields in the dl/ul struct member variables 2014-08-07 16:12:05 +02:00
gsm_rlcmac.cpp Fix warnings in gsm_rlcmac.cpp 2014-01-09 20:01:48 +01:00
gsm_rlcmac.h Ported fixes and improvements from Wireshark for RLC/MAC control block decoding. Part 1. 2012-10-10 19:43:37 +04:00
gsm_timer.cpp bts: Move the frame_number into the BTS sructure 2013-10-30 21:20:45 +01:00
gsm_timer.h move everything to src/ subdirectory 2012-06-14 20:48:42 +08:00
llc.cpp tbf: Use a hysteresis when discarding DL LLC frames 2015-04-02 12:34:48 +02:00
llc.h tbf: Use a hysteresis when discarding DL LLC frames 2015-04-02 12:34:48 +02:00
openbts_sock.cpp Always exit and don't try to recover 2014-06-15 19:28:51 +02:00
pcu_l1_if.cpp Always exit and don't try to recover 2014-06-15 19:28:51 +02:00
pcu_l1_if.h bts: Move the frame_number into the BTS sructure 2013-10-30 21:20:45 +01:00
pcu_main.cpp Always exit and don't try to recover 2014-06-15 19:28:51 +02:00
pcu_utils.h tbf: Use a hysteresis when discarding DL LLC frames 2015-04-02 12:34:48 +02:00
pcu_vty.c tbf: Use a hysteresis when discarding DL LLC frames 2015-04-02 12:34:48 +02:00
pcu_vty.h VTY implementation 2012-07-13 12:30:03 +02:00
pcuif_proto.h Add RSSI of data blocks to PCU interface 2013-03-17 17:16:18 +01:00
poll_controller.cpp poll_controller: Be stricter with the timeout handling 2014-09-10 19:19:58 +02:00
poll_controller.h misc: Do not mix struct/class in the forward declaration 2014-07-02 14:48:44 +02:00
rlc.cpp tbf, ...: Make the fields in the dl/ul struct member variables 2014-08-07 16:12:05 +02:00
rlc.h tbf, ...: Make the fields in the dl/ul struct member variables 2014-08-07 16:12:05 +02:00
sba.cpp sba: Move freeing a sba into a central place 2013-10-30 21:24:12 +01:00
sba.h misc: Do not mix struct/class in the forward declaration 2014-07-02 14:48:44 +02:00
sysmo_l1_fwd.c Adding direct access to DSP of sysmoBTS for PDTCH traffice 2012-12-18 10:47:28 +01:00
sysmo_l1_hw.c l1if: Include string.h to fix possible coverity issue 2013-12-12 14:32:33 +01:00
sysmo_l1_if.c pcu: Fix log message 2015-02-26 16:24:32 +01:00
sysmo_l1_if.h Adding direct access to DSP of sysmoBTS for PDTCH traffice 2012-12-18 10:47:28 +01:00
sysmo_sock.cpp Always exit and don't try to recover 2014-06-15 19:28:51 +02:00
ta.cpp tbf: Update the timing advance for the new tlli based on the old one 2013-10-30 21:24:13 +01:00
ta.h tbf: Update the timing advance for the new tlli based on the old one 2013-10-30 21:24:13 +01:00
tbf.cpp tbf: Implement delayed release of a downlink TBF 2015-03-25 12:32:35 +01:00
tbf.h tbf: Implement delayed release of a downlink TBF 2015-03-25 12:32:35 +01:00
tbf.txt Doc: Update on README and tbf.txt 2012-12-18 10:04:03 +01:00
tbf_dl.cpp tbf: Use a hysteresis when discarding DL LLC frames 2015-04-02 12:34:48 +02:00
tbf_ul.cpp tbf: Split out UL/DL TBF methods into separate files 2014-08-12 19:24:49 +02:00