Commit Graph
7843 Commits
Author SHA1 Message Date
Robert Schmidt 77f2ffcdfb FlexRAN: call the agent_rrc_xface with the mod_id 2018-09-03 18:10:28 +02:00
Robert Schmidt cca5c1b71a FlexRAN: use correct identifiers for PDCP, RRC
* give the correct UE_id instead an index of the protobuf message (they can
  diverge from each other)
* in the PDCP part of the RAN API, the RAN API has to make the conversion UE_id
  (MAC) to UID (PDCP)
* a follow up commit could clean up the interfaces:
  - the MAC functions take the UE_id
  - the RRC functions take the RNTI
  - the PDCP functions take the UID
  this would mean the caller has to find those ID but would decrease
  computations since the RAN API functions do not have to do that themselves
2018-09-03 18:10:28 +02:00
Robert Schmidt 97c69dc4a4 Drop traffic in PDCP if RLC buffer is full
If the buffer in the RLC is full, testing the buffer state over and over again
slows the DL traffic down. In order to circumvent this, the PDCP will drop any
data during a configurable time (compile-time) before it delivers data to RLC
again.

To change this, see the constant TM_SKIP_FULL_BUF_MS in pdcp.h.
2018-09-03 18:10:28 +02:00
Robert Schmidt 3b80c73f93 FlexRAN: Loop over UEs using UE_id, not index 2018-09-03 18:10:28 +02:00
Robert Schmidt 9399bed23a FlexRAN MAC: align allocated memory for lfds 2018-09-03 18:10:28 +02:00
Navid Nikaein 1adbaa7a54 when restarting, re-init MAC UE_list 2018-09-03 18:10:28 +02:00
Navid Nikaein 6c4f58a0a0 move UE_list/slice init in dedicated functions 2018-09-03 18:10:28 +02:00
Robert Schmidt 0bb6a19f71 only initialize RC.mac once 2018-09-03 18:10:28 +02:00
Robert Schmidt da35afb01b fix: repair RC.mac memory allocation
- there can be a race between the FlexRAN agent reading the RC.mac and its
  allocation in main.c
- In order to circumvent this, change the allocation by allocating
  everything "into" a local variable
- finally "make it visible" by storing  the pointer in RC.mac
2018-09-03 18:10:28 +02:00
Robert Schmidt 62957b97d8 bugfix FlexRAN: only write to file if file is not null 2018-09-03 18:10:28 +02:00
Robert Schmidt 1e9f3235d3 fix: avoid AssertFatal() in load_module_shlib()
don't fail in library utility function, return with error code instead and let
application decide what is best on how to proceed
2018-09-03 18:10:28 +02:00
Robert Schmidt 604ec25a68 improve soft-restarting messages 2018-09-03 18:10:28 +02:00
Robert Schmidt d24e17f0f7 improve load_module_shlib()
* check whether a library has been loaded before; in this case, don't allocate
  new memory but load from old library again
* vital parameters, previous exit_fun are checked by AssertFatal()
* structure has changed a bit to make it easier to follow (instead of nested
  ifs includes one goto to the end of the function)
* formatting has been improved
2018-09-03 18:10:28 +02:00
Robert Schmidt 175d28ee35 bugfixes kill_eNB_proc()
* put mutex lock around instance_prach
* destroy attributes
2018-09-03 18:10:28 +02:00
Robert Schmidt 917b9ca0c2 correct ITTI task name 2018-09-03 18:10:28 +02:00
Robert Schmidt c4077f3cf7 cell reconfiguration/restart: take protobuf, perform in ENB_APP
* instead of the lengthy YAML parsing, can now handle protobuf message
* after setting the parameters, send a message to ENB_APP to perform it
* old YAML way still works
2018-09-03 18:10:28 +02:00
Robert Schmidt f0670154b3 Correctly join RU threads
* join pthread_FH (ru_thread) once all condition variables have been set
* join RU FHTX only if it has been started (check as for pthread_create())
* join PRACH thread in the monolithic case
* send broadcast on condition variable cond_eNBs, as there can be multiple
  waits on it
* integrate stop_ru(*ru) into kill_RU_proc(*ru)
* Correct memory freeing
2018-09-03 18:10:28 +02:00
Robert Schmidt 2e1dfb5b3e place oai_exit test after wait_on_condition() in threads 2018-09-03 18:10:28 +02:00
Robert Schmidt c56b5af00e bugfix: kill td/te threads only if initialized
* init_td_thread()/init_te_thread() are only initialized depending on condition
  get_nprocs() > 2 && codingw
* apply the same the same for the functions kill_td_thread()/kill_te_thread()
2018-09-03 18:10:28 +02:00
Robert Schmidt 35b3a2af14 Reorganize TASK_L2L1 loop 2018-09-03 18:10:28 +02:00
Robert Schmidt 0846460753 show which task sends TERMINATE_MESSAGE to which task 2018-09-03 18:10:28 +02:00
Robert Schmidt ef0d86564c when sending config report, copy slice config to new mem 2018-09-03 18:10:28 +02:00
Robert Schmidt 7a0c00330b put intra-/inter slice sharing within slice config 2018-09-03 18:10:28 +02:00
Robert Schmidt 44481a5649 FlexRAN: improve info messages 2018-09-03 18:10:28 +02:00
Robert Schmidt 472ebf5622 mark UL slice sorting overwriting as TODO 2018-09-03 18:10:28 +02:00
Robert Schmidt e94b0bde51 FlexRAN fixes
* properly allocate memory for scheduler name/sorting
* free mem of sc_update, include todo for slice_config
* set has_x to one, add fct whether sorting update necessary
* set n_ul/n_dl to correct value after every loop iteration
* support for delete of multiple slices
* allocate memory for scheduler name in slice_config
* check that we really set the scheduler
2018-09-03 18:10:28 +02:00
Robert Schmidt 0c0e7b6ead simplify control flow 2018-09-03 18:10:28 +02:00
Robert Schmidt bd041a34aa use changed RAN API, set scheduler for new slice 2018-09-03 18:10:28 +02:00
Robert Schmidt 6e5a2f45ce FlexRAN: set deleted slice configuration to zero 2018-09-03 18:10:28 +02:00
Robert Schmidt 8804319322 FlexRAN MAC: before verifying slice params, set default vals
- in order to facilitate the steps as verification and parameter setting,
  slices are "filled up" with default values:
  * if it is an update, with the values of the concerned slice
  * if it is a new one, with the parameters of slice 0
