1. 02 Aug, 2024 15 commits
    • Robert Schmidt's avatar
      2e804f53
    • Robert Schmidt's avatar
      Handle IPv6/IPv4v6 PDU sessions · 659a8199
      Robert Schmidt authored
      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.
      659a8199
    • Robert Schmidt's avatar
      Refactor change_interface_state() · d0f32d8a
      Robert Schmidt authored
      - 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)
      d0f32d8a
    • Robert Schmidt's avatar
      nas_config(): change API to handle both IPv4 and IPv6 · ae5702d0
      Robert Schmidt authored
      Implement handling of IPv4 and IPv6 (on the same interface) in
      nas_config().
      ae5702d0
    • Robert Schmidt's avatar
      Reintroduce the IP rule&route for OAI UE through setup_ue_ipv4_route() · ffcf53fc
      Robert Schmidt authored
      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.
      ffcf53fc
    • Robert Schmidt's avatar
      nas_config(): provide entire IP address to configure · 2da09aba
      Robert Schmidt authored
      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.
      2da09aba
    • Robert Schmidt's avatar
      Refactor setInterfaceParameter() and bringInterfaceUp() · 2c878c10
      Robert Schmidt authored
      - 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.
      2c878c10
    • Robert Schmidt's avatar
      Remove netmask configuration and hardcode instead · e2163ba3
      Robert Schmidt authored
      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.
      e2163ba3
    • Robert Schmidt's avatar
      nas_config(): remove broadcast parameter · 5bf498fc
      Robert Schmidt authored
      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.
      5bf498fc
    • Robert Schmidt's avatar
      Remove unused code from nas_config.c · 4810efdc
      Robert Schmidt authored
      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).
      4810efdc
    • Robert Schmidt's avatar
      Remove nas_config_mbms() · 9fedbf31
      Robert Schmidt authored
      Remove nas_config_mbms() since nas_config_mbms() and nas_config() do the
      same
      9fedbf31
    • Robert Schmidt's avatar
      Remove routing table init in nas_config() · 380cf5c6
      Robert Schmidt authored
      The routing table is temporarily removed in this commit and introduced
      in one of the next commits.
      380cf5c6
    • Robert Schmidt's avatar
      nas_config_mbms/netlink_init_mbms_tun(): use entire interface prefix · a12460e8
      Robert Schmidt authored
      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.
      a12460e8
    • Robert Schmidt's avatar
      nas_config()/netlink_init_tun(): use entire interface name (prefix) · 5acfa473
      Robert Schmidt authored
      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.
      5acfa473
    • Robert Schmidt's avatar
      Replace nas_config_mbms_s1() call with nas_config_mbms() · 983ee279
      Robert Schmidt authored
      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.
      983ee279
  2. 01 Aug, 2024 7 commits
    • Robert Schmidt's avatar
      Remove functions from nas_config that are not used, mark static · 7782f4ae
      Robert Schmidt authored
      - 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
      7782f4ae
    • Robert Schmidt's avatar
      Remove unneeded header includes · 44a0a454
      Robert Schmidt authored
      44a0a454
    • Robert Schmidt's avatar
    • Robert Schmidt's avatar
      Remove legacy 4G kernel modules · 6b21dea1
      Robert Schmidt authored
      I don't know about any user of the kernel modules. It is effectively
      legacy code we carry around, for no good reason. Remove it for the
      moment. If we ever need it, we can revert.
      6b21dea1
    • Robert Schmidt's avatar
    • Robert Schmidt's avatar
      Remove unused pdcp_netlink.c file · f680babb
      Robert Schmidt authored
      f680babb
    • Robert Schmidt's avatar
      Remove netlink/PDCP_USE_NETLINK: it's not used · cf950dfa
      Robert Schmidt authored
      Remove netlink code, and the PDCP_USE_NETLINK macro, as there is no
      known use, it makes the code more complicated, and is simply "technical
      debt".
      
      In 4G PDCP, a subtle change has been introduced, in pdcp_module_init()
      of pdcp.c. Looking at the diff of this commit, it can be seen that there
      is now a new "else-if (ENB_NAS_USE_TUN_W_MBMS_BIT)" branch that is under
      what was the "if (PDCP_USE_NETLINK)" branch, while the code fragment was
      actually inside the "else" branch of PDCP_USE_NETLINK. This seems to be
      necessary: previously, if we did not use noS1 mode and we don't use any
      TUN (i.e., the eNB), the else block would set up this interface. It is
      important that this interface is brought up, because if we omit it,
      RFsim will not work. It seems to me that this interface will regularly
      create some traffic; without it, RFsim will be blocked, and the UE
      cannot connect.
      
      In short, it seems to be important to have the MBMS interface, which
      injects traffic in the RFsim side, which will unblock RFsim. The change
      in pdcp_module_init() preserves the total changes of the if-else
      (PDCP_USE_NETLINK).
      cf950dfa
  3. 30 Jul, 2024 18 commits