Commit Graph
3945 Commits
Author SHA1 Message Date
Robert Schmidt 1a9df52cf3 Fixup get_drb(): can have up to 32 DRBs 2024-09-06 10:20:08 +02:00
Robert Schmidt 35f7225fb4 Correct cuup_notify_reestablishment() look up errors
cuup_notify_reestablishment() used
  &ue_p->established_drbs[drb_id]
to look up a bearer, which is wrong, because it should be drb_id - 1
as in the top of the loop. Also, it used the dedicated get_drb()
function; harmonize to use only this function.
2024-09-06 10:20:08 +02:00
Robert Schmidt fe9c0fba2f Refactor DRB filling from E1 response in separate function
Refactor this to allow the reuse of this function for handover later.
2024-09-06 10:20:08 +02:00
Robert Schmidt e7eb1b1c3b Store DRB UL TEID information at RRC
To be used later in the case of handover.
2024-09-06 10:20:08 +02:00
Robert Schmidt 605dfa0142 Refactor: Store DU's DRB TEID/address through separate function
A follow-up commit refactors the filling of information of DRBs to set
up in a separate function (to be reused for handover later). Hence, we
cannot store the DRB TEID/address in the same functions, because it is
a logically separate step, and might not always be available.
2024-09-06 10:20:08 +02:00
Robert Schmidt d00ac2031c Correct F1-U TEID variable names, simplify code
In e1_send_bearer_updates(), we send the DL (DU) TEID and address to the
CU-UP. Therefore, correct the variable names to reflect that the F1-U
information pertains to the DU.

Also, move the tunnel info update function f1u_dl_gtp_update() to a more
prominent place, and take the pointer to the struct containing the
"interesting" information.
2024-09-06 10:20:08 +02:00
Robert Schmidt 29d8e3ce3a Remove unused defines and structures 2024-09-06 10:20:08 +02:00
Robert Schmidt 44d427bf7b Rename RRC_BUF_SIZE for 5G to increase size
A maximum RRC buffer size of 1024 might be very small. We should
increase it, but then the 5G RRC_BUF_SIZE does conflict with other
definitions. To make it unique, also rename to NR_RRC_BUF_SIZE.
2024-09-06 10:20:08 +02:00
Robert Schmidt 94258b0fb9 Remove unused fields of DRB 2024-09-06 10:20:08 +02:00
Robert Schmidt 125210fa1e RRC: Correct some logs 2024-09-06 10:20:08 +02:00
Robert Schmidt e01957e890 Remove RRC status: it is not needed 2024-09-06 10:20:08 +02:00
Robert Schmidt e63232576e RRC stats: print DU's SSB ARFCN 2024-09-06 10:20:08 +02:00
luis_pereira87 303e724845 Always set firstActive/defaultBWP
Always set the firstActive and defaultBWP in the initial
cellGroupConfig. This is necessary to make the Quectel accept the
handover RRCReconfiguration; it seems that this also works reliably in
normal connection set up, so we can add it.
2024-09-06 10:20:08 +02:00
Robert Schmidt ea171c75c0 nr_timer: consistently pass by ref, rename to nr_timer_is_active()
Pass consistently the NR_timer_t object through a pointer. Since we have
to modify all occurrences of is_nr_timer_active(), we use that occasion
and rename that function to nr_timer_is_active() to make it consistent
with all other functions, starting with nr_timer.
2024-09-06 10:20:08 +02:00
Robert Schmidt 8d6b6676c5 Reorganize sequence of reestablishment checks
Reorganize the sequence of checks done in reestablishment to make it
more logical:

- check conditions of request (correct C-RNTI)
- check conditions of DU (has MIB/SIB1, MTC)
- check the UE, and from which DU it comes

This will also help to extend it towards reestablishment coming from
different DUs in the case of handover.
2024-09-06 10:20:08 +02:00
Robert Schmidt 31bad32b57 Reestablishment with RRC setup fallback: release old UE if applicable 2024-09-06 10:20:08 +02:00
Robert Schmidt adc88d3d87 Merge remote-tracking branch 'origin/nr-ue-nas-cleanup' into integration_2024_w34 2024-08-27 14:29:32 +02:00
Bartosz Podrygajlo 4f12a25ebd Cleanup NR UE NAS instance handling
- Save nas instance id in nr_ue_nas_t and use that for instance determination.
 - Use correct field in itti message (destinationInstance instead of originInstance) to determine instance
 - Make sure both destinationInstance and originInstance fields are correct in NAS interface functions.
