Commit Graph
3736 Commits
Author SHA1 Message Date
Jaroslava Fiedlerova 3b2355ce4c Merge remote-tracking branch 'origin/fix-ra-reduce-logs' into integration_2024_w05 2024-02-05 13:27:12 +01:00
Jaroslava Fiedlerova 3de71d11bf Merge remote-tracking branch 'origin/pdu-session-initial-setup' into integration_2024_w05 2024-02-05 09:27:10 +01:00
Jaroslava Fiedlerova 905fb9b6fd Merge remote-tracking branch 'origin/fix_computing_ssb_subcarrier_offset' into integration_2024_w05 2024-02-05 09:21:16 +01:00
Robert Schmidt 4a7d7975ce Send RRC UECapabilityEnquiry after reconfig, trigger UE update if necessary
We used to trigger the UECapabilityEnquiry right after
SecurityModeComplete, and before the RRCReconfiguration (which we call
"default" reconfiguration). However, 38.401 tells us that we should send
the RRCReconfiguration right after the SecurityModeComplete. In fact,
even though we get the UE capabilities, we cannot use them during this
reconfiguration, as we would first need to update the DU with a UE
Context Modification Request, which we cannot, as we just sent the UE
Context Setup Request, and the DU relies on first getting the
RRCReconfiguration.

Since we rely on a subsequent reconfiguration anyway, we can safely
trigger the UECapabilityEnquiry after RRCReconfigurationComplete.
(38.331 also says we can send UECapabilityEnquiry at any point.)

To cater for the possibility that there might not be any reconfiguration
coming afterwards, we check if a DRB has been set up. If not, we assume
a reconfiguration will come, and do not trigger one only for the UE
capabilities (this is what we do before this commit). If we already have
DRBs set up, they might have been set up during the "default" RRC
Reconfiguration, and another reconfiguration might not follow soon; in
this case, we trigger the reconfiguration by sending the UE capabilities
to the DU right away.
2024-02-03 11:28:43 +01:00
Robert Schmidt 0f100a6e94 Delay PDU session resource setup request if necessary
The next commit moves the UE Capability Enquiry after the first
reconfiguration. This has the effect that for some UEs (e.g., iPhone),
the Setup Requests come too close to each other, triggering RRC
Reconfigurations while previous transactions are ongoing.

I think the "true" solution would be to implement some tracking of
transactions across RRC, F1AP, E1AP, but this might require many
changes. For the moment, limit to delaying PDU session resource setups
to prevent above problem. Delaying is done using ITTI timers (to be able
to serve other UEs), waiting 10ms each time, up to 20 times (to not
deadlock the transaction -- after all, if the UE is unhappy, it will
drop the connection).
2024-02-03 11:28:43 +01:00
Robert Schmidt d6dd87ae8c RRC transaction IDs: clean up
- Put consistently transaction IDs
- Remove transaction IDs when transaction finished, or in places that do
  not trigger an RRC transaction
2024-02-03 11:28:43 +01:00
Robert Schmidt d2cd7c862a Add transactions IDs to logs for RRC reconfig/uecap enq 2024-02-03 11:28:43 +01:00
Robert Schmidt 8302a060fa RRC transactions: mark UE Capability transaction 2024-02-03 11:28:43 +01:00
Robert Schmidt 62200cdee5 RRC transactions: mark "no action" 2024-02-03 11:28:43 +01:00
Robert Schmidt c643abd83e DRB handling: handle E1AP default DRB logic properly 2024-02-03 11:28:43 +01:00
Robert Schmidt 6642b467e1 Implement PDU session estab through NGAP Initial UE Context Setup
This commit allows the gNB to handle PDU sessions that the core requests
to setup during the NGAP Initial UE Context Setup. Previously, we only
managed them as part of PDU Session Resource Setup Request.

The RRC will, depending on whether a PDU session is in the NGAP Initial
UE Context Setup, either directly trigger the Security Command, or first
do a bearer setup at the CU-UP. Some asserts have been lifted, as now
the PDU sessions might be present before the RRC Connection is fully
established.

Implement the correct forwarding of the bearers in an F1 UE Context
Setup Request message.

This solves bug #672.
2024-02-03 11:28:43 +01:00
Robert Schmidt c818e9b5fe F1 UE Ctxt modif response: look up PDU sessions 2024-02-03 11:28:43 +01:00
Robert Schmidt 59b69e240a correctly free NAS pdus: avoid possible double-frees 2024-02-03 11:28:43 +01:00
Robert Schmidt f81ec9c2cc Simplify RRC DRB handling code
Prior to this commit, the handling of DRBs is complex: first the RRC
"guessed" a DRB ID when setting up DRBs via E1AP (in
rrc_gNB_process_NGAP_PDUSESSION_SETUP_REQ()), and later chose one for
real in fill_DRB_Configlist() (called in
rrc_gNB_generate_dedicatedRRCReconfiguration()).

