Commit Graph
100 Commits
Author SHA1 Message Date
Robert Schmidt 198822aa17 Remove any slice-related information from OAI 2020-07-01 10:10:48 +02:00
Robert Schmidt 9f26028ded Default pre-processor: efficiently build UE list 2020-07-01 10:10:48 +02:00
Robert Schmidt 41de51b187 Format to dynamically handle UL SCHED 2020-07-01 10:10:48 +02:00
Robert Schmidt 5d1d2bcd1c Configurable Default Scheduler DL Algo 2020-07-01 10:10:48 +02:00
Robert Schmidt 36cd697b62 Add Maximum Throughput scheduler, wbCqi
Selects the UE with the highest CQI. If two UEs have the same CQI,
choses the one with highest number of bytes in RLC queue. Allocates as
many RBGs as possible, and potentially continues with the next UE.
2020-07-01 10:10:48 +02:00
Robert Schmidt a0b331415f Add Proportional Fair scheduler, wbCqi
Selects UE with highest coefficient. Allocates until there are no more
RBGs to allocate, or UE has no more data. In the latter case, continues
with the next UE (second-highest coefficient).
2020-07-01 10:10:48 +02:00
Robert Schmidt dc5357ca13 Format to dynamically handle default DL SCHED algo 2020-07-01 10:10:48 +02:00
Robert Schmidt 31ad66e146 Bugfix RR DL: a retx UE might not be allocated again 2020-07-01 10:10:48 +02:00
Robert Schmidt 1401d21081 Default SCHED RR algo: optimize algo and defer RB calc.
- Loop only to next UE instead of jumping multiple

- mark used RBGs in rbg_mask

- Only calculate number of RBs based on CQI when UE is selected, instead
of calculating for all UEs which might be unnecessary.

- When looping the list of UEs for RB allocation, remove UEs that have
no data anymore instead of skipping them.
2020-07-01 10:10:48 +02:00
Robert Schmidt b06dadbdb0 Bugfix DLSCH: only warn when retx with less RB
The preprocessor pre-allocates a CCE. Thus, when arriving at the check
for the number of RBs for retransmission, it is too late to skip the UE.
Therefore, only print a warning.