2024-08-23 10:45:36 +02:00
francescomani 24ff0e294e fix to avoid freeing SIB1 information still in use at RRC UE 2024-08-14 18:57:30 +02:00
Jaroslava Fiedlerova d1a272be1b Merge remote-tracking branch 'origin/fix-gnb-ue-memory-leaks' into integration_2024_w32 2024-08-12 18:12:38 +02:00
Guido Casati 14b7311bd8 Fix memory leak in do_NR_ULInformationTransfer
* buffer is allocated but not freed after use by PDCP

> Direct leak of 192 byte(s) in 3 object(s) allocated from:
    > 0 0x7ffff74b4c38 in __interceptor_realloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:164
    > 1 0x55555775ee74 in encode_dyn_cb /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/per_encoder.c:23
    > 2 0x55555774776e in _uper_encode_flush_outp /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_encoder.c:126
    > 3 0x55555774776e in uper_encode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_encoder.c:36
    > 4 0x555557747c91 in uper_encode_to_new_buffer /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_encoder.c:85
    > 5 0x5555576c5172 in do_NR_ULInformationTransfer /openair2/RRC/NR/MESSAGES/asn1_msg.c:965
    > 6 0x555556fba691 in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:1819
    > 7 0x555556fc4d2e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:1717
    > 8 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:06:54 +02:00
Guido Casati aa8cf7c41a Fix memory leak in nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message
* bcch_message is malloced by ASN.1 decoder and needs to be always freed after use along with its contents

> Direct leak of 64 byte(s) in 1 object(s) allocated from:
   >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
   >1 0x555557737ecd in SEQUENCE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:37
   >2 0x555557746f81 in uper_decode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_decoder.c:83
   >3 0x5555577471fe in uper_decode_complete /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_decoder.c:16
   >4 0x555556f8b1c9 in nr_rrc_ue_decode_NR_BCCH_DL_SCH_Message /openair2/RRC/NR_UE/rrc_UE.c:732
   >5 0x555556fbc365 in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:1775
   >6 0x555556fc4c2e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:1718
   >7 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:06:54 +02:00
Guido Casati e806315963 Fix memory leak in nr_rrc_ue_decode_dcch
* local dl_dcch_msg shall be freed after use

> Direct leak of 384 byte(s) in 6 object(s) allocated from:
    >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    >1 0x555557737ced in SEQUENCE_decode_uper /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/constr_SEQUENCE_uper.c:37
    >2 0x555557746da1 in uper_decode /cmake_targets/ran_build/build/openair2/RRC/LTE/MESSAGES/uper_decoder.c:83
    >3 0x555556fa4b31 in nr_rrc_ue_decode_dcch /openair2/RRC/NR_UE/rrc_UE.c:1612
    >4 0x555556fbb25c in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:1792
    >5 0x555556fc4a4e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:1718
    >6 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:06:54 +02:00
Guido Casati 3d2b32ac1e Fix direct leak of memory allocate by deliver_sdu_srb with itti_malloc
* The RRC task is freeing the ITTI message but the message members that are allocated separetely still need to be freed

> Direct leak of 470 byte(s) in 6 object(s) allocated from:
    >0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    >1 0x55555721f117 in itti_malloc /common/utils/ocp_itti/intertask_interface.cpp:64
    >2 0x555556f2356c in deliver_sdu_srb /openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c:775
    >3 0x555556f4e10e in nr_pdcp_entity_recv_pdu /openair2/LAYER2/nr_pdcp/nr_pdcp_entity.c:184
    >4 0x555556f278ad in do_pdcp_data_ind /openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c:285
    >5 0x555556f278ad in pdcp_data_ind_thread /openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c:307
    >6 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:06:51 +02:00
Guido Casati 6435ed309c Fix memory leak in NR UE nr_rrc_ue_process_ueCapabilityEnquiry
* allocate memory in heap for the struct ue_CapabilityRAT_Container used locally for buffer encoding
* free the struct members only for the ul_dcch_msg allocated on the stack

