aboutsummaryrefslogtreecommitdiffstats
path: root/src/pcu_main.cpp
AgeCommit message (Collapse)AuthorFilesLines
2016-01-26wipmax/wipMax1-0/+6
2016-01-22Get rid of duplicated timer codeMax1-4/+4
Sponsored-by: On-Waves ehf
2015-11-30pcu: Enable dl-tbf-idle-time and idle-ack-delay by defaultJacob Erlbeck1-0/+2
Currently these are enabled in the default config file. Since CoDel is enabled by default in main() but should not be used without at least dl-tbf-idle-time, the current default config may lead to packet loss and performance problems. This commit enables both features to provide a good (GPRS) performance experience even without a configuration. Sponsored-by: On-Waves ehf
2015-11-17stats: Enable stats subsystemJacob Erlbeck1-0/+2
Sponsored-by: On-Waves ehf
2015-08-17ns: Add logging supportJacob Erlbeck1-0/+1
Currently there is not support for Network Service (NS) logging. This commit adds the missing definitions and sets the default level to INFO. Further configuration can now be done with the 'logging level ns' VTY command. Sponsored-by: On-Waves ehf
2015-07-21pcu: Enable LLC CoDel by defaultJacob Erlbeck1-0/+2
Currently CoDel is disabled by default. This commit enables CoDel on start up with the default interval time, equivalent to the 'queue codel' VTY command. To disable CoDel, use the 'no queue codel' command. Sponsored-by: On-Waves ehf
2015-07-16pcu: Use alloc_algorithm_dynamic by defaultJacob Erlbeck1-1/+1
The dynamic algorithm behaves like B until there are no TFI left. This commit changes the default algorithm to to former. Ticket: #1934 Sponsored-by: On-Waves ehf
2015-06-22ms: Reduce DL CS level if only a few LLC bytes are leftJacob Erlbeck1-0/+1
If just a few bytes are left to send to the MS, it makes sense to reduce the coding scheme level to increase the throughput. This has been shown by Chen and Goodman in their paper "Theoretical Analysis of GPRS Throughput and Delay". See their throughput over C/I measurement graphs (figures 4 and 5 in the paper) for details. This commit implements a simplified CS downgrade feature for the downlink. The coding scheme will be downgraded if there are only a few octets are left to be send over the TBF (see the downgrade-threshold command below) and the NACK rate is not low (the CS will not get degraded on a high quality RF link). As an exception, CS-3 will be degraded to CS-1, since CS-2 does not improve the throughput in general when a few small packets are sent and the signal fades slowly (see Chen/Goodman). The following VTY command is added to the config-pcu node: - cs downgrade-threshold <1-10000> - cs no downgrade-threshold to set the threshold of the number of remaining bytes to be RLC/MAC encoded. The CS will only be reduced, if the number is below the threshold. The 'no' command disables this feature completely. The default value is 200 octets. Sponsored-by: On-Waves ehf
2015-06-22ms: Add UL CS selection based on L1 link qualityJacob Erlbeck1-0/+9
Currently the UL CS values are set to the corresponding DL CS value, eventually limited by a maximum value. This approach does not reflect the general situation of the RF link between ME and BTS, which is rather asymmetric e.g. due to a lower degree of TX efficiency of the built-in antenna. This means, that UL and DL CS control should be decoupled for better results. This commit adds automatic UL CS selection based on the link quality measurement parameter. Each coding scheme is mapped to a link quality range. If the link quality value leaves that range, the current UL CS value is increased/decreased accordingly. This value will be copied when the next PACKET_UPLINK_ACK_NACK or PACKET_UPLINK_ASSIGMENT is sent to the MS. The following VTY command will be added to the config-pcu node: - cs link-quality-ranges cs1 <0-35> cs2 <0-35> <0-35> cs3 <0-35> <0-35> cs4 <0-35> which sets the ranges for the four coding schemes. For instance the example below reflects the current default values: cs link-quality-ranges cs1 6 cs2 5 8 cs3 7 13 cs4 12 set the following ranges, where the overlapping is used to configure a hysteresis: CS1: -inf .. 6 CS2: 5 .. 8 CS3: 7 .. 13 CS4: 12 .. inf Sponsored-by: On-Waves ehf
2015-06-08ms: Add support for maximum CS valuesJacob Erlbeck1-0/+2
Currently the CS values can be increased to CS4 even when the "cs" configuration command has been used with a lower value. The "cs" command just sets the initial coding scheme, so other means are needed to limit the selection. One approach is to use the CS flags passed in SI, but these are currently ignored. To make it possible to limit the CS selection by configuring the PCU, this commit adds the following VTY commands to config-pcu: - cs max <1-4> Limit DL and UL CS to the given value - cs max <1-4> <1-4> Limit DL and UL CS separately (DL first) - no cs max Don't limit Ticket: #1674 Sponsored-by: On-Waves ehf
2015-06-08tbf: Add adaptive DL CS adjustmentJacob Erlbeck1-0/+3
To cope with transmission failures due to bad radio conditions, a different coding scheme with more redundance can be used. This commit adds an implemenation that is based on the Ack/Nack ratio per PACKET DOWNLINK ACK/NACK message received from the MS. Basically the CS level is decreased, if the block error rate goes above cs_adj_upper_limit (default 33%), and it is increased, if the rate drops below cs_adj_lower_limit (default 10%). Only blocks that have been encoded with the current CS are taken into account. Note that this approach doesn't measure the MS->BTS conditions and that the measurement values reported by the MS are not taken into account. Ticket: #1739 Sponsored-by: On-Waves ehf
2015-06-05pcu: Set ms_idle_sec to 60sJacob Erlbeck1-0/+1
Since the timing advance storage has been removed, the TA values are lost, when the last TBF of a single MS is freed. The TA storage has at least saved the last 30 TA values. So now in more cases a wrong TA value can be transmitted to an MS. Note that this also could have happened before the removal of the storage, especially if more than 30 MS were in use. This commit changes the default value of ms_idle_sec to 60s which is higher than default value for T3314 (44s, see TS 24.008, 11.2.2), after which the SGSN will have to start paging anyway. In that case, a RACH request will be triggered, that will trigger an update of the TA value in the PCU. Sponsored-by: On-Waves ehf
2015-05-28tbf: Remove TimingAdvance storageJacob Erlbeck1-2/+0
Currently the TA storage stores up to 30 TLLI->TA mappings, if more entries are created the oldest one is dropped. In theory this can lead to missing TA information if many MS are present. This commit removes the TimingAdvance class completely, since the TA value is now stored in the GprsMs objects. Note that the GprsMs objects are currently not kept after the TBFs have detached from them, so the TA values are now kept for a shorter time than before. Ticket: #1674 Sponsored-by: On-Waves ehf
2015-04-09pcu: Call bssgp_set_log_ss(DBSSGP) in main()Jacob Erlbeck1-0/+1
Currently the BSSGP functions in libosmocore do not log correctly to DBSSGP since the DBSSGP variable in common_vty.c is left uninitialized. This commit adds the call to bssgp_set_log_ss() to inform libosmocore which sub system id it shall use for BSSGP. Sponsored-by: On-Waves ehf
2014-06-15Always exit and don't try to recoverDaniel Willmann1-2/+1
The current code tries to recover from dropped connections and resets the pcu state so it can keep running. However, this never worked correctly which is why the -e option is used. This option exits the pcu as soon as the internal state needs to be reset. This patch removes this option and makes this behaviour default. Ticket: SYS#390 Sponsored-by: On-Waves ehf
2013-11-26debug_diagram: Remove the special debug_diagram compilation modeHolger Hans Peter Freyther1-7/+0
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-11misc: Fix a potential leak on config parsingHolger Hans Peter Freyther1-1/+2
Fixes: Coverity CID 1040949
2013-10-30ta: Create TimingAdvance class and make it belong to the BTSHolger Hans Peter Freyther1-1/+1
This allows us to easily flush the state in case a PCU/BTS connection is lost.
2013-10-30bts: Introduce a singleton for the BTS and use it in the codeHolger Hans Peter Freyther1-7/+1
Compared to the previous code there will be a branch to get the global pointer so the code will be slightly slower than the previous version but it allows us to start creating objects but still use the code from C. It is best approach I have found so far. One downside of C++ is that by default talloc will not be used (unless we override the new operator to use talloc. Right now we need to memset the C data structure by hand. The benefit of enforcing a better structure should is more important though.
2013-10-30bts: Move struct gprs_rlcmac_bts and other structs into a bts.hHolger Hans Peter Freyther1-0/+1
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-07-27misc: Add an option exit/quit when the BSSGP is supposed to be destroyedHolger Hans Peter Freyther1-1/+6
The PCU does not properly re-set the state when the connection to the BTS is lost (and the SGSN potentially is re-started during that). This results in the BSSGP BVCI > 1 remaining blocked and no data will be accepted by the SGSN. Add the '-e' option and exit the PCU when the BSSGP/NS are getting destroyed.
2013-05-13Added timing advance support for up and downlink TBFsAndreas Eversberg1-0/+2
The timing advance of any TBF is stored when it ends. Whenever a new TBF with the same TLLI is created (downlink TBF), the stored TA is recalled. This algorithm assumes that the mobile does not move too fast during transfer. Also the mobile must start a connection in order to get correct initial timing advance. This algorithm does not implement the timing advance procedure as defined in TS 04.60. To implement the standard timing advance procedure, the BTS must decode RACH on certain bursts, the mobile is expected to send them. This requires much more complexity to a transceiver like USRP/UmTRX or Calypso BTS. The algorithm was tested at TA >= 8 and works quite well.
2013-05-09Allow to enable realtime priority for the BTS processAndreas Eversberg1-1/+22
I ported the Holger's scheduling patch from sysmobts to osmo-pcu. This is usefull, if PCU uses direct access to the DSP of sysmobts. The latency to respond to a PH-READY_TO_SEND.ind may not be higher than 18ms. Currently we are using nice to increase our priority but for a heavily loaded cell this is not enough. Add an option to enable realtime scheduling and use it in the screenrc. Linux offers two realtime scheduling classes these are SCHED_FIFO and SCHED_RR. For SCHED_FIFO the process is running as long as possible (potentially taking all the CPU and never yielding it), for SCHED_RR the process can still be pre-empted at the end of the timeslice. Using SCHED_RR appears to be the more safe option as a run-a-way sysmobts process will not be able to take all the CPU time.
2013-03-19Make the code handle SIGTERM.Holger Hans Peter Freyther1-0/+1
This way the pcu can be easily stopped with a sysvinit script.
2013-03-16Use default 'alpha' value of 0Andreas Eversberg1-1/+1
Since we don't know the RX and TX parameters of the BTS that might be used with PCU, the MS should not adapt the TX power from the RX level. So the MS should always transmits with same power. Finding an 'alpha' and 'gamma' value that will result in a constant RX level at the BTS is a task of deployment.
2013-01-17pcu_main: Add '-V' to obtain the (compile) version of osmo-pcu0.1.00.1Harald Welte1-1/+6
2013-01-16Use global PCU's talloc context for all talloc callsAndreas Eversberg1-0/+2
This allows to track memory leaks of all memory that is allocated by talloc. Especially bitvector allocations is tracked now.
2012-12-18Adding flow chart diagram of ongoing TBFs and their eventsAndreas Eversberg1-0/+7
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-10-03Allow setting of seperate coding schemes for uplink and downlinkAndreas Eversberg1-2/+1
2012-09-27Set Alpha and Gamma at assingment messages for power controlAndreas Eversberg1-0/+1
The initial power control value Alpha must be set in SI13.
2012-09-23Statefull reset and unblock BVCs and sending flow control messagesAndreas Eversberg1-0/+1
The flow control interval can be set via VTY.
2012-07-15Adding multislot allocation algorithmAndreas Eversberg1-1/+1
2012-07-13multislot: Extracted "slot allocation algorithm" from tbf allocatorAndreas Eversberg1-0/+3
The current available algorithm only supports selecting a single slot for downlink/uplink. (In the future, a multislot algorithm will follow.)
2012-07-13Adding signal handler to allow clean exit of PCUAndreas Eversberg1-2/+51
The signal handler will end the main loop, so clean exit is performed. The allocated memory is dumped in order to detect memory leaks. All talloc functions use tall_pcu_ctx context instead of NULL, to track memory leaks.
2012-07-13logging: Add vty to allow definition/storage of debug levelsAndreas Eversberg1-2/+44
Note: This requires new libosomocore that allows to compile VTY headers with C++.
2012-07-12Merge branch 'jolly_new'Ivan Kluchnikov1-51/+80
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-06Minor fix of MCC, MNC optionsAndreas Eversberg1-2/+2
2012-07-06Cleanup of BSSGP code.Andreas Eversberg1-58/+8
The hack for resetting BSSGP instance is removed and now performed whenever the NS state changes to UNBLOCKED. The BSSGP instance is now created only once, as it should be. Received STATUS messages are ignored as they should be. The creation and destruction of BSSGP/NS instances is now handled by layer 1 interface alone.
2012-07-06Adding MCC/MNC spoof options to pcu_main.cppAndreas Eversberg1-2/+60
The option added is required to change PLMN that is announced to SGSN. This allows BTS to have a different PLMN. (Usefull for roaming in conjunction with simlock.)
2012-07-06RLC/MAC process makes use from attributes, received from PCU socketAndreas Eversberg1-1/+12
For OpenBTS interface and BSSGP, fixed values are still used.
2012-07-06Receive cell informations via PCU socket interfaceAndreas Eversberg1-1/+1
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-06remove dependencies to openbsc/osmoggsn internalsHarald Welte1-2/+2
...and link against libosmogb (part of libosmocore.git)
2012-07-03TBF acknowledged mode finished for both link directionsAndreas Eversberg1-0/+1
2012-06-27Work on RLCMAC layer. Integration of scheduler and new packet transferAndreas Eversberg1-0/+10
2012-06-26Merge branch 'jolly'Ivan Kluchnikov1-94/+0
Merged jolly branch with master, fixed conflicts.
2012-06-23Split of L1 interface to be used with OpenBTS or sysmo-BTSAndreas Eversberg1-94/+0
The OpenBTS socket functions are moved from main to pcu_l1_if.cpp. New sysmo_l1_if.cpp is introduced. It used special unix socket interface to connect to sysmo-BTS. This is required to access CCCH/RACH and info about cell layout. Traffic is also forwarded via this interface, but it direct access of L1 baseband DSP will be added soon. In order to handle ready-to-send requests above l1_if, the transmit queue (for downlink blocks) is moved to gprs_rlcmac.cpp. The TBF instance additionally holds TRX and TS info, but this is only a hack currently. TBF instance requires more details about allocated ressources in the future.
2012-06-18remove dependencies to openbsc/osmoggsn internalsHarald Welte1-2/+2
...and link against libosmogb (part of libosmocore.git)
2012-06-14move everything to src/ subdirectoryHarald Welte1-0/+191
The code corresponds to commit a9aa4777cc1144897a77dfb6c5c3d7325705251e in openbts-p2.8.git (Tue Jun 12 18:14:49 2012 +0400)