1. 09 Feb, 2024 9 commits
  2. 08 Feb, 2024 4 commits
  3. 06 Feb, 2024 2 commits
  4. 05 Feb, 2024 6 commits
  5. 03 Feb, 2024 19 commits
    • Robert Schmidt's avatar
      Send RRC UECapabilityEnquiry after reconfig, trigger UE update if necessary · 4a7d7975
      Robert Schmidt authored
      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.
      4a7d7975
    • Robert Schmidt's avatar
      Delay PDU session resource setup request if necessary · 0f100a6e
      Robert Schmidt authored
      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).
      0f100a6e
    • Robert Schmidt's avatar
      RRC transaction IDs: clean up · d6dd87ae
      Robert Schmidt authored
      - Put consistently transaction IDs
      - Remove transaction IDs when transaction finished, or in places that do
        not trigger an RRC transaction
      d6dd87ae
    • Robert Schmidt's avatar
      d2cd7c86
    • Robert Schmidt's avatar
      8302a060
    • Robert Schmidt's avatar
      RRC transactions: mark "no action" · 62200cde
      Robert Schmidt authored
      62200cde
    • Robert Schmidt's avatar
      c643abd8
    • Robert Schmidt's avatar
      Implement PDU session estab through NGAP Initial UE Context Setup · 6642b467
      Robert Schmidt authored
      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.
      6642b467
    • Robert Schmidt's avatar
      c818e9b5
    • Robert Schmidt's avatar
      59b69e24
    • Robert Schmidt's avatar
      Simplify RRC DRB handling code · f81ec9c2
      Robert Schmidt authored
      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.
      f81ec9c2
    • Robert Schmidt's avatar
    • Robert Schmidt's avatar
      Provide means to look-up if UE has a CU-UP · 2800203e
      Robert Schmidt authored
      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).
      2800203e
    • Robert Schmidt's avatar
      4c7080ec
    • Robert Schmidt's avatar
      E1 bearer ctxt setup handler: correct AssertFatal() · ce4ec296
      Robert Schmidt authored
      The number of tunnels corresponds to number of DRBs, so correctly
      compare tunnels and DRBs.
      ce4ec296
    • Robert Schmidt's avatar
      Remove unused variables · 2494a7bc
      Robert Schmidt authored
      2494a7bc
    • Robert Schmidt's avatar
      Remove unused variables in RRC · 5258acbf
      Robert Schmidt authored
      5258acbf
    • Robert Schmidt's avatar
      Remove superfluous function, rename variable · d5257ca8
      Robert Schmidt authored
      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.
      d5257ca8
    • Robert Schmidt's avatar
      Remove drb_active array · 1c2e4c71
      Robert Schmidt authored
      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.
      1c2e4c71