The default schedulers allocate a correct amount of RBs for
retransmissions, therefore it is ok.
2020-07-01 10:10:48 +02:00
Robert Schmidt 71647eb4ef DLSCH: limit LC bytes according to preprocessor 2020-07-01 10:10:48 +02:00
Robert Schmidt 476d58a8de Log TBS in every window 2020-07-01 10:10:48 +02:00
Robert Schmidt 9d5a46dcfa UE: Set correct selected PLMN Identity 2020-07-01 10:10:48 +02:00
Robert Schmidt d2cc43b4e7 UE: Print all SIB1 decoded PLMNs 2020-07-01 10:10:48 +02:00
Robert Schmidt f895a28645 FlexRAN: Manage PLMNs 2020-07-01 10:10:48 +02:00
Robert Schmidt df3f7e1ecf FlexRAN: Enable MME adding/removing 2020-07-01 10:10:48 +02:00
Robert Schmidt 1363a53dd0 S1AP: Only register MME if we do not know it yet 2020-07-01 10:10:48 +02:00
Robert Schmidt b01d63ba4e Do not check for register_enb_pending
The test seemingly ensures that this code block is hit only once.
However, if we enable later activation of MMEs, it will be hit a second
(and third, ...) time. The only thing in guards against, though, is an
INIT message to the L1L2 thread, when register_enb_pending == 0, which
should only be sent once.  Therefore, functionality won't be changed if
register_enb_pending becomes negative, and the assert can be removed.
2020-07-01 10:10:48 +02:00
Robert Schmidt 9072101a1a Correctly decode IMSI also when not integrity protected 2020-07-01 10:10:48 +02:00
Robert Schmidt c5fdcd85cc Bugfix FlexRAN: if a UE is in RRC but not S1AP, treat as no bug 2020-07-01 10:10:48 +02:00
Robert Schmidt 0e4ff0ecb4 L2 sim: space RA in time 2020-04-10 00:09:36 +02:00
Robert Schmidt 23fb00a248 Fix: telnet use right variable names 2020-04-10 00:09:36 +02:00
Robert Schmidt a56be93e80 Reduce CPU load in PHY stub UE (L2 sim)
Instead of looping over UEs and all DL config Req/HI DCI0, loop first
over all DL config Req/HI DCI0, and for each, match UE.  Lowers CPU
traffic for high traffic situations.
2020-04-10 00:09:36 +02:00
Robert Schmidt 4df3157a7a L2: do not overwrite FAPI message, correct check 2020-04-10 00:09:36 +02:00
Robert Schmidt 0bef57e2d4 L2 sim: fix PDU_index test 2020-04-10 00:09:36 +02:00
Robert Schmidt 382b815fa4 Remove AssertFatal from UCI handlers 2020-04-10 00:09:36 +02:00
Robert Schmidt 8f450f0e51 DL PP: consider the last RBG might be smaller 2020-04-10 00:09:36 +02:00
Robert Schmidt 1372e02206 Check for CCE allocation in UL PP 2020-04-06 13:56:59 +02:00
Robert Schmidt 36ebfe04f6 Use CCE_try_allocate_ulsch() in ULSCH 2020-04-06 13:56:59 +02:00
Robert Schmidt c76af0a142 Check for CCE allocation in DL PP 2020-04-06 13:56:56 +02:00
Robert Schmidt ed6e5ce832 Use CCE_try_allocate_dlsch() 2020-04-06 13:56:31 +02:00
Robert Schmidt 6b3b0b0b8b Final CCE allocation check: print message on fail 2020-04-06 13:56:31 +02:00
Robert Schmidt 88d156478f CCE_allocation_infeasible(): log only debug 2020-04-06 13:56:31 +02:00
Robert Schmidt 5443c7a792 fill_nfapi_dlsch_config() takes index for filling 2020-04-06 13:56:31 +02:00
Robert Schmidt 0f46f17c1c UL PP can change retx freq allocation 2020-04-06 13:56:31 +02:00
Robert Schmidt 24fb5e9c80 add adaptive HARQ UL 2020-04-06 13:56:31 +02:00
Robert Schmidt 9256a9e813 Clean up schedule_ulsch_rnti() 2020-04-06 13:56:31 +02:00
Robert Schmidt c9a921504c TEST: TPC + TA cleaned up in DLSCH 2020-04-06 13:56:31 +02:00
Robert Schmidt fd2e5fee96 Clean up schedule_dlsch() 2020-04-06 13:56:31 +02:00
Robert Schmidt 2f32448707 Correctly handle 2ms Sched. Reqs 2020-04-06 13:56:31 +02:00
Robert Schmidt a3bbbd0630 Lock PRACH region through vrb_map_UL 2020-04-06 13:56:31 +02:00
Robert Schmidt abc65b1d86 Reimplement UL PP 2020-04-06 13:56:31 +02:00
Robert Schmidt 8bf7a13ffa Remove first_rb from ULSCH scheduler 2020-04-06 13:56:31 +02:00
Robert Schmidt 8a84e2d92e Rewrite assign_max_mcs_min_rb() more concisely 2020-04-06 13:56:31 +02:00
Robert Schmidt 10bd164ad4 UL PP: Remove UE sorting and slicing 2020-04-06 13:56:31 +02:00
Robert Schmidt 9b4725ad0b Shortened UL-PP, remove CC and slicing 2020-04-06 13:56:31 +02:00
Robert Schmidt 4250f8eaec ULSCH: remove CC loop, remove variables or limit scope 2020-04-06 13:56:31 +02:00
Robert Schmidt 1670b4521e Reimplement the DLSCH preprocessor
This refactors the preprocessor. The new preprocessor implements the
same scheduling strategy (Modified Round-Robin: give resources according
to round-robin, then group) but should be fairer by changing every time
the RR start UE (i.e., 1st TTI UE 0 starts, 2nd TTI UE 1, etc) when the
UE number is not a divisor/multiple of the RBG size (and the last RBG is
often smaller). This also removes all unneeded code of the preprocessor
such as allocate(), positioning(), etc.
2020-04-06 13:56:27 +02:00
Robert Schmidt eb0af3a5e0 Simplify DLSCH code
* do not check rlc_ind()
* Simplify retransmission part and remove nb_rb_available var
* Simplify new transmission code
* Simplify fill_DLSCH_dci(), avoid unnecessary copies
* fix: first check No. RBs, then check CCE alloc
2020-04-06 13:43:52 +02:00
Robert Schmidt eeaa5a99d0 RLC: _req() accepts max TB size, _ind() not
Previously, the various rlc_*_ind() functions had a parameter to enable
the MAC to specify the max TB size that a subsequent call to the
corresponding rlc_*_req() (!) function would return. This patch removes
this parameter from the rlc_*_ind() functions and makes the parameter
working that is already in the rlc_*_req() functions.
2020-04-06 13:43:52 +02:00
Robert Schmidt 5c153ca0d2 Move release and RA control to own function, call once for every UE 2020-04-06 13:43:52 +02:00
Robert Schmidt 97a1bd105c store_dlsch_buffer() works per CC, checks only active LCs
store_dlsch_buffer() puts the RLC buffer status results in the
UE_TEMPLATE, which is per-CC. Since the DLSCH scheduler works per-CC,
too, we pass the right CC. However, this is not strictly necessary, as
we could do this once before every CC, and it might be updated.
2020-04-06 13:43:52 +02:00
Robert Schmidt 2e9f391a0a Store active LCs in MAC, remove unneeded headers 2020-04-06 13:43:52 +02:00
Robert Schmidt 5420e74032 Efficient RB estimation through binary search 2020-04-01 11:13:58 +02:00
Robert Schmidt 8ffe5b4920 Rename UE_list_t to UE_info_t, UE_list_t separate struct
UE_list_t is now used as a separate list. It can be e.g. used in the
scheduler to mark groups of users. The original UE_list_t is renamed to
UE_info_t to reflect that it is a container for information about UEs.
2020-04-01 10:47:02 +02:00
Robert Schmidt 7c92456338 Remove DL Slicing-related variables 2020-04-01 10:38:47 +02:00
Robert Schmidt fd6618dc1c Simplify preprocessor, retain functionality
* Simplify store_dlsch_buffer()
* Simplify assign_rbs_required()
* Simplify dlsch_scheduler_pre_processor_partitioning()
* Simplify dlsch_scheduler_pre_processor_accounting() and dlsch_scheduler_pre_processor_accounting_allocate()
* Simplify allocation printing

