Commit Graph
100 Commits
Author SHA1 Message Date
Cedric Roux 3f8c8b73e2 nr rlc: change retx logic
When t_poll_retransmit expires we need to consider an SDU for
retransmission.

We used to take the first SDU (which could be a segment, not a full SDU)
of the wait list and put it in the retransmit list.

When testing with some UE (Amarisoft UE) a bad behavior was detected.

This is what happens for the SDU with SN 6 (for illustration purpose).

The gNB is sending an SDU in several pieces (it is segmented).

slot n:     rlc sn 6 [1 .. 119[   p=0   RECEIVED
slot n+x:   rlc sn 6 ]120 .. 180[ p=0   RECEIVED
slot n+x+y: rlc sn 6 ]181 .. 210] p=1   not RECEIVED

Then when t_poll_retransmit expires rlc retransmits only the PDU of
slot n (with p=1 this time) and the UE replies with ack 6. So nothing
happens on the gnb side.
(We would have expected ack 7 + nack 6 181..end.)

Then after t_poll_retransmit expires again rlc retransmits only PDU
of slot n and the UE still replies with ack 6.

This goes on forever (or some other timeout occurs.)

The logic is now changed.

When t_poll_retransmit expires we transfer all the SDUs in the wait list
having the same SN as the head of the wait list into the retransmit list.

Testing with Amarisoft UE, it seems to work properly.
2023-08-15 13:16:36 +02:00
Cedric Roux 70b66a8644 nr rlc: let the tests be runnable with run_tests.sh 2023-08-01 12:11:39 +02:00
Cedric Roux a20bfc9695 remove NGAP_MAX_DRBS_PER_UE, replace by MAX_DRBS_PER_UE 2023-07-28 14:03:26 +02:00
Cedric Roux 284b57acbf bugfix: put constants in correct file
The RLC tests were not compiling because of the include of

    openair2/RRC/NR/rrc_gNB_radio_bearers.h

by

    openair2/LAYER2/nr_rlc/nr_rlc_entity.h

which does not seem correct/necessary to start with.

The only thing needed by nr_rlc_entity.h from rrc_gNB_radio_bearers.h
is MAX_DRBS_PER_UE which can be defined in common/platform_constants.h
like NGAP_MAX_PDU_SESSION.
2023-07-28 11:43:48 +02:00
Cedric Roux 325dcf939e remove unused RRC_FIRST_RECONF 2023-07-26 16:26:46 +02:00
Cedric Roux 6c8f7ae17b NR RRC: send "init context setup resp" after receiving reconfig from ue 2023-07-25 11:25:15 +02:00
Cedric Roux 149ca8e190 nrUE: quick fix for compatibility with Open5GS 2023-07-18 15:01:11 +02:00
Cedric Roux ad8612abd6 Import T documentation from wiki 2023-07-13 10:29:33 +02:00
Cedric Roux 8a2a5015e6 T tracer tools: fix memory leaks, clang warnings
- Fix memory leaks detected by ASan
- Initialize variables that are flagged by compiler
- C struct initializer: x:y needs to be .x=y
2023-07-13 10:29:33 +02:00
Cedric Roux 74ae831cf9 nr sib1: add mandatory fields for FDD 2023-06-20 09:38:14 +02:00
Cedric Roux 2778fd560f bladerf: have it functional (lte only, no nr)
At Eurecom now we only have Nuand bladeRF 2.0 (bladerf2) and those
calibration calls fail, so let's remove them. Maybe they are needed
for other boards, but we can't test at Eurecom. In case of problems
with other boards, contact us.
2023-06-15 17:14:24 +02:00
Cedric Roux 8561a0f764 asn1: properly initialize variables for uper_decode() and aper_decode() 2023-06-12 16:15:57 +02:00
Cedric Roux 46f0e348f1 e1: fix security 2023-06-11 12:28:56 +02:00
Cedric Roux c0c3a737ed asn1c: use better version of asn1c
We don't work much on asn1c. The version we use has several bugs.
There is an active community out there that fixes bugs and improves
asn1c. Let's use their version.
2023-06-01 18:26:00 +02:00
Cedric Roux a4ae28fdd6 ci: activate DRB ciphering and integrity protection
We need to test security and integrity protection in the CI.