> Direct leak of 40 byte(s) in 1 object(s) allocated from:
    > 0 0x7ffff74b4a57 in __interceptor_calloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:154
    > 1 0x555556f7a89f in nr_rrc_ue_process_ueCapabilityEnquiry /openair2/RRC/NR_UE/rrc_UE.c:1861
    > 2 0x555556fa4d85 in nr_rrc_ue_decode_dcch /openair2/RRC/NR_UE/rrc_UE.c:1650
    > 3 0x555556fbb33c in rrc_nrue /openair2/RRC/NR_UE/rrc_UE.c:1790
    > 4 0x555556fc4b2e in rrc_nrue_task /openair2/RRC/NR_UE/rrc_UE.c:1716
    > 5 0x7ffff5e94ac2 in start_thread nptl/pthread_create.c:442
2024-08-12 10:03:16 +02:00
Raghavendra Dinavahi 9726a47fbb enable HARQ32, Changes in gNB
- Enabled configuration for number of dl, ul harq processes in conf file
		- set "num_dlharq = 32; num_ulharq = 32;" under "gNBs" section in the conf file
		- default values when not configured is 16 for DL, UL harq processes
		- IEs in the RRC messages set according to the number of DL, UL harq processes configured.
		- If value 32 is configured , then IEs related to num harq processes and dci bits also configured in Bandwidth parts.
2024-08-07 13:17:35 +02:00
Robert Schmidt 3779483b1b Merge remote-tracking branch 'origin/refactor-nas-config' into integration_2024_w31 2024-08-05 10:20:23 +02:00
Robert Schmidt 89d89a7564 Create tun_if module for TUN interface handling
Move openair3/RRC/NAS/nas_config.c to common/utils/tun_if.c, and remove
the former from all targets.
2024-08-02 15:31:04 +02:00
Robert Schmidt 659a81997b Handle IPv6/IPv4v6 PDU sessions
Handle IPv6 (and IPv4v6) PDU sessions by correctly instructing
nas_config() to set up the interface with provided IP addresses.
Note that as of now, IPv6 PDU sessions have not been fully tested.

Remove a useless assert at the gNB; to my understanding the gNB does not
care about the IP session type (at least for IP), as it just
transparently tunnels the IP packets from/to GTP.

I added a comment in the code where to change to request a PDU session
different from IPv4. Currently it is hardcoded to IPv4, and it seems
that a default OAI 5GC config would reject a PDU session type different
from IPv4.
2024-08-02 15:31:04 +02:00
Robert Schmidt d0f32d8aad Refactor change_interface_state()
- Read interface flags before setting status to not inadvertently
  overwrite existing flags
- Set interface flag point-to-point, remove multicast (I think a UE is
  not supposed to send anywhere else than to the UPF, so it seems to not
  make sense to declare the interface as multicast)
2024-08-02 15:30:46 +02:00
Robert Schmidt ae5702d014 nas_config(): change API to handle both IPv4 and IPv6
Implement handling of IPv4 and IPv6 (on the same interface) in
nas_config().
2024-08-02 15:30:15 +02:00
Robert Schmidt ffcf53fc75 Reintroduce the IP rule&route for OAI UE through setup_ue_ipv4_route()
These rules & route are necessary to properly send packets on oaitun_ue1
interface:

1. This forces the packets coming from a subnet different than the UE's
   subnet to go back through oaitun_ue1 rather than via what the default
   route defined on the system (e.g., important if ping from the
   internet arrives).

2. On machines setting net.ipv4.conf.oaitun_ue1.rp_filter=1 (e.g.
   RHEL), this prevents that source filtering for packets coming back is
   applied and those packets be dropped. By default, many hosts have
   rp_filter=2, so no strict source filtering is applied, and it would
   work; on others, this rule prevents source filter dropping.
2024-08-02 15:29:36 +02:00
Robert Schmidt 2da09aba80 nas_config(): provide entire IP address to configure
Prior to this commit, there was a global variable baseNetAddress that
could be set independently through a setter and also through the
configuration module. This baseNetAddress (16 bits IPv4) would then be
complemented with two more bytes in nas_config().

However, this is counter-productive, as not only we have a global
variable that is avoidable (we can give the entire address to
nas_config() directly), but it also would not work with IPv6. Hence,
modify to give nas_config() the entire address. A follow-up commit will
add IPv6 support.
2024-08-02 15:29:36 +02:00
Robert Schmidt 2c878c10ec Refactor setInterfaceParameter() and bringInterfaceUp()
- refactor functions to make them shorter
- provide doxygen strings
- open socket for operation once instead of in each function
- use named constant (from enum) to differentiate interface UP/DOWN
- Linux kernel defines name length as IFNAM_SIZE, so use that for
  interface name length. Also, it seems no null-byte is needed.