The original functions used in the fairRR scheduler have been moved to
eNB_scheduler_fairRR
2020-04-01 08:49:26 +02:00
Robert Schmidt 4462e2d710 Remove unused/broken code in preprocessor
* Remove MIMO_mode_indicator: it is simply not used ATM
* Remove min_rb_unit as parameter: function auto-detects
* Remove commented code
* Remove slice sharing/multiplexing: it is broken
* Remove UE sorting, add UE with add_new_ue() in MAC
  - UE sorting is useless overhead on every iteration, instead it should
    be governed by a scheduling algorithm (e.g., RR or PF)
  - The MAC keeps a UE list and automatically adds a UE
  - UE_list empty, set head to -1
* Remove slice_positioning: the slicing functionality is broken
* Remove unused/untested code
2020-04-01 08:49:26 +02:00
Robert Schmidt 8d3fa4dc22 Simplify dlsch_scheduler_pre_processor_reset()
The original reset() function used in fairRR has been moved to
eNB_scheduler_fairRR.c
2020-04-01 08:49:26 +02:00
Robert Schmidt ff766786a8 Remove mbsfn_flag from schedule_ue_spec(), simplify pre_processor interface 2020-04-01 08:49:26 +02:00
Robert Schmidt 8e72b1364a Remove sf0 DC limitation 2020-04-01 08:49:26 +02:00
Robert Schmidt cd480271af Remove everything related to TM5 in pre_processor 2020-04-01 08:49:26 +02:00
Robert Schmidt 99301f438f Call schedule_ue_spec() once for each CC 2020-04-01 08:49:26 +02:00
Robert Schmidt 81fb7628c5 get_min_rb_unit(): all channel bandwidths 2020-04-01 08:49:26 +02:00
Robert Schmidt ffc4f464f5 Remove useless mac_proto.h include
When a header is changed, all including files need to be recompiled,
too. Thus, including a header needlessly all over the place drives
compile times up without any reason.
2020-04-01 08:49:26 +02:00
Robert Schmidt 1efd2b428b Remove useless MAC/defs.h file 2020-04-01 08:49:26 +02:00
Robert Schmidt 5e0d6253b8 Fix: search UE in ULSCH when handling UCI 2020-04-01 08:49:26 +02:00
Robert Schmidt 8a47fa484c Handle residual MAC PDU < 0 gracefully 2020-03-24 17:54:08 +01:00
Robert Schmidt daefb67c82 Fix: correct check for dummy-traffic 2020-03-24 17:54:08 +01:00
Robert Schmidt 69c16efe07 Fix: check that UE RRC config files are found 2020-03-24 17:54:08 +01:00
Robert Schmidt 2c21e8229c Fix: correctly set context before calling pdcp_run() 2020-03-24 17:54:08 +01:00
Robert Schmidt 8a589f5b08 Fix: rx_indication length is in bytes 2020-03-24 15:54:45 +01:00
Robert Schmidt df0bc30e28 Make function static inline, not inline
inline alone does only define a function without a corresponding
declaration. static solves this problem
2020-03-24 15:41:54 +01:00
Robert Schmidt 0de3c73475 Place MBMS tun fd into single int 2020-03-10 17:38:24 +01:00
Robert Schmidt 84482489e4 Reformat phy_stub_UE.c with clang-format 2020-03-08 20:34:20 +01:00
Robert Schmidt fa7ace4b1d Reimplement dl_config_req_UE_MAC() more concisely 2020-03-08 18:34:00 +01:00
Robert Schmidt 34e7952944 CI: Multi. UEs handled by 1 thread (no races) in l2sim 2020-03-08 18:33:34 +01:00
Robert Schmidt 719667895c Prevent memory leak in L2 sim due to NFAPI 2020-03-08 18:33:34 +01:00
Robert Schmidt 6ec6c8b261 Request CQI in all NFAPI modes (i.e., also for L2 sim) 2020-03-08 18:33:34 +01:00
Robert Schmidt 6866be7175 Trigger ULSCH CQI ind only when instructed 2020-03-08 18:33:34 +01:00
Robert Schmidt 943f907ae1 Send correct ULSCH CQI indication message in L2 sim 2020-03-08 18:33:34 +01:00
Robert Schmidt b34a0e2f54 Increase (fixed) PHR for UE phy stub mode (L2 sim) 2020-03-05 16:06:02 +01:00
Robert Schmidt 8af8836c4b Call oai_nfapi_cqi_indication() to send cqi_indications 2020-03-05 16:04:44 +01:00
Robert Schmidt 15a2767562 Don't call fill_ulsch_cqi_indication_UE_MAC()
This functions fills the ULSCH CQI indication message incorrectly. Also,
it should only be triggered when the eNB requests CSI. We disable it
here and a subsequent commit enables it again.
2020-03-05 16:04:44 +01:00
Robert Schmidt c321f9b5a3 Make UE mem alloc for UL_INFO only once in PHY stub mode 2020-03-05 16:04:44 +01:00
Robert Schmidt 5f851d45b3 Fill UE RX Indication Rel9 to prevent error message 2020-03-05 16:04:44 +01:00
Robert Schmidt 05577be422 Reduce logging verbosity and levels 2020-03-04 13:38:04 +01:00
Robert Schmidt a51dc94e8b Set correct UE ID in Kenb Refresh Req
NAS triggered the Kenb Refresh Req always for (hardcoded) UE 0. This
fixes this by setting the correct UE ID.