To simplify, remove fill_DRB_Configlist(), and instead allocate the DRB
using generateDRB() before sending the message via E1AP, in
rrc_gNB_generate_dedicatedRRCReconfiguration(). The rest of the logic is
the same.

For PDU sessions, always mark PDU sessions as "done" to match pdu
session state logic.
2024-02-03 11:28:43 +01:00
Robert Schmidt a47eab5262 F1 UE Ctxt modification: forward multiple PDU sessions, including NSSAI 2024-02-03 11:28:43 +01:00
Robert Schmidt 2800203eff Provide means to look-up if UE has a CU-UP
It might happen that a UE has no CU-UP (e.g., never requested a PDU
session). When triggering a release, we previously and implicitly
associated a CU-UP in that case. That is not good, and confusing.

This commit adds a function to look up if the UE has an associated
CU-UP. We only send a release if it is the case.

The function get_existing_cuup_for_ue() now instead verifies that a
CU-UP exist, and does not implicitly create an association (which might
be unwanted, see above).
2024-02-03 11:28:43 +01:00
Robert Schmidt 2494a7bc7c Remove unused variables 2024-02-03 11:28:43 +01:00
Robert Schmidt 5258acbf45 Remove unused variables in RRC 2024-02-03 11:28:43 +01:00
Robert Schmidt d5257ca820 Remove superfluous function, rename variable
The function rrc_gNB_process_RRCReconfigurationComplete() does almost
nothing, we can delete it.

The variable name ue_reconfiguration_after_reestablishment_counter is
misleading, as it counts all reconfigurations; rename to make it clear.
2024-02-03 11:28:43 +01:00
Robert Schmidt 1c2e4c7118 Remove drb_active array
The drb_active array keeps track of active DRBs. However, it only
replicates some of the information in established_drbs, and could lead
to a reuse of DRB IDs when two bearers are to be set up. Consider the
following:
1. trigger first DRB creation at RRC
2. DRB ID chosen from free drb_active entry
3. trigger second DRB creation at RRC
   -> The first reconfiguration has not been acknowledged
   -> drb_active is not marked as DRB_ACTIVE
4. The second DRB ID is chosen from a free drb_active entry, which is
   the same as in 2.

By reusing established_drbs everywhere, this cannot happen, as we
1. select the DRB to be used using next_available_drb() and then
2. use generateDRB(), which marks the DRB used
all from within fill_DRB_configList, which gives a new DRB.

The logic is still overly complex, though.
2024-02-03 11:28:43 +01:00
Robert Schmidt 37929dca6c Remove SRBs variable: it is simply not used 2024-02-03 11:28:43 +01:00
Robert Schmidt 3d0a7ecf28 DRB: do not activate in RRC, this is done through E1 2024-02-03 11:28:43 +01:00
Robert Schmidt 4b3b6b1e5e createDRBlist(): return NULL if no active DRB
If there are no active bearers, the function previously returned an
empty list. Return NULL if there are no bearers, so it is safe to call
this function even when no bearers are present. We can also pass it
every time to do_RRCReconfiguration(), which will not add an empty list
for DRBs.
2024-02-03 11:28:43 +01:00
Robert Schmidt 34b5e592f0 Add function to activate SRBs in gNB RRC
Create a single function to activate an SRB. This function derives the
corresponding keys, triggers the setup in PDCP, and marks the SRB as set
up, instead of doing all of this common functionality in individual
steps.  Use it at the corresponding places.
2024-02-03 11:28:40 +01:00
Robert Schmidt f9a8498566 RRC: forward 5G-S-TMSI for NGAP Initial UE Message
Only fill the 5G-S-TMSI if if is present, and set the bit in the
presenceMask.
2024-02-03 11:24:41 +01:00
Robert Schmidt 1ee89735a2 Store 5G-S-TMSI from UE if received
This commit implements retrieval of 5G-S-TMSI from Parts 1&2, or the
entire 5G-S-TMSI, depending on what the UE sends. Further, if it has
been retrieved, print a log of all constituent parts of it.

The UE-specific variable ng_5G_S_TMSI_Part2 is not needed, as we compute
the full 5G-S-TMSI as soon as we have Part2 (and 1).

The correct forwarding to the core is implemented in the following
commit.
2024-02-03 11:24:41 +01:00
Robert Schmidt 642b6429a3 Fix NGAP encoding of PDUsession failed
We did not give a cause value, and therefore NGAP's "PDU sessions
failed" encoding failed. Give a cause value in all cases, so that this
cannot happen anymore.

To prevent against this, put an AssertFatal() into the encoder that
stops if an internally sent message does not have a correct cause value
(we can at least select a default).

Print an info message for all failed PDU sessions.

