1. 22 Jan, 2021 2 commits
  2. 15 Jan, 2021 2 commits
  3. 11 Jan, 2021 1 commit
    • Cedric Roux's avatar
      new kdf.c and milenage.c · b1eb9162
      Cedric Roux authored
      To compute the various security keys, all coming from k, op, and rand
      (rand is seen in authentication request).
  4. 12 Nov, 2020 1 commit
  5. 19 Aug, 2020 1 commit
    • Cedric Roux's avatar
      5g: mac.c: add downlink and some changes · f26262ce
      Cedric Roux authored
      Downlink is not fully done.
      Command line argument --batch becomes -v.
      New command line argument -l to process input line by line, so as to decode
      more than one PDU, kind of batch mode.
  6. 03 Aug, 2020 1 commit
  7. 24 Jul, 2020 2 commits
  8. 23 Jul, 2020 2 commits
  9. 13 Jun, 2019 1 commit
    • Cedric Roux's avatar
      rlc: bugfix: wrong list management · a0c648b8
      Cedric Roux authored
      When an UE leaves, the array of UEs is changed. Other
      entities store pointers to refer to a particular UE.
      When data in the array of UEs moves, the pointer
      refering to an UE may become invalid (pointing nowhere
      or to a wrong UE).
      In the array of UEs we need to store pointers, not actual
  10. 03 Jun, 2019 2 commits
  11. 28 May, 2019 2 commits
  12. 02 Mar, 2018 1 commit
    • Cedric Roux's avatar
      Add some basic tools to analyse TCP traffic. · 0940ac9c
      Cedric Roux authored
      There was a bug in openair with TCP DL traffic. It was fluctuating
      way too much instead of being very steady. Those basic programs
      were written to ease the analysis and find the bug (bad RLC UM packet
      creation). 'hd' was used to translate raw binary files into text.
      'diff -W 200 -y dl-epc.txt dl-ue.txt|less' was used to look for
      differences. It revealed that some TCP packets sent from the EPC
      machine never reached the TCP stack of the phone. At PHY level all
      was fine (DCI OK, ACK OK). So it was from an upper layer (MAC, RLC,
      PDCP, link between eNB and linux kernel). The 'textlog' T tracer was
      used to see the MAC packet containing the data not received by the UE.
      The TCP data was of 1500 bytes but was packed as 1501 bytes. The MAC
      code was unclear so it was changed to be clearer. The problem was still
      there. The RLC UM code was checked. The code is very unclear (needs
      some rewrite). A very strange line was found. It was removed. The
      problem was solved, ie. the TCP DL traffic does not fluctuate anymore.
  13. 13 Nov, 2017 1 commit
    • Cedric Roux's avatar
      add rrc test code · 85ee3d24
      Cedric Roux authored
      needed to check size of UL CCCH messages
      (all are 48 bits, size of contention resolution identity)
  14. 27 Oct, 2017 1 commit
  15. 18 Oct, 2017 1 commit
  16. 12 Oct, 2017 1 commit
  17. 05 Oct, 2017 1 commit
  18. 02 Oct, 2017 3 commits
  19. 20 Sep, 2017 3 commits
    • Cedric Roux's avatar
      ue: let valgrind be a bit more happy · 09a3fa6c
      Cedric Roux authored
      not sure this commit is necessary/useful.
      valgrind was complaining. Now it complains a bit less.
    • Cedric Roux's avatar
      ue: handle 50 and 100 RBs · 6688e3f7
      Cedric Roux authored
    • Cedric Roux's avatar
      ue: optimize · c02e8ec2
      Cedric Roux authored
      Use buffer queues. The idea is to post-process UE data in a separate
      thread running in parallel of other threads. The operation done is
      a simple addition of all the UE data, which is long (because of CPU
      cache maybe). See send_thread in modem_queues.c.
      That will be it for optimization. I more or less get 2x super-realtime
      with 10 UEs on massive (with no traffic). Enough.
      Next step is to handle more than 25 RBs.
  20. 18 Sep, 2017 1 commit
    • Cedric Roux's avatar
      ue: add the T tracer · 31eb2b47
      Cedric Roux authored
      Only the 'tracee' side. Use the tracers from openair to capture for real.
      Some traces included, mostly to be used for timing measurement, like
      (using the tracer 'to_vcd' from openair):
      ./to_vcd -o /tmp/vcd.txt -d ~/c/lte/ue/T/T_messages.txt -p 2022 \
          -b ue0_run run ue0 \
          -b ue1_run run ue1 \
          -b from_enb run from_enb \
          -b to_enb run to_enb \
          -b add_ues run add_ues \
          -b store_buffer run buffer
  21. 15 Sep, 2017 2 commits
    • Cedric Roux's avatar
      ue: parallelize UEs · ad0c4643
      Cedric Roux authored
      The UEs now run in parallel, up to a limit on the concurrent number
      of threads (parameter threads.count in conf file).
      The use of the global variable 'the_buffer' may not be the best,
      to be checked and refined if needed.
      The threading works as follows.
      There are 'ticks' and 'tokens'.
      We have one tick per UE thread. At each beginning of TTI, the main
      thread 'releases' the tick of each UE. The UE thread 'acquires' it.
      We have 'threads.count' tokens. Each UE thread acquires one token,
      runs, releases the token. The main thread waits for all the UEs to
      have released a token. Then it knows all the UEs ran. The main thread
      resets the 'consumed_token' variable and we go to a next TTI.
      At maximum 'threads.count' UEs can run in parallel.
      The next step is to have the system with different number of RBs.
      Actually it's hardwired to 25.
      Then, maybe, if time is there, optimize more. The common parts should be
      done only once (fft, pdcch first decoding steps, etc.).
      On the machine massive I ran 10 UEs with super-realtime performance
      (faster than realtime), in idle mode (no traffic).
    • Cedric Roux's avatar
      ue: multiple UEs · 4f684bb4
      Cedric Roux authored
      I tested with 10.
      We have now a configuration file. For the moment it contains
      the configuration for each UE.
      The logic to handle multiple UEs is as follows. We start UEs
      one by one. UE n+1 is started when UE n sets up its IP address.
      This is to avoid random access collisions.
      The next step is to run UEs in parallel (up to a limit on the number
      of concurrent threads).
  22. 14 Sep, 2017 4 commits
    • Cedric Roux's avatar
      ue: 2 UEs connecting · 9f8ac525
      Cedric Roux authored
      Preliminary work, needs cleanup.
      What has been done:
      - gw_new.[cc|h] comes from srs library, with adaptions to have several UEs:
          - add an ID
          - creates tun_srsue_<UE ID> instead of tun_srsue
          - for convenience, we setup netns, because all the UEs are on
            the same machine and it messes up the routing table.
            Now you do: sudo ip netns exec srs<UE ID> su <username>
            and you are in a shell in the wanted network namespace, ie.
            in the UE
        Maybe I could have derived the class from the class gw instead of
        copying everything. C++ is from another planet.
      - srsue::ue has now an UE ID too, needed for the new gw thing
      - the processing is now as follows:
          - create the first UE
          - wait for 20000 subframes
          - create the second UE with different IMSI and log file
          - when the two UEs are there, mix their uplink buffers
      - remove #if 0/#endif in ra_proc::start_pdcch_order, not sure about all this
        (not really related to multiple UEs...)
      We need to handle the UEs more properly, maybe use threads to run
      each UE in parallel. Cleanup also the code, it's dirty.
      To manage many UEs at startup, fr simplicity, the best is to wait
      for one UE to have done RRC Connection Reconfiguration Complete
      before introducing the next one. We can hack rrc.cc for that.
      To really speed up things, the whole processing has be changed a lot.
      We want only one time -> frequency conversion at the beginning of a
      TTI, only one decoding of the PDCCH (and searching for DCIs depending
      on the UEs present), then have all the rest done per UE, then at
      the end of the TTI only one frequency -> time conversion (that is,
      we stop UE processing in the frequency domain).
      Then we may also want to put the radio back in the game, for the fun.
      All this is a lot. Apart from the basics clean autonomous multiple UEs,
      probably won't be done.
    • Cedric Roux's avatar
      add gw code from srs lib · 3505f4c6
      Cedric Roux authored
      This will be customized to handle more than one UE.
      This is a copy from the same git remote/commit ID
      as what was done some commits ago.
    • Cedric Roux's avatar
      fix srs: use rand() for connection request · 3150d11c
      Cedric Roux authored
      Two UEs sending the same random ID... not good...
    • Cedric Roux's avatar
      fix srs: do not process empty MAC pdu · cd180708
      Cedric Roux authored
      that crashes the universe!
  23. 13 Sep, 2017 2 commits
    • Cedric Roux's avatar
      First version of functional UE. · c5a8d9b3
      Cedric Roux authored
      With this commit I get SRS UE connecting to openair eNB
      through TCP socket. I got rid of all radio stuff, adapted
      some parts (timers in RRC, contention resolution in random access).
      I got rid of resampling, there is this nice function
      srslte_use_standard_symbol_size to use 2^x input data size.
      We first decode the MIB from real data from the eNB, then we launch the UE,
      after setting up what's necessary from the MIB.
      Something like that.
      Next step is to have more than one UE.
    • Cedric Roux's avatar
      Add SRS UE code. · 6a57fbc7
      Cedric Roux authored
      This is a direct copy of srsLTE's UE specific code,
      as taken from https://github.com/srsLTE/srsLTE.git
      for the commit 2dbc0f066369cbbcac7e39ee17afd720b6b0d799.
      This will be modified later to bypass rf and have a special PHY,
      and some adaptation in upper layers.
  24. 11 Sep, 2017 2 commits