2024-08-02 15:29:36 +02:00
Robert Schmidt e2163ba312 Remove netmask configuration and hardcode instead
I initially planned to entirely remove the netmask configuration.
However, in specific configurations, e.g. in 4G Rfsim with feMBMS,
routing does not seem to work anymore using these commands:

  iperf -B 10.0.2.2 -s -u -i1
  iperf -c 10.0.2.2 -B 10.0.2.1 -u -t 30 -b 2.00M -i1

Therefore, we simplify by hardcoding the netmask to /24, which allows
the above to work.
2024-08-02 15:29:36 +02:00
Robert Schmidt 5bf498fca4 nas_config(): remove broadcast parameter
Remove the broadcast address from the UE, as logically, a UE has nothing
to broadcast: it can only directly talk to the core. Additionally, at
least as of now, the UE interface is shown as "POINTOPOINT", so
broadcasting is not possible.
2024-08-02 15:29:36 +02:00
Robert Schmidt 4810efdcfd Remove unused code from nas_config.c
Remove unused header includes, as well as the test program (which does
not do much, and certainly does not test in the way we use the
interfaces).
2024-08-02 15:29:36 +02:00
Robert Schmidt 9fedbf31dd Remove nas_config_mbms()
Remove nas_config_mbms() since nas_config_mbms() and nas_config() do the
same
2024-08-02 15:29:36 +02:00
Robert Schmidt 380cf5c603 Remove routing table init in nas_config()
The routing table is temporarily removed in this commit and introduced
in one of the next commits.
2024-08-02 15:29:36 +02:00
Robert Schmidt a12460e882 nas_config_mbms/netlink_init_mbms_tun(): use entire interface prefix
Does the same change in the _mbms() functions as in the previous commit.

Also, simplify logic in netlink_init_mbms_tun(): directly use the id in
the interface. This requires a slight ID change in the users, which is
also done in this commit.
2024-08-02 15:29:36 +02:00
Robert Schmidt 5acfa47325 nas_config()/netlink_init_tun(): use entire interface name (prefix)
Instead of implicitly using a hardcoded prefix "oaitun_" interface
name, move that out to the callers of these functions to make it clear.
The ID still remains outside.

The "sister functions" nas_config_mbms()/netlink_init_tun_mbms() will do
the same change in the next commit.
2024-08-02 15:29:36 +02:00
Robert Schmidt 983ee2794d Replace nas_config_mbms_s1() call with nas_config_mbms()
Comparing both functions, it seems that nas_config_mbms_s1() sets the
same parameters, assuming that in nas_config_mbms(), we set
- (UE_NAS_USE_TUN || ENB_NAS_USE_TUN) yielding true -> should yield the
  same interface name
- netmask is hardcoded to 255.255.255.0
- baseNetAddress is hardcoded 10.0

So replace the call with nas_config_mbms() by setting parameters
accordingly.
2024-08-02 15:29:26 +02:00
Robert Schmidt 7782f4aef0 Remove functions from nas_config that are not used, mark static
- Remove unused NAS_config(): It does most of what the highly similar
  nas_config() does.
- Remove unused set_gateway()
- Remove unused blocking_NAS_config()
- Remove unused functions getNetMask()
- Remove unused broadcast functionality: functions setBroadcastAddress()
  and getBroadcastAddress(), as well as global variable broadcastAddr
  are not used in consumers. Remove it.
- Make functions static
2024-08-01 18:22:46 +02:00
Robert Schmidt 44a0a45460 Remove unneeded header includes 2024-08-01 18:22:46 +02:00
Robert Schmidt 8f549a5433 Remove rb_config: it's not used by any code currently in use 2024-08-01 18:22:46 +02:00
francescomani a9902d883c creation of a separate .h file for L2_interface_ue 2024-08-01 16:39:34 +02:00
francescomani 3fa73e4bdd implementation of MAC data inactivity timer 2024-08-01 16:39:24 +02:00
Robert Schmidt bfaa906a1e Remove rb_config functions from nas_config, remove unused functions, make static 2024-07-30 20:00:40 +02:00
Jaroslava Fiedlerova bb9af4c7dc Merge remote-tracking branch 'origin/fix-assert-in-pc' into integration_2024_w30 2024-07-30 10:18:20 +02:00
Robert Schmidt 686f1816d0 Merge remote-tracking branch 'origin/impl_f1reset_and_fix_f1setup' into integration_2024_w30 2024-07-29 12:02:50 +02:00