In rrc_gNB_send_NGAP_INITIAL_CONTEXT_SETUP_RESP(): if a PDU session is
already established, don't count it as failed.
2024-02-03 11:24:41 +01:00
Robert Schmidt d536c115d2 Replace custom bitStr_to_uint64() with common implementation 2024-02-03 11:24:41 +01:00
Robert Schmidt 9a417ca61c Demote RRC log to debug 2024-02-03 11:24:41 +01:00
Robert Schmidt 4ed6c581ec gNB RRC: remove SA checks
If we are in one of these procedures, we basically must be in SA mode,
everything else is illogical. It also does not seem plausible to check
for this, as it is not apparent why only these couple of calls should
not be executed if not in SA. Hence, remove.
2024-02-03 11:24:41 +01:00
Robert Schmidt 674d9bcd8a rrc_handle_RRCReestablishmentRequest(): refactor to have single block for RRC Setup 2024-02-03 11:24:41 +01:00
Robert Schmidt f6a783344f Handle reestablishment from different PCI, simplified implementation
This implementation might work, but it simply triggers RRC setup on the new
DU when we might send a RRC reestablishment speeding up the whole
connection setup. For this:

- we should send the F1 UE context setup to the new DU
- we should still do the reestablishment, containing the reestablishment message

The latter should be sent once we received the F1 UE context setup
response. We don't need a new context. send a release to the old DU (and
don't release our own context!!).

We might also send the reestablishment to the UE encapsulated with the
F1 UE context setup response. Need to investigate if this is feasible
(because if the DU rejects [can that happen here?], the UE will still
send reestablishment complete -- what then?).

Also, we would need to send the E1 bearer context modification to the
CU-UP.
2024-02-03 11:24:41 +01:00
Robert Schmidt 4b81e9a481 Introduce UE flag for AS security
Keeping track if AS security is activated. This is important for a later
commit, where we use this to decide if we send a F1 UE Context Setup Req
with security command after receiving the E1 bearer context setup
response. The corresponding AssertFatal() removed in the same commit
implementing PDU session handling in NGAP Initial UE Context Setup.
2024-02-03 11:22:29 +01:00
Robert Schmidt 2e7d95746f RRC: demote various log levels 2024-02-02 15:37:06 +01:00
francescomani b70eba44a7 fix for computing ssb subcarrier offset 2024-02-02 09:21:40 +01:00
Francesco Mani 7086c5837f Fix in setting default timers 2024-02-01 11:45:24 +00:00
Robert Schmidt 940d582568 Remove write-only gNB's UE reestablishment cause 2024-01-31 17:41:44 +01:00
Robert Schmidt a2c7f0c0b3 Remove possible NG Initial Context Setup Resp in handler for request
38.401 Sec 8.1 asks for sending the Initial Context Setup Response after
a reconfiguration happened. Therefore, we can never send this message
directly from the handler in the Initial Context Setup Request
2024-01-31 17:41:44 +01:00
Robert Schmidt 9cfdf9bb01 Remove custom trigger bearer add/release code, does not work 2024-01-31 17:41:44 +01:00
francescomani 2b44c0c8b2 set default timers at init and add logging when timer expires 2024-01-30 16:10:54 +01:00
francescomani 6e4787a5d2 Merge remote-tracking branch 'origin/NR_reworking_timers' into integration_2024_w04 2024-01-29 09:41:09 +01:00
francescomani 82f38d86a5 Merge remote-tracking branch 'origin/NR_UE_prepare_msg3_payload_in_advance' into integration_2024_w04 2024-01-26 17:12:54 +01:00
Jaroslava Fiedlerova 3cc671897d Merge remote-tracking branch 'origin/e1-issue-712' into integration_2024_w04 2024-01-26 10:15:56 +01:00
Jaroslava Fiedlerova a0de76ca96 Merge remote-tracking branch 'origin/NR_UE_reworking_NOS1_bearer_configuration' into integration_2024_w04 2024-01-26 09:43:45 +01:00
Guido Casati 6fca568091 Minor improvements to code comments 2024-01-25 17:10:52 +01:00
Guido Casati 45ca753b24 Handling E1 connection loss on CU-CP
- it triggers the RRC callback after SCTP SHUTDOWN indication
- CUUP entity cleanup at RRC level
2024-01-25 17:10:52 +01:00
Guido Casati b9bfff3327 Minor improvements to E1 procedures readability 2024-01-25 17:10:52 +01:00
Guido Casati c8103f2905 Minor fix to E1 Setup Failure log 2024-01-25 17:10:52 +01:00
Guido Casati 7faabc6b45 Implementation E1 Setup Failure (8.2.3.3 of 3GPP TS 38.463)
- CU-CP replying to the CU-UP with a Setup Failure message in case of unsuccessfull E1 Setup Request
- message is decoded by the CU-UP, and stops the process
2024-01-25 17:10:48 +01:00
francescomani 65a8f07310 apply structure to sib timers 2024-01-24 14:26:06 +01:00