This commit activates ciphering+integrity protection for SRBs
and DRBs using nea2/nia2 for the amarisoft-ue + aw2s CI pipeline.
2023-06-01 11:01:03 +02:00
Cedric Roux 214596d3c6 bugfix: nea2 security: use correct bearer argument to init security 2023-06-01 11:01:03 +02:00
Cedric Roux c68549d861 modification of get_samplerate_and_bw(): add break where needed 2023-05-07 15:24:51 +02:00
Cedric Roux 6e5511b220 bugfix: use an array of size NGAP_MAX_DRBS_PER_UE for drb_priority
It may happen that the drb to configure is not 1, so we may need
this array in rrc_gNB_generate_dedicatedRRCReconfiguration().

Not tested, this commit is mostly to harmonize with other places in
openair2/RRC/NR/rrc_gNB.c
2023-04-15 21:26:24 +02:00
Cedric Roux bf10230185 bugfix: use correct index in array
Accelleran CU configures DRB ID 4, not 1, so we need to take index 3
in the array 'priority', not 0.

So let's use i-1 as it was before.
2023-04-15 20:20:10 +02:00
Cedric Roux 733c7e5e89 bugfix: change memory management of interface between PHY and MAC scheduler
This commit fixes a bug caused by global variables in the gNB_MAC_INST
structure used to transfer MAC scheduler's results to the PHY layer.

When using several threads in the PHY layer, it may happen that the
MAC scheduler is called a second time by the second PHY thread for the
next slot before the content of the global variables in the gNB_MAC_INST
structure used to store the result of the MAC scheduler for the current
slot have been consumed by the first thread, leading to unpredictable
results (all of them certainly wrong).

The solution is to introduce a small memory management module for the
interface between the PHY threads and the MAC scheduler. The MAC
scheduler now fills the data structures passed to it, and not a
global variable anymore. The PHY layer manages the structures and
ensures that no data is overwritten before being fully consumed by
the various threads of the PHY layer.