An effect of this was that the Kenb would always be set for UE 0,
regardless for which UE it was actually intended. This led for integrity
check failures for every UE with ID > 0.
2020-03-04 13:38:04 +01:00
Robert Schmidt dabe2ae7ab FlexRAN: remove unused import in protocol def 2020-01-20 14:05:05 +01:00
Robert Schmidt 1c8c839f65 FlexRAN: Reformat code for X2 HO NetControl activation 2020-01-20 14:05:05 +01:00
Robert Schmidt e33be3ccd3 FlexRAN: Re-enable the soft-restart, it works 2020-01-20 14:05:05 +01:00
Robert Schmidt c6e389ed4c FlexRAN: assert if out of memory 2020-01-20 14:05:05 +01:00
Robert Schmidt a87220d376 Add S1AP control module for FlexRAN with status monitoring support 2020-01-20 14:05:05 +01:00
Robert Schmidt 44fdb23f15 FlexRAN: fix RRC protobuf definition 2020-01-20 11:35:35 +01:00
Robert Schmidt 6a581d903b Add FlexRAN protobuf definition for S1AP 2020-01-20 11:35:35 +01:00
Robert Schmidt d2b1e6aa9a FlexRAN: report employed splits to controller 2020-01-20 11:35:35 +01:00
Robert Schmidt a8b4a62b82 Read RU config before FlexRAN to allow split identification 2020-01-20 11:35:35 +01:00
Robert Schmidt f87c1cbb92 FlexRAN refactor+format MAC stats function 2020-01-20 11:35:35 +01:00
Robert Schmidt b6d466d772 FlexRAN: reimplement timers without ITTI
The timer code used to trigger periodic statistics message sending used
ITTI. Together with a high frequency reporting (e.g. 1ms), this resulted
in high CPU usage. This commit reimplements this:
* using a thread that is synchronized to the RU (if there is no MAC, we
  assume there is no RU generating a tick so we create the tick source
  ourselves)
* no RB trees but plain arrays
* smaller interface for users
* slight user interface changes
* remove stopped timer state: such timer might be simply removed
* remove one-shot timers
2020-01-20 11:35:35 +01:00
Robert Schmidt 233affc9dd FlexRAN: include header, not C file 2020-01-20 11:34:54 +01:00