- because of this, it can be assumed that all slices have all parameters
2018-09-03 18:10:28 +02:00
Robert Schmidt d8c2943f60 FlexRAN RAN API: slice creation does not set default vals 2018-09-03 18:10:28 +02:00
Robert Schmidt 328a464e37 remove update_sched slice param variables
- whether a scheduler callback has to be changed is now handled by the agent
2018-09-03 18:10:28 +02:00
Robert Schmidt 766e8a5bbe link to scheduler function in mac init fct 2018-09-03 18:10:28 +02:00
Robert Schmidt 0778481f75 FlexRAN RAN API: extend scheduler set&get functions
- setter & getter have been renamed
- setter sets scheduler name and links to the corresponding function
- it also returns whether it succeeded (whether the scheduler callback is
  non-null)
- it performs a strdup on the scheduler name
- the remove function free the scheduler function name
2018-09-03 18:10:28 +02:00
Robert Schmidt 21f6609472 FlexRAN: move slice param verification to agent
- until now, on every iteration, the scheduler checked for changed parameter
  (and verified some)
- this functionality moves to the FlexRAN Agent, which verifies all parameters
  * individually, e.g. Max MCS <= 28 for DL
  * group-based, e.g. the sum of slice percentages is <= 100
- slice configuration changes are only applied if all verifications pass
- it is assumed in the scheduler, that configuration passed from outside is
  correct and can be used "as-is"

fix accounting setting
2018-09-03 18:10:28 +02:00
Robert Schmidt 6b3dd8716b FlexRAN: set values of removed slices to 0 2018-09-03 18:10:28 +02:00
Robert Schmidt 088b1d5a8d refine MAC Debug output
- uncomment "Couldn't find RNTI for UE X" in UE_RNTI() and rb_alloc in
  pre_processor_reset() as they only inflate the debug output with little
  benefited
- "doing ue_schedule_spec" is now displayed for individual UEs (and individual
  CCs)
- show messages when not scheduling UE in ue_schedule_spec() due to invalid
  slice or if not in RRC_CONNECTED
2018-09-03 18:10:28 +02:00
Robert Schmidt 11e45be9c5 fix: resort UE_list after slice multiplexing
- slice multiplexing resorts UE_list for its purposes with restoring the
  original order
- in order to keep the order in UE_list, resort to original order after
  multiplexing
- ideally, this would happen in the multiplexing but currently, the slice_idx
  is not passed to multiplexing (it does not care), so this cannot be done ATM
2018-09-03 18:10:28 +02:00
Robert Schmidt 8039cd40f5 share the allocation array rballoc_sub between slices 2018-09-03 18:10:28 +02:00
Robert Schmidt 44d1eb8015 preprocessor reset: avoid unnecessary iterations 2018-09-03 18:10:28 +02:00
Robert Schmidt 5ceba4a2a6 FlexRAN: lock sc_update with mutex
Prevent sc_update from being changed by an incoming slice reconfiguration
change while writing data to the scheduler
2018-09-03 18:10:28 +02:00
Robert Schmidt 7b8c5cea52 FlexRAN: handle incoming UE-slice association message 2018-09-03 18:10:28 +02:00
Robert Schmidt 3a78d85f5e FlexRAN: Handle enb_config_reply reconfiguration message 2018-09-03 18:10:28 +02:00
Robert Schmidt 3d8586a5bf FlexRAN: Send Slice ID to which UE belongs in UE config reply 2018-09-03 18:10:28 +02:00
Robert Schmidt d93d73fe9b FlexRAN: Send the Slice Configuration in enb_config_reply 2018-09-03 18:10:28 +02:00
Robert Schmidt 92a3b07bca FlexRAN: send slice ID to which UE belongs + reformat
- flexran_agent_ue_config_reply() and flexran_agent_ue_state_change() send
  slice_id
2018-09-03 18:10:28 +02:00
Robert Schmidt fcaf237182 FlexRAN: Handle slice configuration
Incoming slice configuration changes are buffered in an intermediate structure.
The MAC scheduler periodically polls the agent about changes. If there has been
a slice configuration change, apply it.
2018-09-03 18:10:28 +02:00
Robert Schmidt 9d75b5c3b7 Add FlexRAN RAN API for slice configuration
adds support for:
* create/remove slices
* change UE-slice association
* read/write slice parameters
* find slice index via ID
2018-09-03 18:10:28 +02:00
Robert Schmidt de4ebe0914 remove warnings (comment concerned lines) 2018-09-03 18:10:28 +02:00
Robert Schmidt b29e20d4dd MAC sched slicing: sort only relevant slices 2018-09-03 18:10:28 +02:00