Some care has to be taken because several PHY threads will access the
same structures at the same time for a given slot (in read mode, so
it's okay). A mechanism of reference counting has thus been introduced.

Only one CC is supported. This restriction should not be too hard
to remove if/when needed. (The code before this commit does not seem
to work for more than one CC anyway.)
2023-04-05 16:39:12 +02:00
Cedric Roux 50bf571347 hack: see "Bye." message when quitting gnb running with aw2s
For some (unclear) reason, nr-softmodem with aw2s device does not print
"Bye." when stopping it with control+c, which is problematic in the CI.

This little hack solves the problem.

(Maybe not the right solution, to be changed if needed.)
2023-03-30 12:57:10 +02:00
Cedric Roux a4718d4a16 bugfix: LDPC decoding in the gNB: clear d properly
The d array has to be cleared at the first usage, which may not necessarily
be when new_rx is true. For example, in case of DTX detected for a first
transmission, the next transmission won't have new_rx true, so d won't be
cleared, containing data from a previous transmission. Or when a LDPC
decoding is cancelled for a segment when new_rx is true, a decoding for
a retransmission will not clear d because then new_rx will not be true.
(Yes, the logic of cancellation will be changed in the future, but the
changes will be orthogonal to the ones of this commit.)

new_rx is removed.
2023-03-23 17:18:50 +01:00
Cedric Roux 39c42bca41 bugfix: bad usage of T() in the log module
The LOG_x() and T() logic was wrong.

LOG_x() goes to the terminal when T_stdout == 1 or T_stdout == 2.
It goes to T() when T_stdout == 0 or T_stdout == 2.

The call T() does the check for T_stdout == 0 or T_stdout == 2.
So we have to call it out of the check "if (T_stdout)".

So, well, let's fix that.

Some spacing was fixed as well. clang-format may complain.
2023-03-10 12:10:08 +01:00
Cedric Roux 3084ae89dd bugfix: set max priority to trx_usrp_write_thread 2023-03-04 16:42:01 +01:00
Cedric Roux 6315dae4ca minor typo 2023-02-25 13:45:52 +01:00
Cedric Roux f64ed09574 bugfix: increase size of nrb
We can have 273 RBs, so 8 bits to store the number of RBs is not enough.
16 bits ought to be enough for anybody.
2023-02-23 21:36:46 +01:00
Cedric Roux a4eeefc13f support old versions of openssl
Needed for ubuntu 16 and centos 7.
2023-02-23 21:35:26 +01:00
Cedric Roux 16b0b5f0ec bugfix: length type too short
On a setup, length of cellGroupConfig was > 255.

Using uint8_t to store the length is thus wrong
and gives a bad encoding of the cellGroupConfig.

So let's use uint32_t to store length instead of uint8_t.
2023-02-15 22:50:40 +01:00
Cedric Roux 344f8b75e6 bugfix: try to handle USRP devices correctly to avoid crashes
Some problems when we release the device:

    - Calling the destructors is wrong, we should set the pointers to NULL.
      These are shared pointers, this is C++.
    - We have to stop rx by doing a STREAM_MODE_STOP_CONTINUOUS.
    - The end-of-burst for tx has been simplified.

This problem when we acquire the device:

    - Calling get_rx_stream() many times seems to be problematic.

We now should have a better behavior with UHD 4.2 and N310. (Hopefully with
others too.) No crash seen so far.
2023-02-04 23:37:58 +01:00
Cedric Roux 698122d6d2 bugfix: fix sdap
There was a problem testing accelleran cu + oai du + oai ue + rfsim
because accelleran cu configures sdap header for UL but not for DL
and our sdap implementation deals with either "no sdap header at all"
or "sdap headers for both UL and DL".

The code has been modified to deal with the other cases
("sdap header for UL but not DL" and "sdap header for DL but not UL").

has_sdapDLheader and has_sdapULheader have been removed, has_sdap
too, replaced by has_sdap_rx and has_sdap_tx, which makes the code
independant of ue or gnb and is, I think, clearer.

With this work, accelleran cu + oai du + oai ue + rfsim works. We
also have oai gnb + oai ue + rfsim functional for all cases of sdap
header configuration (this won't happen for users, the code of gnb has to
be modified to have sdap header for only ul or only dl). It also works
with a COTS UE for all cases of sdap configuration (again, this won't
happen for users, only "no sdap header" and "sdap headers for both
UL and DL" exist in oai gnb with the current code).

To have other cases, you can edit openair2/RRC/NR/rrc_gNB_radio_bearers.c
and search for NR_SDAP_Config__sdap_HeaderDL_present in there.

To enable sdap, run the gnb with the command line argument
--gNBs.[0].enable_sdap 1
2023-01-22 00:09:22 +01:00
Cedric Roux 565b8482f9 remove patch in install_simde_from_source()
upstream took it
2023-01-18 13:01:37 +01:00
Cedric Roux fc7bcceca9 fix a small bug and add a log for when recvfrom() fails
recvfrom() returns ssize_t, not size_t.
2023-01-18 10:23:37 +01:00
Cedric Roux 08e57ca313 bugfix: use correct size in malloc() 2023-01-17 15:03:44 +01:00
Cedric Roux 3674a6f0f2 bugfix: initialize all variables of the 'context' thing
There was a problem in rrc_gNB_process_NGAP_PDUSESSION_RELEASE_COMMAND()
where we PROTOCOL_CTXT_SET_BY_INSTANCE() that does not initialize
eNB_index leading to a crash later on in pdcp. So let's initialize
everything.

Plus, while we're here, use do { } while(0) in the macros, just to avoid
problems like:

  if (condition)
    macro;

Without do { } while(0) only the first statement of the macro is done
in the if. (Not sure if the code has the problem somewhere, but doesn't
hurt to fix.)
2023-01-17 13:19:30 +01:00
Cedric Roux 924d88bbf9 bugfix: avoid a crash when oai_exit is set
There was a crash when we exit the nr softmodem with AW2S device.
The array rxbase[] was surely freed() by some other thread, so
let's not access it after detecting oai_exit != 0.

We also need to unblock a possible reader thread. The chosen way to
do may be not the best. To be checked.
2023-01-17 13:06:25 +01:00
Cedric Roux 551aee172a bugfix CU/DU: use correct IP address for GTP-U
Not only the teid is received from the DU but also the IP address. We
have to use it too.

Also, don't connect the UDP socket. The parameter remote_s_address in the
configuration file must not be used, at least not for gtp-u because the
IP address is received from the DU (plus for later, for multiple DUs, it
won't work at all).
2023-01-09 15:19:07 +01:00
Cedric Roux 3cd4b3c3fa fixes some issues found by review
- AssertFatal() in nr_rlc_srb0_recv_sdu() if the srb0 is not found
- do_RRCSetup() may return -1, handle it properly
- do_RRCReject() may return -1, handle it properly
- remove one switch in rrc_gNB_generate_RRCReject()
2022-11-29 15:22:46 +01:00
Cedric Roux 5d92e0d730 NR DU: nr rrc: hotfix: set default priority correctly
Using Accelleran CU, the DRB ID is 4 (not 1), we need to set and access
the array 'drb_priority' correctly in the DU specific functions.

Before this commit, we had the following error:
[NR_MAC]   ASN1 message CellGroupConfig encoding failed (rlc-BearerToAddModList, 18446744073709551615)!
2022-11-28 15:33:13 +01:00
Cedric Roux 231c2f3c5f gnb: remove srb0 shared global variable - use RLC module instead 2022-11-25 17:31:03 +01:00
Cedric Roux 7853673db7 f1 du: little hackish fix to get correct drb
I have a more complex fix that I'll put in a later merge request. That does
the job for the time being.
2022-11-09 17:00:11 +01:00
Cedric Roux df45820f71 f1 du: get IP address for UL UP GTP tunnel from the right place 2022-11-09 15:43:22 +01:00
Cedric Roux d2f456e089 bugfix: call nr_rlc_get_available_tx_space() with lcid, not rb id 2022-11-09 15:42:50 +01:00
Cedric Roux d4356efc70 f1 du: get list of sst/sd from configuration file
may not be the best place to get data from conf file, to be refined later
if needed
2022-11-09 12:40:41 +01:00
Cedric Roux 3b42e46cf0 nr rlc: add enum for rlc mode (am, um, or tm) 2022-09-06 15:58:47 +02:00
Cedric Roux 2c08302c89 nr rlc: fix in process_control_pdu()
the following:

         if (cur_wait_list == entity->wait_end)
           end_wait_list = prev_wait_list;

was done after cur_wait_list is updated to its new value, but the old value
has to be used in this test. So end_wait_list was not set properly.

This was leading to random crashes later on because then entity->wait_list
was NULL but entity->wait_end was not (because of the bug fixed by this
commit).

The new value for cur_wait_list is also now set using prev_wait_list->next
just before the goto, as done in other places in the code.

Also "cur" was removed, for it has no purpose and makes the code harder
to understand.
2022-09-05 16:29:51 +02:00
Cedric Roux af6059d4ab clang-format: open-brace at column one to start the body of a function 2022-08-26 20:14:40 +02:00
Cedric Roux 3e2d88907b use bool, not int 2022-08-18 17:07:04 +02:00
Cedric Roux 0618812554 T tracer: simplify
- don't call exit() if get_message() fails, simply terminate the thread and
  disable the T tracer
- T_dont_fork disappears, monitor_and_kill() as well, so now it's only 2
  processes: the main (enb/gnb/ue) and the local tracer
2022-08-16 14:44:23 +02:00
Cedric Roux 1b029be058 nr rlc stats: make avg time to tx optional
Introduce the function nr_rlc_activate_avg_time_to_tx() to
activate/deactivate collection of avg time to tx stats (which
may have an impact on realtime processing, so better not compute
them when not needed).

Fix a little bug in time_average_get_average() for when there is not stat.
2022-08-12 12:19:09 +02:00
Cedric Roux fad3f23164 Add RLC stats: avg time to tx for an RLC SDU 2022-08-12 12:19:09 +02:00
Cedric Roux ee7aca5d05 ngap: minor fix: access the array correctly 2022-08-09 12:22:40 +02:00
Cedric Roux 3155ec6df8 gtp: small fix: set E if there is an extension header 2022-08-03 10:34:12 +02:00
Cedric Roux 667b8e5eed nr_pdcp: nia1 implementation
We reuse existing code from eia1 for actual computation. Maybe not the most
efficient. To be revised if needed.

Some hacks in CMakeLists.txt were introduced to compile
phy simulators. To be removed at some point.
2022-07-21 16:59:38 +02:00
Cedric Roux 4505e780c5 nr rlc: minor: update tests
Behavior for ack/nack generation has changed not too long ago but the tests
were not checked and updated.
2022-06-23 11:44:01 +02:00
Cedric Roux 2802418c34 remove debug printf 2022-06-21 16:43:54 +02:00
Cedric Roux d0fa56b1de compilation fix 2022-06-20 15:15:11 +02:00
Cedric Roux 5cd674483b Merge remote-tracking branch 'origin/develop' into F1_interop_ACC_n78 2022-06-19 18:41:27 +02:00
Cedric Roux 2bed0352fd f1: remove hardcoded value, set to what is in develop 2022-06-19 18:33:57 +02:00
Cedric Roux 2521e46593 Merge remote-tracking branch 'origin/F1C_extensions_develop' into F1_interop_ACC_n78
Conflicts:
	openair2/F1AP/f1ap_du_interface_management.c
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
	openair2/LAYER2/NR_MAC_gNB/main.c
	openair2/RRC/NR/MESSAGES/asn1_msg.c
	openair2/RRC/NR/MESSAGES/asn1_msg.h
	openair2/RRC/NR/rrc_gNB.c
	openair3/ocp-gtpu/gtp_itf.cpp
2022-06-15 11:28:37 +02:00
Cedric Roux 33b69bdf30 nr rlc: bugfix: use hard-coded mapping between drb ID and mac lcid
This will probably impact negatively the Accelleran interoperability
but the previous version is not correct and breaks the oai nr ue.

To be checked in a CU/DU scenario with Accelleran.
2022-06-13 18:28:07 +02:00
Cedric Roux 1ad8f254c2 Merge remote-tracking branch 'origin/develop' into F1_interop_ACC_n78 2022-06-13 16:59:59 +02:00
Cedric Roux f71766c3ee Merge remote-tracking branch 'origin/develop' into F1_interop_ACC_n78
Conflicts:
	openair2/F1AP/f1ap_du_ue_context_management.c
	openair2/LAYER2/NR_MAC_gNB/gNB_scheduler_dlsch.c
	openair2/RRC/NR/MESSAGES/asn1_msg.h
	openair2/RRC/NR/rrc_gNB.c
	openair3/ocp-gtpu/gtp_itf.cpp

There were some important conflicts in openair3/ocp-gtpu/gtp_itf.cpp
I rewrote a bit the function Gtpv1uHandleGpdu(). It might have been
done wrongly.
To be tested and fixed if needed.

To redo the merge, if needed:
git checkout 9b2a163ebb
git merge 5ea828e149
2022-06-08 15:48:24 +02:00
Cedric Roux 4b4e419aba nr rlc: fix NR RLC AM status generation
Several problems were found and fixed.
2022-04-21 16:47:27 +02:00
Cedric Roux 8b0be9cf87 nr rlc: speedup ack/nack reception
The code completely changed, expect problems.
2022-04-15 12:20:02 +02:00
Cedric Roux 78f0c8ff29 nr rlc: harmonize computation of sn_count
Functions generate_missing() and missing_size() had different
computations of sn_count. Not sure if it is a problem or not,
but let's do the same in both functions.

Hopefully the computation is correct.
2022-02-20 16:00:54 +01:00
Cedric Roux 7c652df820 nr rlc: bugfix - so_end was used instead of sn_end 2022-02-20 15:56:56 +01:00
Cedric Roux 52d75940be fix macpdu2wireshark
Somehow this file was in a bad state...
2022-02-11 10:36:00 +01:00
Cedric Roux e5a3bcdc33 nr-ue: fix T tracer
T tracer was not functional anymore. because init_tpools() was called
before T_Config_Init().

The problem was that init_tpools() creates some threads and T_Config_Init()
does call fork() and the child process (which is the one running the
softmodem, the parent process is used to monitor it, this is the design
of the T tracer, maybe to change at some point, it's too complicated) has
no thread after the fork(). The threads created by init_tpools() are gone.
Game over.

In conclusion: T_Config_Init() has to be called very early in the life of
the softmodem, at least before init_tpools().
2022-02-09 14:07:41 +01:00
Cedric Roux 1409e3bcb4 nr-ue: fix T tracer
T tracer was not functional anymore. because init_tpools() was called
before T_Config_Init().

The problem was that init_tpools() creates some threads and T_Config_Init()
does call fork() and the child process (which is the one running the
softmodem, the parent process is used to monitor it, this is the design
of the T tracer, maybe to change at some point, it's too complicated) has
no thread after the fork(). The threads created by init_tpools() are gone.
Game over.

In conclusion: T_Config_Init() has to be called very early in the life of
the softmodem, at least before init_tpools().
2022-02-09 10:22:01 +01:00
Cedric Roux 92c5115f13 lte: fixes in EpsNetworkFeatureSupport.c
We have to eat all the bytes, not only one.
We have to get the bit we want from the right buffer position.

Note: only one bit is supported from this "EPS network feature support",
not sure how to properly deal with it, so let's keep the code as it is.

This commit was made because the MAGMA MME sends "EPS network feature
support" to the UE in the NAS message "Attach Accept". OAI MME does not
send this. So the bug about size was not seen.
2022-02-04 16:32:49 +01:00
Cedric Roux fe4c988c97 nr ue: fix security setting of DRB
Maybe this fix won't work for non-openair gNB. We use the same keys and
algorithms as for SRBs, which is what openair gNB does.

(I hope I'm right there.)

To be changed if needed.
2022-01-24 15:56:45 +01:00
Cedric Roux de72d53c21 nr ue: fix rlc and pdcp tick generation
Ticks have to come every millisecond. The code was calling tick
only for DL slots.

(This whole logic will change at some point, this tick mechanism is not
good. But in the meantime, let's fix anyway.)
2022-01-11 11:04:48 +01:00
Cedric Roux fe81d31ea3 compilation warnings fixes
The previous commit created two new warnings:

    warning: 'avgs' may be used uninitialized in this function
    warning: 'seq_index' may be used uninitialized in this function

This commit removes them.

Maybe it's not the correct solution. To be fixed if needed.
2022-01-11 11:04:00 +01:00
Cedric Roux 0806734254 T tracer: add option to have both T traces and regular console logs
Use --T_stdout 2 to have both.

--T_stdout 0 is still the way to have only T traces and no console logs.
2022-01-11 11:04:00 +01:00
Cedric Roux d67b46a1a5 nr pdcp: introduce a thread to do pdcp_data_ind
Before this commit, pdcp_data_ind is done in the realtime PHY/MAC
thread, and this may have an impact on realtime performances.

Let's introduce a new thread to do the job, freeing the realtime
PHY/MAC logic.

This is not a minor change. It may have positive and/or negative
effects. To be tested carefully.
2021-12-13 15:00:45 +01:00
Cedric Roux a764c7c932 nr rlc: trigger status report when t-reassembly expires
and update tests that fail because of the new logic
2021-12-07 11:46:18 +01:00
Cedric Roux f64d2c58cb nr rlc: reduce "buffer full" log 2021-12-07 11:46:18 +01:00
Cedric Roux d4c4fdf7f3 T tracer: add harq pid in nr ul/dl/dl retx traces 2021-11-25 15:59:40 +01:00
Cedric Roux 1495a6b01f nr rlc: speedup buffer status computation
TX and ReTX should be faster now (for RLC AM, UM and TM).

RLC AM Status (function nr_rlc_entity_am.c:status_size()) was not modified,
so its CPU usage is the same as before. (It's more complicated to change
than for TX and ReTX.)
2021-11-25 11:27:49 +01:00
Cedric Roux b65b0e2eaf T tracer: trace MAC DL retransmission PDUs in the gnb
and adapt macpdu2wireshark to deal with them
2021-11-25 11:27:17 +01:00
Cedric Roux 2fb5ec3a5f T tracer: trace MAC DL retransmission PDUs in the gnb
and adapt macpdu2wireshark to deal with them
2021-11-23 11:28:20 +00:00
Cedric Roux 0429d3d410 nr-rlc: bugfix: copy correct part of PDUs in case of segmentation 2021-09-08 17:18:20 +01:00
Cedric Roux 5ac4ae361a minor: T tracer: be more verbose for DLSCH DCI 2021-09-07 13:33:45 +02:00
Cedric Roux 36bae67eef nr-rlc: bugfix: copy correct part of PDUs in case of segmentation 2021-09-07 13:16:39 +02:00
Cedric Roux 58904eaab8 cleanup: replace "eNB" by "gNB" as it should be 2021-09-07 13:08:14 +02:00
Cedric Roux 4877d56a12 nr: add security section to gnb config files
The configuration files named "gnb*conf" have been modified.
Other configuration files were left unmodified.
2021-09-06 11:06:47 +02:00
Cedric Roux eeca38368e gnb sa: improve security
Note: some modifications have been done to the UE too, but for syntactic
reasons. The UE may fail to work, not tested.

For the UE, we have the problem of handling properly SecurityModeCommand.
We don't verify its integrity. This is a bit complicated to handle properly
and may require some API changes in the PDCP layer. So, as of today, the
integrity of this message is not verified.

Also, NSA mode has been touched, but it should not be a problem. But not
tested, so not sure.
2021-09-06 11:06:47 +02:00
Cedric Roux 6bf2874711 nr: add T trace for msg4 (rrc setup) 2021-08-23 17:09:25 +02:00
Cedric Roux 4a2c0b1eff bugfix: fix allocation of RBGs for retransmission
When there is a retransmission, we want to use the same number of RBs.

The RBs are allocated by groups (RBGs).

In some cases (like a cell with 25 PRBs), the last RBG contains less RBs.
So in case of a retransmission, if this last RBG was used before we need
to reuse it to have the same number of RBs. If not, we will use more RBs
for the retransmission than the previous transmission.

In an experiment with two UEs (quectel modules) it was seen that when a
retransmission happens with a different number of RBs then the UE is not
happy at all, leading to way more NACKs in the harq processes than should
happen (actually the first NACK was not a NACK at all, but the eNB did
interpret it as a NACK; so the next transmission should simply be discarded
by the UE that successfully received the first transmission; instead the UE
fails to decode the data and sends a NACK, a real one this time).

Maybe it's not the correct solution, but it improve things, there are
much less NACKs.
2021-07-21 23:22:48 +02:00
Cedric Roux f6e0321860 hack: do not use BCH RBs for DL scheduling in subframe 0
The problem is that when using those RBs with MCS 28 we may exceed the
code rate 0.93 and according to 36.213 7.1.7 the UE may skip decoding
PDSCH entirely in this case.

This is a hack. The real solution is to check that the code rate is below
0.93 for each scheduling decision and, I don't know, reduce the MCS if the
code rate is above, so that in the end it is below. That means that we need
a proper resource grid for the configuration of the eNB and this is not an
easy thing (at least from my point of view) given all the possible
configurations for the eNB, so I prefer not to do it rather than do something
incorrect, thus this hack.

The problem of this hack is that we won't use all the available RBs for
scheduling, potentially reducing the maximum throughput achievable.

To be fixed properly at some time, by someone who understands fully the
resource grid and all the possible combinations (fdd/tdd, number of
antennas, whatever else).
2021-07-21 23:22:02 +02:00
Cedric Roux 02cedc0ca1 nr pdcp: bugfix: better nettle version detection
This fix may fail to work.

we should stop supporting old versions of nettle at some point.
2021-05-22 12:56:52 +02:00
Cedric Roux e26c1f6f6d nr pdcp: bugfix: bad HFN computation at PDU reception 2021-05-22 12:56:43 +02:00
Cedric Roux e257f76dd0 nr: rlc: minor: set log level to error for max retx reached
Just in case there is a problem, better to see it.

max retx reached means "radio link failure". We should do
something about it at some point. For the moment, let's
inform the user that there is a problem.

We can set back to LOG_D later in time when we deal with it
properly.
2021-05-18 10:30:26 +02:00
Cedric Roux 913f402280 nr: pdcp: accept "infinity" for t-reordering
"infinity" is -1 in the code.
2021-05-18 10:30:26 +02:00
Cedric Roux 8393744c3f nr: bugfix: bad check
38.323 5.2.2.1 says:

    "if t-Reordering is running, and if RX_DELIV >= RX_REORD"

Let's do as is said.
2021-05-18 10:30:26 +02:00
Cedric Roux d2c9b7cb5a nr pdcp: bugfix: reset integrity context
CMAC_Init has to be called between each usage of the cmac context.
2021-04-29 15:15:18 +02:00
Cedric Roux 3633bcd367 nr pdcp: bugfixes
- use bearer-1 in compute_t of integrity NIA2
- compare integrity at the right place in nr_pdcp_entity_recv_pdu
- proper handling of security parameters settings (algos, keys)
2021-04-27 14:46:42 +02:00
Cedric Roux a8adcf862c sa: nr pdcp: we don't use the hash table anymore 2021-04-27 10:00:24 +02:00
Cedric Roux 9135d4200f sa: nr pdcp: improve security
This commit implements integrity and security settings for nr pdcp. It will
only work for SRBs.

This commit has not been tested. It may fail to work completely. To be checked.
2021-04-26 11:43:44 +02:00
Cedric Roux cca4ce9bf1 minor: indentation 2021-04-22 10:39:27 +02:00