<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://kb.ettus.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NeelPandeya</id>
		<title>Ettus Knowledge Base - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://kb.ettus.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=NeelPandeya"/>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/Special:Contributions/NeelPandeya"/>
		<updated>2026-07-07T22:21:21Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>https://kb.ettus.com/index.php?title=Instructions_for_System_Setup_and_Configuration&amp;diff=6937</id>
		<title>Instructions for System Setup and Configuration</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=Instructions_for_System_Setup_and_Configuration&amp;diff=6937"/>
				<updated>2026-04-27T06:44:48Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: /* Step 1: Install Xubuntu 24.04.3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- Internal use only: please do keep this updated!&lt;br /&gt;
==Revision History==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Date&lt;br /&gt;
!Author&lt;br /&gt;
!Details&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| 2026-01-25&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| Neel Pandeya&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| Initial Creation &lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| 2026-01-31&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| Michael Dickens&lt;br /&gt;
|style=&amp;quot;text-align:center;&amp;quot;| Edits for clarity &amp;amp; language&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
This document provides instructions for attendees to setup and configure their laptop or desktop computer system for use with the hands-on exercises and labs for the &amp;quot;USRP Open-Source Toolchain: UHD and GNU Radio&amp;quot; workshop/tutorial.&lt;br /&gt;
&lt;br /&gt;
Note that all of this is optional. You only have to do this if you want to use the USRP in the workshop to do the hands-on exercises and actually use the USRP radio.  If you do not want to do this and just watch the instructor's presentation, then you can skip all of this and just come to the workshop.&lt;br /&gt;
&lt;br /&gt;
This document assumes that you are using a USRP B200/B210 radio, although the USRP X300/X310, N300, N310, N320, N321, X410 may be used.&lt;br /&gt;
&lt;br /&gt;
In some sessions the radio will be provided to you; in other sessions you will need to provide your own radio.  Check this with the organizer of your session.&lt;br /&gt;
&lt;br /&gt;
Your laptop or desktop computer should be no more than around six or seven years old, with an Intel i5, i7, or i9 CPU or AMD equivalent and at least 4 cores, running at a 3.5 GHz clock speed or higher, with 8 GB memory, and at least one USB 3.0 port (for USRP B200/B210 radios) and one RJ-45 Ethernet port (for other USRP radios).  You will need about 30 GB of free disk space for the Linux installation. You will need to have internet access during the entire installation, set-up, and configuration process.&lt;br /&gt;
&lt;br /&gt;
==Step 1: Install Xubuntu 24.04.4==&lt;br /&gt;
&lt;br /&gt;
Install Xubuntu 24.04.4. Note that you may instead install Ubuntu itself, or any other Ubuntu flavor such as Kubuntu, Lubuntu, Cinnamon, MATE, or Linux Mint.  However, we recommend using Xubuntu because it is very light-weight, and the user interface is easy-to-use and intuitive, and it runs well on older or resource-constrained hardware.  We have only tested with Ubuntu and Xubuntu.&lt;br /&gt;
&lt;br /&gt;
https://ubuntu.com/desktop/flavors&lt;br /&gt;
&lt;br /&gt;
Please install on-the-metal, and not in a Virtual Machine (VM).  Please install specifically version 24.04.4.&lt;br /&gt;
&lt;br /&gt;
If you already have an existing Windows or Linux installation on your computer, then you can install Ubuntu or Xubuntu alongside your already-existing operating system, in a dual-boot configuration.  The installer will ask you about this, and it supports installing in a dual-boot configuration.  However, note that there can be some challenges when dual-booting with Windows 11, and this may not be easy to set up and may not work well.&lt;br /&gt;
&lt;br /&gt;
You can download the ISO images for Xubuntu from the links below.  Whichever version you choose: Write the ISO image to a USB 3.0 drive, and boot from it, and install it. The USB drive capacity must be a minimum of 16 GB.&lt;br /&gt;
&lt;br /&gt;
https://xubuntu.org/download/&lt;br /&gt;
&lt;br /&gt;
https://cdimage.ubuntu.com/xubuntu/releases/noble/release/&lt;br /&gt;
&lt;br /&gt;
==Step 2: Installation Settings==&lt;br /&gt;
&lt;br /&gt;
During the Xubuntu installation process, set the username to be &amp;quot;ettus&amp;quot;.  This is not strictly necessary, but if you do this, then it will make all the commands in the installation instructions and in the exercises work more easily.  The hostname does not matter.  Do not use any disk encryption.  Do not enable any volume management.&lt;br /&gt;
&lt;br /&gt;
==Step 3: Apply Updates==&lt;br /&gt;
&lt;br /&gt;
Once the installation is complete, boot into it, and open a terminal window, and apply updates. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt upgrade&lt;br /&gt;
&lt;br /&gt;
==Step 4: Install Dependencies==&lt;br /&gt;
&lt;br /&gt;
Install the package dependencies for UHD, GNU Radio, and other tools.  Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install openssh-server htop tree lshw meld git libfftw3-bin ncurses-bin libncurses6 libncursesw6 net-tools ethtool aptitude screen hwloc inxi wireshark wireshark-doc wireshark-dev tshark build-essential ntp doxygen gnome-disk-utility cpufrequtils libsndfile1-dev&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install autoconf automake build-essential ccache cmake cpufrequtils doxygen ethtool g++ git inetutils-tools libboost-all-dev libncurses6 libncurses-dev libusb-1.0-0 libusb-1.0-0-dev libusb-dev python3-dev python3-mako python3-numpy python3-requests python3-scipy python3-setuptools python3-ruamel.yaml&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install git cmake g++ libboost-all-dev libgmp-dev swig python3-numpy python3-mako python3-sphinx python3-lxml doxygen libfftw3-dev libsdl1.2-dev libgsl-dev libqwt-qt5-dev libqt5opengl5-dev python3-pyqt5 liblog4cpp5-dev libzmq3-dev python3-yaml python3-click python3-click-plugins python3-zmq python3-scipy python3-gi python3-gi-cairo gir1.2-gtk-3.0 libcodec2-dev libgsm1-dev libusb-1.0-0 libusb-1.0-0-dev libudev-dev python3-setuptools python3-pygccxml python3-thrift libqwt-qt5-6 libqwt-qt5-dev python3-pyqt5.qwt python3-qwt3d-qt5 libspdlog-dev libspdlog1.12 pybind11-dev python3-cppimport python3-pybind11 python3-pybindgen&lt;br /&gt;
&lt;br /&gt;
==Step 5: Create a folder for GIT repositories==&lt;br /&gt;
&lt;br /&gt;
Create a folder to hold all the GIT repositories. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    mkdir $HOME/git&lt;br /&gt;
&lt;br /&gt;
==Step 6: Create a work area folder==&lt;br /&gt;
&lt;br /&gt;
Create a folder to hold workshop materials and for running exercises. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    mkdir $HOME/workarea&lt;br /&gt;
&lt;br /&gt;
==Step 7: Download the slides and materials==&lt;br /&gt;
&lt;br /&gt;
Download the slides and materials for the workshop from the Ettus Knowledge Base (KB). Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    wget -P $HOME/workarea https://kb.ettus.com/images/a/ab/Workshop_GnuRadio_Materials_20171212.tar.gz&lt;br /&gt;
    wget -P $HOME/workarea https://kb.ettus.com/images/f/fd/Workshop_GnuRadio_Slides_20250802.pdf&lt;br /&gt;
&lt;br /&gt;
==Step 8: Unzip the materials==&lt;br /&gt;
&lt;br /&gt;
Unzip the workshop materials file. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/workarea&lt;br /&gt;
    tar zxvf Workshop_GnuRadio_Materials_20171212.tar.gz&lt;br /&gt;
&lt;br /&gt;
==Step 9: Install UHD 4.9==&lt;br /&gt;
&lt;br /&gt;
Install UHD version 4.9, and download all the USRP FPGA image files. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/git&lt;br /&gt;
    git clone http://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd/host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    git checkout v4.9.0.0&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j4&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
==Step 10: Install VOLK 3.3.0==&lt;br /&gt;
&lt;br /&gt;
Install the VOLK library. This used to be bundled with GNU Radio, but now it's broken out as a separate library. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/git&lt;br /&gt;
    git clone --recursive https://github.com/gnuradio/volk.git&lt;br /&gt;
    cd volk&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    git checkout v3.3.0&lt;br /&gt;
    cmake -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=/usr/bin/python3 ../&lt;br /&gt;
    make -j4&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
==Step 11: Install GNU Radio 3.10.12==&lt;br /&gt;
&lt;br /&gt;
Install GNU Radio version 3.10.12. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/git&lt;br /&gt;
    git clone http://github.com/gnuradio/gnuradio.git&lt;br /&gt;
    cd gnuradio&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    git checkout v3.10.12.0&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j4&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
==Step 12: Update the Bash RC shell file==&lt;br /&gt;
&lt;br /&gt;
Add the following lines the end of your &amp;lt;code&amp;gt; $HOME/.bashrc &amp;lt;/code&amp;gt; file.  Use your preferred editor such as the graphical ones Gedit or Mousepad or a console-based text editor such as vi or emacs.&lt;br /&gt;
&lt;br /&gt;
First, open the file using either the text editor.&lt;br /&gt;
&lt;br /&gt;
    mousepad $HOME/.bashrc&lt;br /&gt;
    gedit $HOME/.bashrc&lt;br /&gt;
    emacs $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Next, add the two lines listed below to the very end of the file:&lt;br /&gt;
&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH&lt;br /&gt;
    export PYTHONPATH=/usr/local/lib/python3.12/dist-packages:/usr/local/lib/python3.12/site-packages:$PYTHONPATH&lt;br /&gt;
&lt;br /&gt;
Then, save the file, exit and close the text editor, exit and close the terminal window, and open a brand-new terminal window. Run the following command to verify that the PYTHONPATH variable is set:&lt;br /&gt;
&lt;br /&gt;
    python3 -c &amp;quot;import sys; print(sys.path)&amp;quot; | tr ',' '\n' | grep &amp;quot;\-packages&amp;quot;&lt;br /&gt;
&lt;br /&gt;
and both of the paths above should be listed.&lt;br /&gt;
&lt;br /&gt;
==Step 13: Apply the USB udev rules==&lt;br /&gt;
&lt;br /&gt;
Apply the USB udev rules for the USRP B200/B210. If you are not using a USRP B200/B210, but some other Ethernet-based radio, then you can skip this step, although it is still good to do. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    cd /usr/local/lib/uhd/utils&lt;br /&gt;
    sudo cp uhd-usrp.rules /etc/udev/rules.d/&lt;br /&gt;
    sudo udevadm control --reload-rules&lt;br /&gt;
    sudo udevadm trigger&lt;br /&gt;
&lt;br /&gt;
==Step 14: Install gr-osmosdr==&lt;br /&gt;
&lt;br /&gt;
Install the gr-osmosdr Out-Of-Tree (OOT) module. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/git&lt;br /&gt;
    git clone https://github.com/osmocom/gr-osmosdr&lt;br /&gt;
    cd gr-osmosdr&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j4&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
==Step 15: Install gr-rds==&lt;br /&gt;
&lt;br /&gt;
Install the gr-rds Out-Of-Tree (OOT) module. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/git&lt;br /&gt;
    git clone https://github.com/bastibl/gr-rds&lt;br /&gt;
    cd gr-rds&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    git checkout maint-3.10&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j4&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
==Step 16: Install GQRX==&lt;br /&gt;
&lt;br /&gt;
Install GQRX. You will also need to install two more package dependencies. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install libqt5svg5 libqt5svg5-dev&lt;br /&gt;
    cd $HOME/git&lt;br /&gt;
    git clone https://github.com/gqrx-sdr/gqrx&lt;br /&gt;
    cd gqrx&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    git checkout v2.17.7&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j4&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
==Step 17: Install gr-paint==&lt;br /&gt;
&lt;br /&gt;
Install gr-paint. Run the commands listed below, in a terminal window.&lt;br /&gt;
&lt;br /&gt;
    cd $HOME/git&lt;br /&gt;
    git clone https://github.com/drmpeg/gr-paint&lt;br /&gt;
    cd gr-paint&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j4&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
==Test the Installation==&lt;br /&gt;
&lt;br /&gt;
If you did not see any errors in any of the previous steps, then your installation and configuration should now be complete. You can run a few simple and quick tests to verify that your system is running correctly and is ready for the workshop/tutorial.&lt;br /&gt;
&lt;br /&gt;
First, run the commands below, even if you do not have any USRP radio connected to your computer.&lt;br /&gt;
&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
&lt;br /&gt;
You should see output similar to what is listed below when there is no USRP device connected.&lt;br /&gt;
&lt;br /&gt;
    ettus@lenovo-t480s:~$ uhd_find_devices &lt;br /&gt;
    [INFO] [UHD] linux; GNU C++ version 13.3.0; Boost_108300; UHD_4.9.0.HEAD-0-g9ec1f582&lt;br /&gt;
    No UHD Devices Found&lt;br /&gt;
    ettus@lenovo-t480s:~$ uhd_usrp_probe &lt;br /&gt;
    [INFO] [UHD] linux; GNU C++ version 13.3.0; Boost_108300; UHD_4.9.0.HEAD-0-g9ec1f582&lt;br /&gt;
    Error: LookupError: KeyError: No devices found for -----&amp;gt;&lt;br /&gt;
    Empty Device Address&lt;br /&gt;
    ettus@lenovo-t480s:~$ &lt;br /&gt;
&lt;br /&gt;
You should see output similar to what is listed below when there is one USRP B200 device connected.&lt;br /&gt;
&lt;br /&gt;
    ettus@lenovo-t480s:~$ uhd_find_devices &lt;br /&gt;
    [INFO] [UHD] linux; GNU C++ version 13.3.0; Boost_108300; UHD_4.9.0.HEAD-0-g9ec1f582&lt;br /&gt;
    [INFO] [B200] Loading firmware image: /usr/local/share/uhd/images/usrp_b200_fw.hex...&lt;br /&gt;
    --------------------------------------------------&lt;br /&gt;
    -- UHD Device 0&lt;br /&gt;
    --------------------------------------------------&lt;br /&gt;
    Device Address:&lt;br /&gt;
        serial: 3304B90&lt;br /&gt;
        name: 4B200&lt;br /&gt;
        product: B200&lt;br /&gt;
        type: b200&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    ettus@lenovo-t480s:~$ uhd_usrp_probe &lt;br /&gt;
    [INFO] [UHD] linux; GNU C++ version 13.3.0; Boost_108300; UHD_4.9.0.HEAD-0-g9ec1f582&lt;br /&gt;
    [INFO] [B200] Detected Device: B200&lt;br /&gt;
    [INFO] [B200] Loading FPGA image: /usr/local/share/uhd/images/usrp_b200_fpga.bin...&lt;br /&gt;
    [INFO] [B200] Operating over USB 3.&lt;br /&gt;
    [INFO] [B200] Detecting internal GPSDO.... &lt;br /&gt;
    [INFO] [GPS] No GPSDO found&lt;br /&gt;
    [INFO] [B200] Initialize CODEC control...&lt;br /&gt;
    [INFO] [B200] Initialize Radio control...&lt;br /&gt;
    [INFO] [B200] Performing register loopback test... &lt;br /&gt;
    [INFO] [B200] Register loopback test passed&lt;br /&gt;
    [INFO] [B200] Setting master clock rate selection to 'automatic'.&lt;br /&gt;
    [INFO] [B200] Asking for clock rate 16.000000 MHz... &lt;br /&gt;
    [INFO] [B200] Actually got clock rate 16.000000 MHz.&lt;br /&gt;
      _____________________________________________________&lt;br /&gt;
     /&lt;br /&gt;
    |       Device: B-Series Device&lt;br /&gt;
    |     _____________________________________________________&lt;br /&gt;
    |    /&lt;br /&gt;
    |   |       Mboard: B200&lt;br /&gt;
    |   |   serial: 3304B90&lt;br /&gt;
    |   |   name: 4B200&lt;br /&gt;
    |   |   product: 1&lt;br /&gt;
    |   |   revision: 5&lt;br /&gt;
    |   |   FW Version: 8.0&lt;br /&gt;
    |   |   FPGA Version: 16.0&lt;br /&gt;
    |   |   &lt;br /&gt;
    |   |   Time sources:  none, internal, external, gpsdo&lt;br /&gt;
    |   |   Clock sources: internal, external, gpsdo&lt;br /&gt;
    |   |   Sensors: ref_locked&lt;br /&gt;
    |   |     _____________________________________________________&lt;br /&gt;
    |   |    /&lt;br /&gt;
    |   |   |       RX DSP: 0&lt;br /&gt;
    |   |   |   &lt;br /&gt;
    |   |   |   Freq range: -8.000 to 8.000 MHz&lt;br /&gt;
    |   |     _____________________________________________________&lt;br /&gt;
    |   |    /&lt;br /&gt;
    |   |   |       RX Dboard: A&lt;br /&gt;
    |   |   |     _____________________________________________________&lt;br /&gt;
    |   |   |    /&lt;br /&gt;
    |   |   |   |       RX Frontend: A&lt;br /&gt;
    |   |   |   |   Name: FE-RX1&lt;br /&gt;
    |   |   |   |   Antennas: TX/RX, RX2&lt;br /&gt;
    |   |   |   |   Sensors: temp, rssi, lo_locked&lt;br /&gt;
    |   |   |   |   Freq range: 50.000 to 6000.000 MHz&lt;br /&gt;
    |   |   |   |   Gain range PGA: 0.0 to 76.0 step 1.0 dB&lt;br /&gt;
    |   |   |   |   Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz&lt;br /&gt;
    |   |   |   |   Connection Type: IQ&lt;br /&gt;
    |   |   |   |   Uses LO offset: No&lt;br /&gt;
    |   |   |     _____________________________________________________&lt;br /&gt;
    |   |   |    /&lt;br /&gt;
    |   |   |   |       RX Codec: A&lt;br /&gt;
    |   |   |   |   Name: B200 RX dual ADC&lt;br /&gt;
    |   |   |   |   Gain Elements: None&lt;br /&gt;
    |   |     _____________________________________________________&lt;br /&gt;
    |   |    /&lt;br /&gt;
    |   |   |       TX DSP: 0&lt;br /&gt;
    |   |   |   &lt;br /&gt;
    |   |   |   Freq range: -8.000 to 8.000 MHz&lt;br /&gt;
    |   |     _____________________________________________________&lt;br /&gt;
    |   |    /&lt;br /&gt;
    |   |   |       TX Dboard: A&lt;br /&gt;
    |   |   |     _____________________________________________________&lt;br /&gt;
    |   |   |    /&lt;br /&gt;
    |   |   |   |       TX Frontend: A&lt;br /&gt;
    |   |   |   |   Name: FE-TX1&lt;br /&gt;
    |   |   |   |   Antennas: TX/RX&lt;br /&gt;
    |   |   |   |   Sensors: temp, lo_locked&lt;br /&gt;
    |   |   |   |   Freq range: 50.000 to 6000.000 MHz&lt;br /&gt;
    |   |   |   |   Gain range PGA: 0.0 to 89.8 step 0.2 dB&lt;br /&gt;
    |   |   |   |   Bandwidth range: 200000.0 to 56000000.0 step 0.0 Hz&lt;br /&gt;
    |   |   |   |   Connection Type: IQ&lt;br /&gt;
    |   |   |   |   Uses LO offset: No&lt;br /&gt;
    |   |   |     _____________________________________________________&lt;br /&gt;
    |   |   |    /&lt;br /&gt;
    |   |   |   |       TX Codec: A&lt;br /&gt;
    |   |   |   |   Name: B200 TX dual DAC&lt;br /&gt;
    |   |   |   |   Gain Elements: None&lt;br /&gt;
    &lt;br /&gt;
    ettus@lenovo-t480s:~$&lt;br /&gt;
&lt;br /&gt;
Second, you can run the GNU Radio Companion (GRC) tool. Run the commands below, and verify that the GRC window appears.&lt;br /&gt;
&lt;br /&gt;
    gnuradio-companion&lt;br /&gt;
&lt;br /&gt;
Third, you can connect the USRP B200/B210 to the computer, and then run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    lsusb&lt;br /&gt;
&lt;br /&gt;
You should see the USRP listed in the output, as shown below.&lt;br /&gt;
&lt;br /&gt;
    ettus@lenovo-t480s:~$ lsusb&lt;br /&gt;
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
    Bus 001 Device 004: ID 03f0:6a41 HP, Inc HP USB Optical Mouse&lt;br /&gt;
    Bus 001 Device 005: ID 2500:0020 Ettus Research LLC USRP B210&lt;br /&gt;
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub&lt;br /&gt;
    Bus 002 Device 002: ID 0bda:0316 Realtek Semiconductor Corp. Card Reader&lt;br /&gt;
    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub&lt;br /&gt;
    Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub&lt;br /&gt;
    ettus@lenovo-t480s:~$ &lt;br /&gt;
&lt;br /&gt;
Fourth, you can run the command below, to confirm that GNU Radio is configured correctly, and that you are running the correct version.&lt;br /&gt;
&lt;br /&gt;
    ettus@lenovo-t480s:~$ gnuradio-config-info --print-all&lt;br /&gt;
    /usr/local/&lt;br /&gt;
    /usr/local/etc&lt;br /&gt;
    /usr/local/etc/gnuradio/conf.d&lt;br /&gt;
    /home/ettus/.config/gnuradio&lt;br /&gt;
    /home/ettus/.local/state/gnuradio&lt;br /&gt;
    Fri, 09 Jan 2026 14:37:15Z&lt;br /&gt;
    testing-support;python-support;post-install;doxygen;man-pages;gnuradio-runtime;common-precompiled-headers;gr-ctrlport;gnuradio-companion;JSON/YAML config blocks;gr-blocks;gr-fec;gr-fft;gr-filter;gr-analog;gr-digital;gr-dtv;gr-audio;* alsa;* oss;gr-channels;gr-pdu;gr-qtgui;gr-trellis;gr-uhd;gr-uhd UHD 4.0 RFNoC;gr-utils;gr_modtool;gr_blocktool;gr-video-sdl;gr-vocoder;* codec2;* freedv;* gsm;gr-wavelet;gr-zeromq;gr-network&lt;br /&gt;
    3.10.12.0&lt;br /&gt;
    cc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 &lt;br /&gt;
    Copyright (C) 2023 Free Software Foundation, Inc. &lt;br /&gt;
    This is free software see the source for copying conditions.  There is NO &lt;br /&gt;
    warranty not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
    c++ (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0 &lt;br /&gt;
    Copyright (C) 2023 Free Software Foundation, Inc. &lt;br /&gt;
    This is free software see the source for copying conditions.  There is NO &lt;br /&gt;
    warranty not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;br /&gt;
    /usr/bin/cc:::-O3 -DNDEBUG  -fvisibility=hidden -Wsign-compare -Wall -Wno-uninitialized -Wignored-qualifiers -Wcast-qual &lt;br /&gt;
    /usr/bin/c++:::-O3 -DNDEBUG  -fvisibility=hidden -Wsign-compare -Wall -Wno-uninitialized -Wignored-qualifiers -Wcast-qual&lt;br /&gt;
    2.11.1&lt;br /&gt;
    ettus@lenovo-t480s:~$&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
If the simple tests of the installation listed above worked without any errors, then you are now finished, and you are now ready for the workshop/tutorial.&lt;br /&gt;
&lt;br /&gt;
If you have any questions or problems, you can contact the author via email at &amp;lt;code&amp;gt; neel.pandeya@ettus.com &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We look forward to seeing you in the workshop/tutorial.&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=Power_Monitoring_for_Energy_Efficient_5G/6G_with_OAI_and_USRP&amp;diff=6465</id>
		<title>Power Monitoring for Energy Efficient 5G/6G with OAI and USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=Power_Monitoring_for_Energy_Efficient_5G/6G_with_OAI_and_USRP&amp;diff=6465"/>
				<updated>2025-11-19T11:47:55Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: Created page with &amp;quot;== Application Note Number and Authors ==  '''AN-844'''  == Authors ==  Bharat Agarwal and Neel Pandeya  ==Executive Summary==  This Application Note will be published shortly...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-844'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note will be published shortly.&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=Knowledge_Base&amp;diff=6460</id>
		<title>Knowledge Base</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=Knowledge_Base&amp;diff=6460"/>
				<updated>2025-11-08T17:16:09Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: /*  Software Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Ettus Research Knowledge Base (KB). The KB is continuously being updated and expanded. If you have any suggestions, or do not find what you are looking for, then please [http://www.ettus.com/contact Contact Us].&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
== [[Getting Started Guides|&amp;lt;i class=&amp;quot;fa fa-road&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Getting Started Guides]] ==&lt;br /&gt;
&lt;br /&gt;
'''Motherboards'''&lt;br /&gt;
* [[B200/B210/B200mini/B205mini/B206mini Getting Started Guides|B200/B210/B200mini/B205mini/B206mini]]&lt;br /&gt;
* [[Ettus USRP E300 Embedded Family Getting Started Guides|E310/E312/E313]]&lt;br /&gt;
* [[E320 Getting Started Guide|E320]]&lt;br /&gt;
* [[N200/N210 Getting Started Guides|N200/N210]]&lt;br /&gt;
* [[USRP N300/N310/N320/N321 Getting Started Guide|N300/N310/N320/N321]]&lt;br /&gt;
* [[X300/X310 Getting Started Guides|X300/X310]]&lt;br /&gt;
* [[USRP-2974 Getting Started Guide|USRP-2974]]&lt;br /&gt;
* [[USRP X410/X440 Getting Started Guide|X410/X440]]&lt;br /&gt;
&lt;br /&gt;
'''Daughterboards'''&lt;br /&gt;
* [[OBX Getting Started Guides|OBX]]&lt;br /&gt;
* [[BasicTX/BasicRX Getting Started Guides|BasicTX/BasicRX]]&lt;br /&gt;
* [[CBX Getting Started Guides|CBX]]&lt;br /&gt;
* [[LFTX/LFRX Getting Started Guides|LFTX/LFRX]]&lt;br /&gt;
* [[SBX Getting Started Guides|SBX]]&lt;br /&gt;
* [[TwinRX Getting Started Guides|TwinRX]]&lt;br /&gt;
* [[UBX Getting Started Guides|UBX]]&lt;br /&gt;
* [[WBX Getting Started Guides|WBX]]&lt;br /&gt;
&lt;br /&gt;
'''Other'''&lt;br /&gt;
* [[Getting_Started_with_RFNoC_in_UHD_4.0|RFNoC Development (UHD 4.x)]]&lt;br /&gt;
* [[RFNoC_4_Migration_Guide|RFNoC Migration Guide (UHD 3.x to UHD 4.x)]]&lt;br /&gt;
* [[Getting_Started_with_RFNoC_Development|RFNoC Development (UHD 3.x)]]&lt;br /&gt;
* [[Live SDR Environment Getting Started Guides|Live SDR Environment]]&lt;br /&gt;
* [[OctoClock CDA-2990 Getting Started Guides|OctoClock CDA-2990]]&lt;br /&gt;
* [[Using Ethernet-Based Synchronization on the USRP™ N3xx Devices|White Rabbit]]&lt;br /&gt;
* [[Getting Started with DPDK and UHD|DPDK]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Hardware Resources|&amp;lt;i class=&amp;quot;fa fa-cogs&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Hardware Resources]] ==&lt;br /&gt;
'''Motherboards'''&lt;br /&gt;
* [[B200/B210/B200mini/B205mini/B206mini]]&lt;br /&gt;
* [[Ettus USRP E300 Embedded Family Hardware Resources|E310/E312/E313]]&lt;br /&gt;
* [[E320|E320]]&lt;br /&gt;
* [[N200/N210]]&lt;br /&gt;
* [[N300/N310]]&lt;br /&gt;
* [[N320/N321]]&lt;br /&gt;
* [[X300/X310]]&lt;br /&gt;
* [[USRP-2974]]&lt;br /&gt;
* [[X410]]&lt;br /&gt;
* [[X440]]&lt;br /&gt;
&lt;br /&gt;
'''Daughterboards'''&lt;br /&gt;
* [[OBX]]&lt;br /&gt;
* [[BasicTX/BasicRX]]&lt;br /&gt;
* [[CBX]]&lt;br /&gt;
* [[LFTX/LFRX]]&lt;br /&gt;
* [[SBX]]&lt;br /&gt;
* [[TwinRX]]&lt;br /&gt;
* [[UBX]]&lt;br /&gt;
* [[WBX]]&lt;br /&gt;
&lt;br /&gt;
'''Other'''&lt;br /&gt;
* [[OctoClock CDA-2990]]&lt;br /&gt;
* [[GPSDO]]&lt;br /&gt;
* [[Antennas]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Software Resources|&amp;lt;i class=&amp;quot;fa fa-desktop&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Software Resources]] ==&lt;br /&gt;
'''Ettus Products'''&lt;br /&gt;
* [[UHD]]&lt;br /&gt;
* [[UHD Python API]]&lt;br /&gt;
* [[RFNoC|RFNoC (UHD 4.x)]]&lt;br /&gt;
* [[RFNoC (UHD 3.0)|RFNoC (UHD 3.x)]]&lt;br /&gt;
&lt;br /&gt;
'''Third Party'''&lt;br /&gt;
* [[GNU Radio]]&lt;br /&gt;
* [[LabVIEW]]&lt;br /&gt;
* [[Matlab/Simulink]]&lt;br /&gt;
* [[OpenBTS]]&lt;br /&gt;
* [[Eurecom OpenAirInterface (OAI)]]&lt;br /&gt;
* [[srsLTE/srsUE]]&lt;br /&gt;
* [[Gqrx]]&lt;br /&gt;
* [[Fosphor]]&lt;br /&gt;
&lt;br /&gt;
'''Reference Architectures'''&lt;br /&gt;
* [[Multichannel RF Reference Architecture]]&lt;br /&gt;
* [[OAI Reference Architecture for 5G and 6G Research with USRP]]&lt;br /&gt;
* [[5G OAI Neural Receiver Testbed with USRP X410]]&lt;br /&gt;
* [[AI-Based Spectrum Sensing with Nvidia Jetson and USRP]]&lt;br /&gt;
* [[5G OAI End-to-End Reference Architecture with USRP]]&lt;br /&gt;
* [[5G srsRAN End-to-End Reference Architecture with USRP]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[UHD and USRP User Manual|&amp;lt;i class=&amp;quot;fa fa-flag&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; UHD and USRP User Manual]] ==&lt;br /&gt;
&lt;br /&gt;
'''Software'''&lt;br /&gt;
* [https://files.ettus.com/manual/ UHD Manual (master)]&lt;br /&gt;
* [https://files.ettus.com/manual_archive/ UHD Manual Archive (previous releases)]&lt;br /&gt;
&lt;br /&gt;
'''Motherboards'''&lt;br /&gt;
* [https://files.ettus.com/manual/page_usrp_b200.html  B200/B210/B200mini/B205mini/B206mini]&lt;br /&gt;
* [https://files.ettus.com/manual/page_usrp_x3x0.html X300/X310]&lt;br /&gt;
* [https://files.ettus.com/manual/page_usrp2.html N200/N210]&lt;br /&gt;
* [https://files.ettus.com/manual/page_usrp_n3xx.html N300/N310/N320/N321]&lt;br /&gt;
* [https://files.ettus.com/manual/page_usrp_e3xx.html E310/E312/E313/E320]&lt;br /&gt;
* [https://files.ettus.com/manual/page_usrp_x4xx.html X410/X440]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Daughterboards'''&lt;br /&gt;
* [https://files.ettus.com/manual/page_dboards.html#dboards_basictx BasicRX/LFRX]&lt;br /&gt;
* [https://files.ettus.com/manual/page_dboards.html#dboards_basicrx BasicTX/LFTX]&lt;br /&gt;
* [https://files.ettus.com/manual/page_dboards.html#dboards_cbx CBX]&lt;br /&gt;
* [https://files.ettus.com/manual/page_dboards.html#dboards_sbx SBX]&lt;br /&gt;
* [https://files.ettus.com/manual/page_dboards.html#dboards_wbx WBX]&lt;br /&gt;
* [https://files.ettus.com/manual/page_dboards.html#dboards_ubx UBX]&lt;br /&gt;
* [https://files.ettus.com/manual/page_dboards.html#dboards_twinrx TwinRX]&lt;br /&gt;
&lt;br /&gt;
'''Other'''&lt;br /&gt;
* [https://files.ettus.com/manual/page_octoclock.html OctoClock]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Application Notes|&amp;lt;i class=&amp;quot;fa fa-file-text-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Application Notes]] ==&lt;br /&gt;
Application Notes (AN) and technical articles written by engineers, for engineers. These articles offer experienced analysis, design ideas, reference designs, and tutorials—to make you productive and successful using USRP devices.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Additional Resources|&amp;lt;i class=&amp;quot;fa fa-book&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Additional Resources]] ==&lt;br /&gt;
* [[Workshop_Tutorial|Workshop/Tutorial]]&lt;br /&gt;
* [[Suggested Reading|Suggested Reading]]&lt;br /&gt;
* [[Suggested Videos|Suggested Videos]]&lt;br /&gt;
* [[CGRAN]]&lt;br /&gt;
* [[SDR Events]]&lt;br /&gt;
* [[GNU Radio Conference]]&lt;br /&gt;
* [[NEWSDR]]&lt;br /&gt;
* [[FOSDEM]]&lt;br /&gt;
* [[Cyberspectrum]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Technical Support|&amp;lt;i class=&amp;quot;fa fa-life-ring&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Technical Support]] ==&lt;br /&gt;
* [[Email|Email]]&lt;br /&gt;
* [[Mailing Lists|Mailing Lists]]&lt;br /&gt;
* [[Matrix|GNU Radio Matrix Chat Server]]&lt;br /&gt;
* [[SDR_Boston_Slack|SDR Boston Slack Chat Server]]&lt;br /&gt;
* [[StackExchange|StackExchange]]&lt;br /&gt;
* [[NI_SRM|NI Service Request Manager (SRM)]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Faq|&amp;lt;i class=&amp;quot;fa fa-info-circle&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; FAQ]] ==&lt;br /&gt;
* [[Technical FAQ|Technical]]&lt;br /&gt;
* [[Licensing FAQ|Licensing]]&lt;br /&gt;
* [[RFNoC_Frequently_Asked_Questions|RFNoC]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;col-1-3&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Legacy Products| &amp;lt;i class=&amp;quot;fa fa-hourglass-end&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Legacy Products]] ==&lt;br /&gt;
'''Motherboards'''&lt;br /&gt;
* [[USRP1|USRP1]]&lt;br /&gt;
* [[USRP2|USRP2]]&lt;br /&gt;
* [[E100/E110|E100/E110]]&lt;br /&gt;
* [[B100]]&lt;br /&gt;
&lt;br /&gt;
'''Daughterboards'''&lt;br /&gt;
* [[DBSRX2]]&lt;br /&gt;
* [[TVRX2]]&lt;br /&gt;
* [[XCVR2450]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6459</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6459"/>
				<updated>2025-11-07T22:12:45Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:Open_Cell_Sim_Card.jpg|center|600px|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6458</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6458"/>
				<updated>2025-11-07T22:12:08Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:Open_Cell_Sim_Card.jpg|center|800px|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6457</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6457"/>
				<updated>2025-11-07T22:10:36Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:Open_Cell_Sim_Card.jpg|center|50%|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
mmm&lt;br /&gt;
mmm&lt;br /&gt;
mmm&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:multi_ue_connection.png&amp;diff=6456</id>
		<title>File:multi ue connection.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:multi_ue_connection.png&amp;diff=6456"/>
				<updated>2025-11-07T22:10:21Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: NeelPandeya uploaded a new version of File:multi ue connection.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:multi_ue_connection.png&amp;diff=6455</id>
		<title>File:multi ue connection.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:multi_ue_connection.png&amp;diff=6455"/>
				<updated>2025-11-07T22:07:51Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:Double_UE_connection_on_gnb_logs.png&amp;diff=6454</id>
		<title>File:Double UE connection on gnb logs.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:Double_UE_connection_on_gnb_logs.png&amp;diff=6454"/>
				<updated>2025-11-07T22:07:28Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:double_ue_connection_on_wireshark.png&amp;diff=6453</id>
		<title>File:double ue connection on wireshark.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:double_ue_connection_on_wireshark.png&amp;diff=6453"/>
				<updated>2025-11-07T22:06:58Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:mobile_phone_connectivity.png&amp;diff=6452</id>
		<title>File:mobile phone connectivity.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:mobile_phone_connectivity.png&amp;diff=6452"/>
				<updated>2025-11-07T22:06:35Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:Open_Cell_Sim_Card.jpg&amp;diff=6451</id>
		<title>File:Open Cell Sim Card.jpg</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:Open_Cell_Sim_Card.jpg&amp;diff=6451"/>
				<updated>2025-11-07T22:06:14Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6450</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6450"/>
				<updated>2025-11-07T22:05:20Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:Open_Cell_Sim_Card.jpg|center|50%|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
mmm&lt;br /&gt;
mmm&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:Wireshark_Packet_Captures.png&amp;diff=6449</id>
		<title>File:Wireshark Packet Captures.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:Wireshark_Packet_Captures.png&amp;diff=6449"/>
				<updated>2025-11-07T22:05:01Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:OAI_UE_Config_file.png&amp;diff=6448</id>
		<title>File:OAI UE Config file.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:OAI_UE_Config_file.png&amp;diff=6448"/>
				<updated>2025-11-07T22:04:30Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:ORU_Update.png&amp;diff=6447</id>
		<title>File:ORU Update.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:ORU_Update.png&amp;diff=6447"/>
				<updated>2025-11-07T22:03:56Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:AMF_IP_Address.png&amp;diff=6446</id>
		<title>File:AMF IP Address.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:AMF_IP_Address.png&amp;diff=6446"/>
				<updated>2025-11-07T22:03:20Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6445</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6445"/>
				<updated>2025-11-07T22:02:50Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:Open_Cell_Sim_Card.jpg|center|50%|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
mmm&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:MCC_MNC_update.png&amp;diff=6444</id>
		<title>File:MCC MNC update.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:MCC_MNC_update.png&amp;diff=6444"/>
				<updated>2025-11-07T22:02:25Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6443</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6443"/>
				<updated>2025-11-07T22:01:11Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:Open_Cell_Sim_Card.jpg|center|50%|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:OAI_With_Google_Pixel_9.jpg&amp;diff=6442</id>
		<title>File:OAI With Google Pixel 9.jpg</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:OAI_With_Google_Pixel_9.jpg&amp;diff=6442"/>
				<updated>2025-11-07T21:58:14Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:cable_setup_with_USRP_UE.png&amp;diff=6441</id>
		<title>File:cable setup with USRP UE.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:cable_setup_with_USRP_UE.png&amp;diff=6441"/>
				<updated>2025-11-07T21:57:48Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6440</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6440"/>
				<updated>2025-11-07T21:57:18Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI-E2E/Images/AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI-E2E/Images/ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Open_Cell_Sim_Card.jpg|center|50%|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
mmm&lt;br /&gt;
mmm&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:cable_setup_with_COTS_UE.png&amp;diff=6439</id>
		<title>File:cable setup with COTS UE.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:cable_setup_with_COTS_UE.png&amp;diff=6439"/>
				<updated>2025-11-07T21:56:55Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6438</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6438"/>
				<updated>2025-11-07T21:56:22Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI-E2E/Images/AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI-E2E/Images/ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Open_Cell_Sim_Card.jpg|center|50%|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
mmm&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:OAI_E2E_Arch.jpg&amp;diff=6437</id>
		<title>File:OAI E2E Arch.jpg</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:OAI_E2E_Arch.jpg&amp;diff=6437"/>
				<updated>2025-11-07T21:55:51Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:OAI_E2E_Arch_Different_Machines.jpg&amp;diff=6436</id>
		<title>File:OAI E2E Arch Different Machines.jpg</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:OAI_E2E_Arch_Different_Machines.jpg&amp;diff=6436"/>
				<updated>2025-11-07T21:55:07Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6435</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6435"/>
				<updated>2025-11-07T21:54:00Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI-E2E/Images/AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI-E2E/Images/ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Open_Cell_Sim_Card.jpg|center|50%|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6434</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6434"/>
				<updated>2025-11-07T21:53:04Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
==Core Network (CN) Deployment Scenarios==&lt;br /&gt;
 &lt;br /&gt;
The OAI CN can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or the same machine as the gNB.&lt;br /&gt;
 &lt;br /&gt;
===Scenario 1: CN and gNB on the Same Machine===&lt;br /&gt;
 &lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations. Follow the installation procedure listed below.&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, download and configure OAI CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    wget -O ~/oai-cn5g.zip https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&lt;br /&gt;
    unzip ~/oai-cn5g.zip&lt;br /&gt;
    mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
    rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Then, pull and launch the CN.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose pull&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
In order to stop the CN, run the commands listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Scenario 2: CN and gNB on Separate Machines===&lt;br /&gt;
 &lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host, while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
====Hardware Requirements====&lt;br /&gt;
* Ubuntu version 22.04.5&lt;br /&gt;
* CPU: 8 cores at minimum 3.5 GHz clock speed&lt;br /&gt;
* RAM: minimum 16 GB, recommended 32 GB&lt;br /&gt;
&lt;br /&gt;
====Additional Requirements====&lt;br /&gt;
* A second physical machine with the same system specifications.&lt;br /&gt;
* Proper IP routing between CN and gNB machines, usually through a simple Ethernet switch.&lt;br /&gt;
&lt;br /&gt;
Installation steps are identical to Scenario 1, executed on the second machine allocated for CN.&lt;br /&gt;
 &lt;br /&gt;
===Core Network Database Configuration===&lt;br /&gt;
&lt;br /&gt;
To configure the OAI CN with a valid UE profile, manually insert subscriber information into the MySQL database by editing the file `oai_db.sql`.&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/database&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Open the `oai_db.sql` file, and insert the following under the `AuthenticationSubscription` table:&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
    INSERT INTO `AuthenticationSubscription`&lt;br /&gt;
    (`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
     `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
     `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`)&lt;br /&gt;
    VALUES&lt;br /&gt;
    ('208950000000032', '5G_AKA',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     'fec86ba6eb707ed08905757b1bb44b8f',&lt;br /&gt;
     '{&amp;quot;sqn&amp;quot;: &amp;quot;000000000000&amp;quot;, &amp;quot;sqnScheme&amp;quot;: &amp;quot;NON_TIME_BASED&amp;quot;, &amp;quot;lastIndexes&amp;quot;: {&amp;quot;ausf&amp;quot;: 0}}',&lt;br /&gt;
     '8000',&lt;br /&gt;
     'milenage',&lt;br /&gt;
     'C42449363BBAD02B66D16BC975D77CC1',&lt;br /&gt;
     NULL, NULL, NULL, NULL,&lt;br /&gt;
     '001010000000001');&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that:&lt;br /&gt;
* IMSI: The &amp;quot;ueid&amp;quot; and &amp;quot;supi&amp;quot; must match the IMSI used by your UE. In this example, the IMSI is &amp;quot;208950000000032&amp;quot;.&lt;br /&gt;
* Key: This is the permanent key shared between the UE and the core network. In this example, &amp;quot;fec86ba6eb707ed08905757b1bb44b8f&amp;quot;.&lt;br /&gt;
* OPC: Operator Code used in milenage authentication. In this example, &amp;quot;C42449363BBAD02B66D16BC975D77CC1&amp;quot;&lt;br /&gt;
* Authentication Method: Ensure that &amp;quot;5G_AKA&amp;quot; is used for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
===Update PLMN Configuration in &amp;quot;config.yaml&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
Edit the configuration file:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g/config&lt;br /&gt;
    nano config.yaml&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modify the file as shown below:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
    plmn:&lt;br /&gt;
      mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
      mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
      tac: 1&lt;br /&gt;
      nssai:&lt;br /&gt;
        - sst: 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/oai-cn5g&lt;br /&gt;
    docker compose down&lt;br /&gt;
    docker compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Installing Wireshark on Ubuntu===&lt;br /&gt;
 &lt;br /&gt;
Wireshark is a real-time packet sniffer that used to monitor traffic between CN and gNB.&lt;br /&gt;
&lt;br /&gt;
If not already installed, then install Wireshark, and then launch it.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y&lt;br /&gt;
    sudo apt install -y wireshark&lt;br /&gt;
    sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
    sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
    sudo wireshark&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select an interface (e.g., `eth0`, `enp1s0`, or `oai-cn`) to capture packets. Select the interface that is connected from the CN system to the gNB system.&lt;br /&gt;
&lt;br /&gt;
===Launch OAI CN Containers===&lt;br /&gt;
&lt;br /&gt;
Once you have configured and deployed the OAI 5G Core Network using Docker Compose, run the following command to launch the Core Network.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker-compose up -d&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command above should yield output similar to the image listed below, confirming that all necessary containers and services are created and running.&lt;br /&gt;
&lt;br /&gt;
[[File:Start_up_OAI_CN.png|thumb|center|600px|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each CN function (AMF, SMF, UPF, NRF, AUSF, etc.) runs as a individual Docker container. The message &amp;quot;... done&amp;quot; indicates successful start-up.&lt;br /&gt;
&lt;br /&gt;
===Verification of Running CN Containers===&lt;br /&gt;
&lt;br /&gt;
To verify that all core network components are running correctly, use the following command:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker ps -a&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the image listed below, showing all containers with &amp;quot;STATUS&amp;quot; as &amp;quot;Up ... (healthy)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|thumb|center|600px|OAI CN containers running successfully]]&lt;br /&gt;
 &lt;br /&gt;
This confirms the healthy status of all the core network components such as AMF, SMF, UPF, NRF, AUSF, UDM, UDR, MySQL, and EXT-DN. The exposed ports indicate the services are properly bound and ready for communication.&lt;br /&gt;
&lt;br /&gt;
===Wireshark Monitoring of OAI CN===&lt;br /&gt;
&lt;br /&gt;
Wireshark is a powerful tool used to observe packet exchanges within the OAI CN deployment. Below we show the key steps in using Wireshark.&lt;br /&gt;
&lt;br /&gt;
Upon launching Wireshark, the user must select the appropriate interface to begin capturing packets. In our setup, the interface named &amp;quot;oai-cn5g&amp;quot; represents the internal Docker network where all core services are communicating.  Select the interface `oai-cn5g` to capture traffic between CN components, as shown in the figure listed below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI.png|thumb|center|700px|Selecting the oai-cn5g interface in Wireshark]]&lt;br /&gt;
&lt;br /&gt;
Once the capture starts, Wireshark displays packets exchanged between the core network functions such as AMF, SMF, NRF, AUSF, and others. This is useful for verifying proper message flow and debugging. Reference the figure shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Capture.png|thumb|center|700px|Live capture showing HTTP2, TCP, and PFCP traffic between CN containers]]&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the gNB System==&lt;br /&gt;
&lt;br /&gt;
To build the OAI gNB on the same machine, or on a separate machine, from the CN machine, follow the steps below. These instructions use the latest &amp;quot;develop&amp;quot; branch of the OAI codebase.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI repository and switch to the &amp;quot;develop&amp;quot; branch.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Navigate to the CMake targets directory, and install all required system and build dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install the dependencies required by the &amp;quot;nrscope&amp;quot; tool.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y libforms-dev libforms-bin&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile the gNB and the optional nrUE modules with the USRP target. The build uses &amp;quot;ninja&amp;quot; and includes the &amp;quot;nrscope&amp;quot; library.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --gNB --build-lib &amp;quot;nrscope&amp;quot; -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once built, the binaries &amp;quot;nr-gnb&amp;quot; and (optionally) &amp;quot;nr-ue&amp;quot; will be located in the &amp;lt;code&amp;gt;~/openairinterface5g/cmake_targets/ran_build/build/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
===gNB Configuration File Setup for OAI with USRP X410===&lt;br /&gt;
&lt;br /&gt;
The gNB configuration must match your local system and hardware. Configuration files are in the &amp;lt;code&amp;gt;~/openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&amp;lt;/code&amp;gt; folder.&lt;br /&gt;
&lt;br /&gt;
Edit the following sections of this file, per the figures shown below.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/MCC_MNC_update.png|center|900px|MCC, MNC, and SST configuration in PLMN section]]&lt;br /&gt;
&lt;br /&gt;
* Set &amp;lt;code&amp;gt;mcc = 208&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mnc = 95&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;sst = 1&amp;lt;/code&amp;gt; to match the Core Network (CN) slice configuration.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nr_cellid = 12345678L&amp;lt;/code&amp;gt; can be any unique value.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI-E2E/Images/AMF_IP_Address.png|center|700px|AMF IP address and gNB network interface settings]]&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;amf_ip_address&amp;lt;/code&amp;gt;: IP of the AMF container (e.g., &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NG_AMF&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;GNB_IPV4_ADDRESS_FOR_NGU&amp;lt;/code&amp;gt;: set to the host machine's IP address (e.g., &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt;).&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI-E2E/Images/ORU_Update.png|center|900px|Radio Unit (RU) configuration for USRP X410]]&lt;br /&gt;
 &lt;br /&gt;
* &amp;lt;code&amp;gt;local_rf = &amp;quot;yes&amp;quot;&amp;lt;/code&amp;gt; enables local RF.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;bands = [78]&amp;lt;/code&amp;gt; selects NR band n78.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;max_rxgain = 75&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_pdschReferenceSignalPower = -27&amp;lt;/code&amp;gt; set RF parameters.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;sdr_addrs&amp;lt;/code&amp;gt;specifies the device argument list for the USRP X410. For example:&lt;br /&gt;
** &amp;lt;code&amp;gt;type=x4xx&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;mgmt_addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;addr=192.168.11.2&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;clock_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
** &amp;lt;code&amp;gt;time_source=internal&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensure that the system firewall rules permit relevant IP traffic, and that all IP addresses reflect your physical environment and network configuration.&lt;br /&gt;
&lt;br /&gt;
===Network Configuration for Separate CN Deployment===&lt;br /&gt;
&lt;br /&gt;
When the CN is on a separate machine, configure networking so the gNB can reach CN containers.&lt;br /&gt;
&lt;br /&gt;
====Add Static Route on gNB Machine====&lt;br /&gt;
&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;: CN Docker bridge subnet.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt;: CN host machine IP.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;: gNB NIC toward CN (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt; on your system).&lt;br /&gt;
&lt;br /&gt;
Note that this route is not persistent across reboots.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, the following settings must be configured.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
    sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These settings are also temporary and will reset after reboot unless added to startup scripts or permanent configuration files. Set &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; for IP forwarding, and use the &amp;quot;iptables-persistent&amp;quot; or &amp;quot;systemd&amp;quot; service for IP firewall rules.&lt;br /&gt;
&lt;br /&gt;
If the CN and gNB are on the same host, then this section is not needed.&lt;br /&gt;
&lt;br /&gt;
===Invoking the gNB===&lt;br /&gt;
&lt;br /&gt;
====Copy the Configuration File====&lt;br /&gt;
&lt;br /&gt;
First, copy the edited gNB configuration file to the appropriate directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cp openairinterface5g/ci-scripts/conf_files/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf openairinterface5g/targets/PROJECTS/GENERIC-NR-5GC/CONF/&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Launch the gNB====&lt;br /&gt;
&lt;br /&gt;
Change into the build directory.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets/ran_build/build&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The, run the command listed below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./nr-softmodem -O ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.fr1.106PRB.2x2.usrpn300.conf --gNBs.[0].min_rxtxtime 6 --usrp-tx-thread-config 1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then open Wireshark, select the interface connected to the CN, and observe the NGAP packets.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--gNBs.[0].min_rxtxtime 6&amp;lt;/code&amp;gt; reduces RX→TX latency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;--usrp-tx-thread-config 1&amp;lt;/code&amp;gt; pins TX thread to a dedicated core.&lt;br /&gt;
&lt;br /&gt;
===Verifying with Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to verify the NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your network configuration. The figure listed below shows a Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Wireshark_OAI_NGAP.png|center|750px|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF]]&lt;br /&gt;
 &lt;br /&gt;
====Scenario A: CN and gNB on Separate Machines====&lt;br /&gt;
&lt;br /&gt;
* On the CN machine, select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark.&lt;br /&gt;
&lt;br /&gt;
* On the gNB machine, select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) toward the CN.&lt;br /&gt;
&lt;br /&gt;
====Scenario B: CN and gNB on Same Machine====&lt;br /&gt;
&lt;br /&gt;
* Select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface (all internal CN–gNB signaling is visible).&lt;br /&gt;
&lt;br /&gt;
The expected behavior is:&lt;br /&gt;
* After startup, the gNB sends an &amp;quot;NGAP Setup Request&amp;quot; to the AMF.&lt;br /&gt;
* Then, the AMF responds with NGAP Setup Response&amp;quot; if the MCC, MNC, and TAC parameters match.&lt;br /&gt;
&lt;br /&gt;
Ensure that the MCC, MNC, SST match between gNB config and CN &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Verify that the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Confirm static route and L2/L3 connectivity between gNB and CN.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the OAI UE System==&lt;br /&gt;
&lt;br /&gt;
There are three types of UE implementations that can be used with the OpenAirInterface (OAI) stack:&lt;br /&gt;
* USRP OAI UE: Uses a USRP radio as the UE implementation (e.g., USRP B210). This does not use any SIM card.&lt;br /&gt;
* Modem Module UE: A modem module such as from Quectel or Sierra Wireless. This uses a test SIM card.&lt;br /&gt;
* COTS UE: Commercial handset, such as a Google Pixel 9. It connects OTA to the OAI gNB using a valid 5G SIM profile. The handset must be unlocked. This uses a test SIM card.&lt;br /&gt;
&lt;br /&gt;
In this subsection, we focus only on the USRP OAI UE.&lt;br /&gt;
&lt;br /&gt;
Clone the OAI UE repository, and checkout a tagged release.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git ~/openairinterface5g&lt;br /&gt;
    cd ~/openairinterface5g&lt;br /&gt;
    git checkout develop&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, install the OAI UE Dependencies.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -I&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, build the OAI UE with USRP support.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    cd ~/openairinterface5g/cmake_targets&lt;br /&gt;
    ./build_oai -w USRP --ninja --nrUE --build-lib nrscope -C&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, configure the OAI UE parameters.&lt;br /&gt;
&lt;br /&gt;
The following configuration provisions the OAI UE running on a USRP radio. It defines the IMSI, cryptographic keys, and network parameters (DNN, NSSAI). These must match the subscriber entry in the Core Network (AMF/UDM) for successful registration and session setup.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/OAI_UE_Config_file.png|center|700px|OAI UE Configuration Parameters for IMSI 208950000000032]]&lt;br /&gt;
&lt;br /&gt;
Ensure the following values are synchronized between the OAI UE and CN:&lt;br /&gt;
* &amp;lt;code&amp;gt;imsi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;key&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;opc&amp;lt;/code&amp;gt; match the subscriber profile in the UDM DB/YAML.&lt;br /&gt;
* &amp;lt;code&amp;gt;dnn&amp;lt;/code&amp;gt; (e.g., &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;default&amp;lt;/code&amp;gt;) matches SMF config.&lt;br /&gt;
* &amp;lt;code&amp;gt;nsai&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt; and optional &amp;lt;code&amp;gt;sd&amp;lt;/code&amp;gt;) matches the network slice.&lt;br /&gt;
&lt;br /&gt;
Next, invoke the OAI UE with the USRP by running from the build directory after configuring parameters.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ~/openairinterface5g/cmake_targets/ran_build/build$ sudo ./nr-uesoftmodem -r 106 --numerology 1 --band 78 -C 3319680000 --ue-fo-compensation -E --uicc0.imsi 208950000000032 --ssb 516 --ue-rxgain 114&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The parameters are as follows.&lt;br /&gt;
* &amp;lt;code&amp;gt;-r 106&amp;lt;/code&amp;gt;: Number of PRBs.&lt;br /&gt;
* &amp;lt;code&amp;gt;--numerology 1&amp;lt;/code&amp;gt;: 30 KHz SCS.&lt;br /&gt;
* &amp;lt;code&amp;gt;--band 78&amp;lt;/code&amp;gt;: FR1 band n78.&lt;br /&gt;
* &amp;lt;code&amp;gt;-C 3319680000&amp;lt;/code&amp;gt;: Center frequency in Hz.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-fo-compensation&amp;lt;/code&amp;gt;: Frequency offset compensation.&lt;br /&gt;
* &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt;: Three-quarter-rate sampling (commonly used on the USRP B200, B210, B200mini, X300, X310).&lt;br /&gt;
* &amp;lt;code&amp;gt;--uicc0.imsi 208950000000032&amp;lt;/code&amp;gt;: IMSI for 5GC auth.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ssb 516&amp;lt;/code&amp;gt;: SSB index.&lt;br /&gt;
* &amp;lt;code&amp;gt;--ue-rxgain 114&amp;lt;/code&amp;gt;: B210 RX gain (dB).&lt;br /&gt;
&lt;br /&gt;
Only use the &amp;lt;code&amp;gt;-E&amp;lt;/code&amp;gt; option when running with the USRP B200, B210, B200mini, X300, X310, and omit it when running with the USRP N300, N310, N320, X410.&lt;br /&gt;
&lt;br /&gt;
===Verifying OAI UE IP Assignment===&lt;br /&gt;
&lt;br /&gt;
After successful PDU session setup, verify tunnel interface &amp;lt;code&amp;gt;oaitun_ue1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    ifconfig oaitun_ue1&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The desired output should be similar to what is shown below.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    oaitun_ue1: flags=209&amp;lt;UP,POINTOPOINT,RUNNING,NOARP&amp;gt;  mtu 1500&lt;br /&gt;
        inet 10.0.0.5  netmask 255.255.255.0  destination 10.0.0.5&lt;br /&gt;
        ...&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE IP is &amp;lt;code&amp;gt;10.0.0.5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===gNB Log Interpretation for OAI UE Attachment and PDU Session Setup===&lt;br /&gt;
&lt;br /&gt;
Listed below are annotated logs from the gNB that demonstrate the successful Random Access, RRC connection setup, NGAP procedures, and PDU session establishment for the UE.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
    [NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
    [NR_MAC] UE 55aa: Generating RA-Msg2 DCI&lt;br /&gt;
    [NR_MAC] Msg3 scheduled ...&lt;br /&gt;
    [NR_MAC] Send RAR to RA-RNTI 010f&lt;br /&gt;
    [NR_MAC] PUSCH with TC_RNTI 0x55aa received correctly&lt;br /&gt;
    [MAC] [RAPROC] Received SDU for CCCH length 6 for UE 55aa&lt;br /&gt;
    [RLC] Activated SRB0 and SRB1 for UE 21930&lt;br /&gt;
    [NR_MAC] Scheduling Msg4 for TC_RNTI 0x55aa&lt;br /&gt;
    [NR_RRC] Create UE context for RNTI 55aa → UE ID 1&lt;br /&gt;
    [NR_RRC] Send RRC Setup&lt;br /&gt;
    [NR_MAC] UE 55aa: Msg4 Ack received — CBRA procedure succeeded!&lt;br /&gt;
    [NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED&lt;br /&gt;
    [NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
    [NR_RRC] Send/Receive DL and UL Information Transfer messages&lt;br /&gt;
    [NR_RRC] SecurityModeCommand sent → Ciphering: 0, Integrity: 2&lt;br /&gt;
    [NR_RRC] SecurityModeComplete received&lt;br /&gt;
    [NR_RRC] UE Capability Enquiry/Response exchanged&lt;br /&gt;
    [NGAP] InitialContextSetupResponse sent &lt;br /&gt;
    [PDU SESSION SETUP INITIATED]&lt;br /&gt;
    [NR_RRC] PDU Session Setup Request received → ID: 10&lt;br /&gt;
    [GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
    [PDCP/RLC/SDAP] DRB 1 created, SRB2 activated&lt;br /&gt;
    [RRC] RRCReconfiguration sent (bytes: 327)&lt;br /&gt;
    [NR_RRC] RRCReconfigurationComplete received&lt;br /&gt;
    [NR_RRC] PDUSESSION_SETUP_RESP sent → TEID: 3210207298, IP: 10.88.136.29&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;RA procedure succeeded&amp;quot;: UE completed Msg4 ACK.&lt;br /&gt;
* &amp;quot;RRC_CONNECTED&amp;quot;: RRC established.&lt;br /&gt;
* &amp;quot;SecurityModeComplete&amp;quot;: Security context OK.&lt;br /&gt;
* &amp;quot;InitialContextSetupResponse&amp;quot;: AMF context OK.&lt;br /&gt;
* &amp;quot;PDU Session Setup&amp;quot;: Bearer and GTP-U tunnel created.&lt;br /&gt;
&lt;br /&gt;
===OAI UE Log Interpretation for Initial Access and Registration===&lt;br /&gt;
&lt;br /&gt;
The following annotated logs from the OAI UE show the end-to-end UE attach, synchronization, random access procedure, NAS signaling, and security configuration.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    [PHY]   SSB position provided&lt;br /&gt;
    [NR_PHY]   Starting sync detection&lt;br /&gt;
    [PHY]   [UE thread Synch] Running Initial Synch&lt;br /&gt;
    [NR_PHY]   Cell search with center freq: 3319680000, bandwidth: 106&lt;br /&gt;
    [PHY]   pbch decoded successfully, rsrp: 70 dB/RE&lt;br /&gt;
    [PHY]   Initial sync successful, PCI: 0&lt;br /&gt;
    [PHY]   UE synchronized! decoded_frame_rx=502 ... trashed_frames=70&lt;br /&gt;
    [NR_RRC]   SIB1 decoded → system information received&lt;br /&gt;
    [NR_MAC]   TDD Configuration set: 8 DL / 3 UL slots per period&lt;br /&gt;
    [MAC]   Initialization of 4-Step CBRA procedure&lt;br /&gt;
    [PHY]   PRACH transmitted: Frame 577, Slot 19&lt;br /&gt;
    [PHY]   RAR-Msg2 decoded&lt;br /&gt;
    [MAC]   TA command received, Msg3 transmitted&lt;br /&gt;
    [MAC]   4-Step RA procedure succeeded&lt;br /&gt;
    [NR_RRC]   Received NR_RRCSetup on DL-CCCH (SRB0)&lt;br /&gt;
    [RLC]   SRB1 added&lt;br /&gt;
    [NR_RRC]   UE state set to NR_RRC_CONNECTED&lt;br /&gt;
    [NAS]   Initial Registration Request generated&lt;br /&gt;
    [NR_RRC]   RRCSetupComplete sent on UL-DCCH (SRB1)&lt;br /&gt;
    [NAS]   Authentication Request received&lt;br /&gt;
    [NAS]   Security Keys derived: kgnb, kausf, kseaf, kamf&lt;br /&gt;
    [NAS]   Security Mode Command received and responded with Security Mode Complete&lt;br /&gt;
    [NR_RRC]   Capability Enquiry received and processed&lt;br /&gt;
    [NR_RRC]   UECapabilityInformation transmitted&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the following key events from the log file.&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Synchronization:&amp;quot; UE synchronizes to gNB SSB with PCI 0 and RSRP of 70 dB/RE.&lt;br /&gt;
* &amp;quot;RA Procedure:&amp;quot; PRACH sent, Msg2 received, Msg3 transmitted, Msg4 ACK confirmed.&lt;br /&gt;
* &amp;quot;RRC Setup:&amp;quot; UE enters &amp;lt;code&amp;gt;NR_RRC_CONNECTED&amp;lt;/code&amp;gt; state after SetupComplete.&lt;br /&gt;
* &amp;quot;NAS Authentication:&amp;quot;  UE derives security keys (KgNB, KAMF, etc.).&lt;br /&gt;
* &amp;quot;Security Setup:&amp;quot; Ciphering and integrity algorithms selected (nea0, nia2)&lt;br /&gt;
* &amp;quot;Capability Exchange:&amp;quot; UE capabilities sent via UECapabilityInformation.&lt;br /&gt;
&lt;br /&gt;
===Verifying UE Attach and Registration via Wireshark===&lt;br /&gt;
&lt;br /&gt;
Wireshark is used to inspect and verify the signaling exchange between the UE, gNB, and Core Network during the 5G attach and registration procedure. The figure listed below captures NGAP and NAS messages exchanged during a successful UE attachment using the OAI UE and gNB connected to the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
The process begins with the NGSetupRequest and NGSetupResponse messages to establish the NG interface. This is followed by the UE initiating registration using the InitialUEMessage which encapsulates a NAS Registration Request. The core responds with a sequence of NAS security procedures, including Authentication Request, Authentication Response, Security Mode Command, and Security Mode Complete.&lt;br /&gt;
&lt;br /&gt;
Once NAS security is established, the UE capabilities are exchanged using the UECapabilityInformation message. The AMF then sends the InitialContextSetupRequest, followed by the UE's InitialContextSetupResponse. Finally, a PDU Session Resource Setup Request and corresponding PDU Session Resource Setup Response are exchanged, completing the end-to-end attach and session setup.&lt;br /&gt;
&lt;br /&gt;
This packet trace confirms successful synchronization, NAS registration, and PDU session establishment for end-to-end IP connectivity.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Wireshark_Packet_Captures.png|center|900px|Wireshark capture showing the NGAP and NAS signaling during UE attach and registration. Key steps: NG Setup, Initial UE Message, Authentication, Security Mode, Capability Exchange, Context Setup, and PDU Session Setup]]&lt;br /&gt;
&lt;br /&gt;
===End-to-End Connectivity Verification via Ping===&lt;br /&gt;
&lt;br /&gt;
To verify that the PDU session was successfully established and that end-to-end IP connectivity exists between the UE and the Data Network (DN), a simple ICMP ping test was performed. The external data network (DN) container within the core system was used to ping the IP address allocated to the UE by the AMF/SMF.&lt;br /&gt;
&lt;br /&gt;
From the CN external DN container, ping the UE's IP address.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following response indicates successful packet transmission and reception:&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=34.4 ms&lt;br /&gt;
    64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=33.1 ms&lt;br /&gt;
    ...&lt;br /&gt;
    --- 10.0.0.5 ping statistics ---&lt;br /&gt;
    7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This ping test confirms the following.&lt;br /&gt;
* The UE successfully registered and established a PDU session.&lt;br /&gt;
* The Core Network (SMF and UPF) correctly forwarded traffic to the UE.&lt;br /&gt;
* Routing and tunnel interfaces (e.g., oaitun_ue1) are functioning as expected.&lt;br /&gt;
&lt;br /&gt;
===iPerf Downlink (DL) Testing===&lt;br /&gt;
&lt;br /&gt;
To verify the downlink performance between the 5G Core Network (CN) and the UE (OAI UE using USRP), the iperf tool is used. The following setup is followed.&lt;br /&gt;
&lt;br /&gt;
* The iPerf server was started on the UE.&lt;br /&gt;
* The iPerf client was launched on the CN or gNB machine depending on the deployment scenario.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on UE====&lt;br /&gt;
&lt;br /&gt;
The UE (with IP address 10.0.0.5) listens for incoming UDP packets using the following command:&lt;br /&gt;
&lt;br /&gt;
    sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
This binds the server to the tunnel interface of the UE.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on CN/gNB====&lt;br /&gt;
&lt;br /&gt;
The CN or gNB machine runs the following command to generate UDP traffic toward the UE:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
* -c 10.0.0.5: Destination IP address of the UE.&lt;br /&gt;
* -u: Specifies UDP mode.&lt;br /&gt;
* -b 10M: Bandwidth of 10 Mbps.&lt;br /&gt;
* --bind 192.168.70.135: Bind the client to the CN IP.&lt;br /&gt;
&lt;br /&gt;
====Result Output====&lt;br /&gt;
&lt;br /&gt;
Example client-side output:&lt;br /&gt;
&lt;br /&gt;
    Client connecting to 10.0.0.5, UDP port 5001&lt;br /&gt;
    Sending 1470 byte datagrams&lt;br /&gt;
    [  1] 0.0000-10.0018 sec  12.5 MBytes  10.5 Mbits/sec&lt;br /&gt;
    [  1] Server Report:&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.726 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
Example server-side output (UE):&lt;br /&gt;
&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    [  1] 1.0000-2.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.819 ms 0/892 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 9.0000-10.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.729 ms 0/893 (0%)&lt;br /&gt;
    [  1] 0.0000-10.0005 sec  12.5 MBytes  10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
These results confirm the following points.&lt;br /&gt;
&lt;br /&gt;
* The downlink data rate is consistent at 10.5 Mbps.&lt;br /&gt;
* No packet loss is observed.&lt;br /&gt;
* Jitter remains under 1 ms, indicating a stable connection.&lt;br /&gt;
&lt;br /&gt;
===iPerf Uplink (UL) Testing===&lt;br /&gt;
&lt;br /&gt;
For the uplink test, the iperf client is executed on the UE machine (OAI UE with USRP), and the server is run on the Core Network (CN) side. This allows us to measure the UE's ability to send data to the network.&lt;br /&gt;
&lt;br /&gt;
====Step 1: Start iPerf Server on CN====&lt;br /&gt;
&lt;br /&gt;
Run the following command on the CN machine (inside the &amp;quot;oai-ext-dn&amp;quot; container). This will bind the server to the CN's IP address:&lt;br /&gt;
&lt;br /&gt;
    sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -s: Start as server.&lt;br /&gt;
* -i 1: Interval between periodic bandwidth reports.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -B 192.168.70.135: Bind to CN interface IP.&lt;br /&gt;
&lt;br /&gt;
====Step 2: Start iPerf Client on UE====&lt;br /&gt;
&lt;br /&gt;
On the UE side (with tunnel interface IP address such as 10.0.0.5), run the following command to initiate UDP traffic toward the CN.&lt;br /&gt;
&lt;br /&gt;
    iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* -c 192.168.70.135: Destination IP address of the CN.&lt;br /&gt;
* -u: Use UDP protocol.&lt;br /&gt;
* -b 10M: Transmit at 10 Mbps.&lt;br /&gt;
* --bind 10.0.0.5: Source IP from the UE tunnel interface.&lt;br /&gt;
&lt;br /&gt;
====Expected Output====&lt;br /&gt;
&lt;br /&gt;
On the CN side (server), the output should resemble:&lt;br /&gt;
&lt;br /&gt;
    Server listening on UDP port 5001&lt;br /&gt;
    [  1] local 192.168.70.135 port 5001 connected with 10.0.0.5 port 37649&lt;br /&gt;
    [ ID] Interval       Transfer     Bandwidth        Jitter   Lost/Total Datagrams&lt;br /&gt;
    [  1] 0.0000-1.0000 sec  1.25 MBytes  10.5 Mbits/sec   0.703 ms 0/893 (0%)&lt;br /&gt;
    ...&lt;br /&gt;
    [  1] 0.0000-10.0000 sec 12.5 MBytes 10.5 Mbits/sec   0.727 ms 0/8920 (0%)&lt;br /&gt;
&lt;br /&gt;
This confirms the following points.&lt;br /&gt;
* Stable uplink throughput from the UE to the CN.&lt;br /&gt;
* Low jitter and no packet loss.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the COTS UE System==&lt;br /&gt;
&lt;br /&gt;
===Quectel RM520N — 5G NR Sub-6 GHz Modem Module===&lt;br /&gt;
&lt;br /&gt;
The Quectel RM520N is a compact, industrial-grade 5G modem optimized for IoT and eMBB applications.&lt;br /&gt;
&lt;br /&gt;
Its key features are:&lt;br /&gt;
* Supports both 5G Standalone (SA) and Non-Standalone (NSA) modes compliant with 3GPP Release 16.&lt;br /&gt;
* Standard M.2 form factor; migration-friendly with RM50xQ, EM06 (LTE-A Cat 6), EM12 (Cat 12), EM160R-GL (Cat 16).&lt;br /&gt;
* Ultra-compact size: 30mm × 52mm × 2.3mm.&lt;br /&gt;
* Supported data rates:&lt;br /&gt;
** SA: up to 2.4 Gbps DL, 900 Mbps UL&lt;br /&gt;
** NSA: up to 3.4 Gbps DL, 550–600 Mbps UL&lt;br /&gt;
* Multi-mode operation: 5G NR, LTE-A, and 3G/WCDMA.&lt;br /&gt;
* Operating Temperature:&lt;br /&gt;
** Standard: –30°C to +75°C&lt;br /&gt;
** Extended: –40°C to +85°C&lt;br /&gt;
* Global carrier support across mainstream operators.&lt;br /&gt;
&lt;br /&gt;
===Configuring the SIM Card===&lt;br /&gt;
&lt;br /&gt;
When using a 5G wireless modem module or a COTS handset, a SIM card is required. (If a USRP runs the OAI UE softmodem, then a SIM card is not required.)&lt;br /&gt;
&lt;br /&gt;
The SIM used in this reference architecture is from [https://open-cells.com/index.php/sim-cards/ Open-Cells], and is shown in the figure listed below. The ADM code is printed directly on the SIM itself.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI-E2E/Images/Open_Cell_Sim_Card.jpg|center|50%|Open-Cells programmable SIM card (ADM: 0C028785)]]&lt;br /&gt;
&lt;br /&gt;
Insert the nano SIM into the reader/writer and plug it into the UE computer. Use program_uicc from Open-Cells ([https://open-cells.com/index.php/uiccsim-programing/ link]) to read and program the SIM.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: OpenCells785&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The output listed above shows the process of programming a USIM card using the program_uicc tool with an ADM (Administrative) key.&lt;br /&gt;
&lt;br /&gt;
* Existing values in USIM: The tool first reads the current values from the SIM card:&lt;br /&gt;
** ICCID – Integrated Circuit Card Identifier (unique SIM serial number).&lt;br /&gt;
** IMSI – International Mobile Subscriber Identity, used for network authentication.&lt;br /&gt;
** PLMN selector – Public Land Mobile Network identifiers.&lt;br /&gt;
** MSISDN} – Mobile Subscriber Integrated Services Digital Network number (the subscriber's phone number).&lt;br /&gt;
** Service Provider Name} – Operator branding.&lt;br /&gt;
&lt;br /&gt;
* Setting new values: The tool attempted to write new authentication values, but the log indicates missing or incorrectly formatted Key and OPc (Operator Code). These must be 32-character (128-bit) hex values.&lt;br /&gt;
&lt;br /&gt;
* Reading values after update: The tool re-reads the SIM data. Since the keys were not provided correctly, the identifiers (ICCID, IMSI, PLMN, MSISDN) remain unchanged, but the service provider name changed slightly (to Open-Cells).&lt;br /&gt;
&lt;br /&gt;
This confirms that while the SIM parameters were read successfully, the authentication keys (K and OPc) were not updated due to incorrect input format.&lt;br /&gt;
&lt;br /&gt;
====Successful UICC Programming and Authentication====&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    sudo ./program_uicc --adm 0C028785 --imsi 001010100001101 --key 0C0A34601D4F07677303652C0462535B --opc 63bfa50ee6523365ff14c1f45f88737d --authenticate --noreadafter&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 2089201000001785&lt;br /&gt;
    PLMN selector: 0x02f8297c&lt;br /&gt;
    Operator Control PLMN selector : 0x02f8297c&lt;br /&gt;
    Home PLMN selector : 0x02f8297c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    Succeeded to authentify with SQN: 64&lt;br /&gt;
    Set HSS SQN value as: 96&lt;br /&gt;
    &lt;br /&gt;
    sudo ./program_uicc --adm 0 C028785&lt;br /&gt;
    &lt;br /&gt;
    Existing values in USIM&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
    &lt;br /&gt;
    Setting new values&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
    &lt;br /&gt;
    Reading UICC values after uploading new values&lt;br /&gt;
    ICCID: 8933006110000000785&lt;br /&gt;
    USIM IMSI: 001010100001101&lt;br /&gt;
    PLMN selector: 0x00f1107c&lt;br /&gt;
    Operator Control PLMN selector : 0x00f1107c&lt;br /&gt;
    Home PLMN selector : 0x00f1107c&lt;br /&gt;
    USIM MSISDN: 00000785&lt;br /&gt;
    USIM Service Provider Name: open cells&lt;br /&gt;
&lt;br /&gt;
The above listing demonstrates the process of reprogramming a programmable SIM card.&lt;br /&gt;
&lt;br /&gt;
* Initial values: The SIM originally contained IMSI 2089201000001785 and PLMN selector 0x02f8297c. The Service Provider Name was shown as &amp;quot;open cells&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Programming new values: The command provides a new IMSI (001010100001101), along with a valid 128-bit authentication Key and OPc. Authentication succeeded, with the sequence number (SQN) updated from &lt;br /&gt;
    64 to 96, confirming that the SIM accepted the new credentials.&lt;br /&gt;
&lt;br /&gt;
* Verification after update: A subsequent read of the SIM shows the new IMSI and updated PLMN selector (0x00f1107c). Since no Key or OPc values were passed in this second command, the tool reported:&lt;br /&gt;
&lt;br /&gt;
    No Key or not 32 char length key&lt;br /&gt;
    No OPc or not 32 char length key&lt;br /&gt;
&lt;br /&gt;
This does not indicate an error.  It only indicates that no new keys were provided for update.&lt;br /&gt;
    &lt;br /&gt;
* Outcome: The SIM is now reprogrammed with a new IMSI and valid authentication parameters, making it suitable for use in 4G/5G testbeds (e.g., Open5GS, srsRAN, or OAI).&lt;br /&gt;
&lt;br /&gt;
Ensure that the values being programmed into the SIM card match the corresponding values entered in the SQL database on the CN machine. The values of primary importance are listed in the table below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| IMSI || 001010100001101 || MCC: 208, MNC: 92 || 001010100001101&lt;br /&gt;
|-&lt;br /&gt;
| MSISDN || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| IMEI || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| Key (K) || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| OPc || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Serial Connection to the Module via Minicom====&lt;br /&gt;
&lt;br /&gt;
Attach all four antennas to the Quectel wireless modem module. Then, mount the Quectel module into the M.2 connector slot on the carrier board. Then, connect the carrier board to the UE computer via a USB 3.0 port.&lt;br /&gt;
&lt;br /&gt;
We will use Minicom to communicate with the Quectel module over a USB serial connection. Run which minicom to verify that Minicom is already installed. If not, then run the command listed below to install it.&lt;br /&gt;
&lt;br /&gt;
    sudo apt-get install minicom&lt;br /&gt;
&lt;br /&gt;
Once the Quectel module is plugged in, the Linux operating system should create several USB serial devices which can be used to communicate with the module. The default device should be /dev/ttyUSB0. Run the command listed below to start a Minicom serial console session with the Quectel device.&lt;br /&gt;
&lt;br /&gt;
    sudo minicom /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Note that in order to exit Minicom, type Ctrl-A, then &amp;quot;X&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Switching a Quectel Module to ROW Commercial MBN====&lt;br /&gt;
&lt;br /&gt;
Step 0: Inspect Current MBN Profiles by running:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some example output is listed below.&lt;br /&gt;
&lt;br /&gt;
    [2025-08-19_10:45:07:370]at+qmbncfg=&amp;quot;list&amp;quot;&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,0,1,1,&amp;quot;Volte_OpenMkt-Commercial-CMCC&amp;quot;,0x0A012010,202209221&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,1,0,0,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,2,0,0,&amp;quot;ROW_Generic_3GPP_PTCRB_GCF&amp;quot;,0x0A01FF09,202203161&lt;br /&gt;
    [2025-08-19_10:45:07:410]+QMBNCFG: &amp;quot;List&amp;quot;,3,0,0,&amp;quot;TEF_Spain_Commercial&amp;quot;,0x0A010C00,202302071&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,4,0,0,&amp;quot;FirstNet&amp;quot;,0x0A015300,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,5,0,0,&amp;quot;Rogers_Canada&amp;quot;,0x0A014800,202303141&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,6,0,0,&amp;quot;Bell_Canada&amp;quot;,0x0A014700,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:425]+QMBNCFG: &amp;quot;List&amp;quot;,7,0,0,&amp;quot;Telus_Jasper_Canada&amp;quot;,0x0A01F900,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,8,0,0,&amp;quot;Telus_Consumer_Canada&amp;quot;,0x0A01FA00,202304281&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,9,0,0,&amp;quot;Commercial-Sprint&amp;quot;,0x0A010204,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,10,0,0,&amp;quot;Commercial-TMO&amp;quot;,0x0A01050F,202402061&lt;br /&gt;
    [2025-08-19_10:45:07:457]+QMBNCFG: &amp;quot;List&amp;quot;,11,0,0,&amp;quot;VoLTE-ATT&amp;quot;,0x0A010335,202206171&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,12,0,0,&amp;quot;CDMAless_Private-Verizon&amp;quot;,0x0A01FD28,202304271&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,13,0,0,&amp;quot;CDMAless-Verizon&amp;quot;,0x0A010126,202304251&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,14,0,0,&amp;quot;Swiss-Comm&amp;quot;,0x0A010411,202304261&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,15,0,0,&amp;quot;Telia_Sweden&amp;quot;,0x0A012400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,16,0,0,&amp;quot;TIM_Italy_Commercial&amp;quot;,0x0A012B00,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,17,0,0,&amp;quot;France-Commercial-Orange&amp;quot;,0x0A010B21,202401081&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,18,0,0,&amp;quot;Commercial-DT-VOLTE&amp;quot;,0x0A011F1F,202212061&lt;br /&gt;
    [2025-08-19_10:45:07:472]+QMBNCFG: &amp;quot;List&amp;quot;,19,0,0,&amp;quot;Germany-VoLTE-Vodafone&amp;quot;,0x0A010449,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,20,0,0,&amp;quot;UK-VoLTE-Vodafone&amp;quot;,0x0A010426,202401201&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,21,0,0,&amp;quot;Commercial-EE&amp;quot;,0x0A01220B,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,22,0,0,&amp;quot;Optus_Australia_Commercial&amp;quot;,0x0A014400,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,23,0,0,&amp;quot;Telstra_Australia_Commercial&amp;quot;,0x0A010F00,202311071&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,24,0,0,&amp;quot;Commercial-LGU&amp;quot;,0x0A012608,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,25,0,0,&amp;quot;Commercial-KT&amp;quot;,0x0A01280B,202308031&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,26,0,0,&amp;quot;Commercial-SKT&amp;quot;,0x0A01270A,202111051&lt;br /&gt;
    [2025-08-19_10:45:07:488]+QMBNCFG: &amp;quot;List&amp;quot;,27,0,0,&amp;quot;Commercial-Reliance&amp;quot;,0x0A011B0C,202210211&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,28,0,0,&amp;quot;Commercial-SBM&amp;quot;,0x0A011C0B,202401231&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,29,0,0,&amp;quot;Commercial-KDDI&amp;quot;,0x0A010709,202401191&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,30,0,0,&amp;quot;Commercial-DCM&amp;quot;,0x0A010D0D,202312201&lt;br /&gt;
    [2025-08-19_10:45:07:504]+QMBNCFG: &amp;quot;List&amp;quot;,31,0,0,&amp;quot;VoLTE-CU&amp;quot;,0x0A011561,202310181&lt;br /&gt;
    [2025-08-19_10:45:07:519]+QMBNCFG: &amp;quot;List&amp;quot;,32,0,0,&amp;quot;VoLTE_OPNMKT_CT&amp;quot;,0x0A0113E0,202312141&lt;br /&gt;
    [2025-08-19_10:45:07:519]&lt;br /&gt;
    [2025-08-19_10:45:07:519]OK&lt;br /&gt;
&lt;br /&gt;
Each line has the structure:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;, \#idx, Enabled, Selected, &amp;quot;Name&amp;quot;, ConfigID, Version&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
* #idx: profile index in the list (e.g., 0, 1, 2, ...).&lt;br /&gt;
* Enabled: 1 if this MBN is enabled, else 0.&lt;br /&gt;
* Selected: 1 if currently selected/active, else 0.&lt;br /&gt;
* Name: human-readable profile name, e.g., ROW_Commercial.&lt;br /&gt;
* ConfigID: hexadecimal configuration identifier.&lt;br /&gt;
* Version: profile build/version stamp.&lt;br /&gt;
&lt;br /&gt;
In your capture, index 0 (Volte_OpenMkt-Commercial-CMCC) shows Enabled=1, Selected=1, meaning it is active. The desired ROW_Commercial (index 1) shows 0,0 which means present but not active.&lt;br /&gt;
&lt;br /&gt;
Step 1--4: Switch to ROW_Commercial.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* &amp;quot;Deactivate&amp;quot;: cleanly deactivates the currently active MBN.&lt;br /&gt;
* &amp;quot;Autosel&amp;quot;,0: disables automatic re-selection so your manual choice sticks.&lt;br /&gt;
* &amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;: explicitly selects the global commercial profile.&lt;br /&gt;
&lt;br /&gt;
Step 5: Verify Selection.&lt;br /&gt;
&lt;br /&gt;
Re-run the list command:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
We expect to see the ROW_Commercial line with Enabled=1, Selected=1, as follows:&lt;br /&gt;
&lt;br /&gt;
    +QMBNCFG: &amp;quot;List&amp;quot;,1,1,1,&amp;quot;ROW_Commercial&amp;quot;,0x0A010809,202401151   &amp;lt;-- active now&lt;br /&gt;
&lt;br /&gt;
Step 6: Reboot/Power-Cycle the Module.&lt;br /&gt;
&lt;br /&gt;
Either physically re-plug the device or issue a software reboot with the command listed below.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1,1&lt;br /&gt;
&lt;br /&gt;
After the reboot, ROW_Commercial} should remain active.&lt;br /&gt;
&lt;br /&gt;
Troubleshooting Tips:&lt;br /&gt;
* If Autosel is enabled (AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,1), the module may override your manual selection; keep it 0 while switching.&lt;br /&gt;
* If selection fails, repeat &amp;quot;Deactivate&amp;quot; and then &amp;quot;Select&amp;quot; again, followed by a reboot.&lt;br /&gt;
* Ensure SIM/network restrictions do not force a carrier-specific MBN.&lt;br /&gt;
&lt;br /&gt;
One-Line Batch (Optional)&lt;br /&gt;
&lt;br /&gt;
If your terminal supports sending multiple commands with brief delays, you can script:&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Deactivate&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Autosel&amp;quot;,0&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;Select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Quectel Module Configuration via AT Commands&lt;br /&gt;
&lt;br /&gt;
We use {Minicom to issue AT Commands to the 5G modem module.&lt;br /&gt;
&lt;br /&gt;
There are informative articles about AT commands available online. The AT commands listed below are essential to control and configure the Quectel module. Note that AT commands are generally not case-sensitive.&lt;br /&gt;
&lt;br /&gt;
Execute the following commands in order:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    AT+GMR&lt;br /&gt;
&lt;br /&gt;
Displays the current firmware version number.&lt;br /&gt;
&lt;br /&gt;
    AT+CIMI&lt;br /&gt;
&lt;br /&gt;
Displays the IMSI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+GSN&lt;br /&gt;
&lt;br /&gt;
Displays the IMEI of the (U)SIM.&lt;br /&gt;
&lt;br /&gt;
    AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW\_Commercial&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unlocks the Quectel module for commercial use.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the configured 5G NR frequency bands.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Displays the current 5G NR mode.&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;mode\_pref&amp;quot;,nr5g&lt;br /&gt;
&lt;br /&gt;
Sets the preferred mode to 5G NR SA (Standalone).&lt;br /&gt;
&lt;br /&gt;
    AT+QNWPREFCFG=&amp;quot;nr5g\_disable_mode&amp;quot;,0&lt;br /&gt;
&lt;br /&gt;
Enables 5G NR operations.&lt;br /&gt;
&lt;br /&gt;
    AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&lt;br /&gt;
&lt;br /&gt;
Specifies the PDP context parameters for a specific context ID.&lt;br /&gt;
    &lt;br /&gt;
    AT+CFUN=0&lt;br /&gt;
&lt;br /&gt;
Sets the module to minimum functionality.&lt;br /&gt;
&lt;br /&gt;
    AT+CFUN=1&lt;br /&gt;
&lt;br /&gt;
Restores the module to full functionality.&lt;br /&gt;
&lt;br /&gt;
====Verifying the Operation with AT Commands====&lt;br /&gt;
&lt;br /&gt;
After configuring the Quectel 5G module, we verify its operational status using Minicom by executing a set of AT commands and analyzing their outputs.&lt;br /&gt;
&lt;br /&gt;
    AT+COPS?&lt;br /&gt;
&lt;br /&gt;
This command checks the current network operator and registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
&lt;br /&gt;
    +COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (0): Operator availability. 0 indicates unknown.&lt;br /&gt;
* Field 2 (0): Operator selection mode. 0 indicates automatic selection.&lt;br /&gt;
* Field 3 (&amp;quot;208 92 open cells&amp;quot;): Operator name (MCC 208, MNC 92) indicating Open-Cells as the pre-configured operator.&lt;br /&gt;
* Field 4 (11): Access technology. 11 represents 5G NR connected to a 5G Core Network (5GC).&lt;br /&gt;
&lt;br /&gt;
Next run the following command.&lt;br /&gt;
&lt;br /&gt;
    AT+C5GREG?&lt;br /&gt;
&lt;br /&gt;
This command displays the 5G registration status.&lt;br /&gt;
&lt;br /&gt;
Expected Output:&lt;br /&gt;
    +C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Field Descriptions:&lt;br /&gt;
* Field 1 (2): Mode of reporting. 2 indicates unsolicited mode (updates are pushed automatically).&lt;br /&gt;
* Field 2 (1): Registration status. 1 indicates registered on the home network.&lt;br /&gt;
* Field 3 (&amp;quot;1&amp;quot;): Tracking Area Code (TAC) in hexadecimal format.&lt;br /&gt;
* Field 4 (&amp;quot;0&amp;quot;): Cell ID in hexadecimal format.&lt;br /&gt;
* Field 5 (11): Indicates 5G NR access mode connected to a 5G CN.&lt;br /&gt;
* Field 6 (16): Length (in octets) of allowed NSSAI information.&lt;br /&gt;
* Field 7: 01.00007B;00.000000:01.00000C;00.000000 denotes allowed NSSAI (Network Slice Selection Assistance Information).&lt;br /&gt;
&lt;br /&gt;
The Connectivity testing of the COTS UE with OAI gNB and CN using ping and iperf can be done in the same way as explained in earlier sections.&lt;br /&gt;
&lt;br /&gt;
To evaluate the system performance, we conducted a DL throughput test using the commercial OOKLA Speedtest application on a COTS UE. The measured performance metrics were as follows:&lt;br /&gt;
&lt;br /&gt;
* Downlink Throughput: 126 Mbps&lt;br /&gt;
* Uplink Throughput: 16 Mbps&lt;br /&gt;
* Latency: Approximately 50 ms&lt;br /&gt;
&lt;br /&gt;
These results indicate successful connectivity and reasonable performance of the 5G system under test.&lt;br /&gt;
&lt;br /&gt;
====Multi-UE 5G Testbed Setup with OAI gNB, OAI UE, and USRP X410====&lt;br /&gt;
&lt;br /&gt;
[[File:multi_ue_connection.png|thumb|800px|center|Multi-UE connection setup using USRP X410, OAI gNB, OAI UE, and COTS UE]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates a comprehensive testbed for evaluating 5G NR SA (Standalone) operation with both software-defined and commercial UEs. The key components of the setup are as follows:&lt;br /&gt;
&lt;br /&gt;
* OAI gNB: A monolithic gNB implemented using OAI and running on a high-performance server (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz) with Ubuntu 22.04 and UHD 4.8. It is connected to a USRP X410 via dual SFP+ interfaces.&lt;br /&gt;
&lt;br /&gt;
* OAI Core Network: The OAI 5G Core (develop branch) runs on the same machine as the OAI gNB, enabling a complete end-to-end standalone deployment.&lt;br /&gt;
&lt;br /&gt;
* USRP X410 (RF Front End): Acts as the shared RF front-end for both the gNB and UEs. It interfaces with both the gNB and the UEs through SFP+ (data) and SMA (RF) connections.&lt;br /&gt;
&lt;br /&gt;
* 6:1 and 2:1 RF Splitters: These allow the RF signal from the gNB (X410) to be distributed to multiple devices. The 6:1 splitter distributes the signal to a COTS UE and to an OAI UE. A 30 dB attenuator is used to prevent RF front-end saturation.&lt;br /&gt;
&lt;br /&gt;
* OAI UE: A monolithic UE running on a separate server with similar compute specifications (Intel Xeon w7-2495X, 24 Cores @ 2.5 GHz, Ubuntu 22.04, UHD 4.8). It connects to the X410 using SFP+ for data and SMA cables for RF.&lt;br /&gt;
&lt;br /&gt;
* COTS UE: A commercial smartphone or module connected via SMA to the RF network. It is monitored using Minicom on a Linux machine for AT command interaction.&lt;br /&gt;
&lt;br /&gt;
This configuration enables concurrent testing of both OAI-based and commercial UE performance in a controlled over-the-cable environment using shared RF and network resources.&lt;br /&gt;
&lt;br /&gt;
====gNB Log Analysis for Dual UE Scenario====&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows the real-time log output from the OAI gNB during a 5G NR standalone test involving two connected UEs. The log output includes MAC and PHY-level statistics relevant to each UE, such as slot synchronization, signal strength, and buffer throughput.&lt;br /&gt;
&lt;br /&gt;
[[File:Double_UE_connection_on_gnb_logs.png|thumb|800px|center|gNB log showing two UEs (RNTI 0x37a3 and 0x5a8c) connected simultaneously]]&lt;br /&gt;
&lt;br /&gt;
The key observations are as follows:&lt;br /&gt;
&lt;br /&gt;
* UE 0x37a3:&lt;br /&gt;
** Average RSRP: -98 dBm, SNR: 46.0 dB&lt;br /&gt;
** BLER (UL/DL): 0.0%, indicating excellent link quality&lt;br /&gt;
** NPRB: 5, Modulation/Coding Scheme (MCS): 7 (Qm = 2)&lt;br /&gt;
&lt;br /&gt;
* UE 0x5a8c:&lt;br /&gt;
** Average RSRP: -82 dBm, SNR: ranging from 21.0 dB to 21.5 dB&lt;br /&gt;
** BLER: ranges between 0.05 to 0.11, indicating moderate link quality&lt;br /&gt;
** NPRB: 104, MCS: 18 (Qm = 6)&lt;br /&gt;
&lt;br /&gt;
* LCID Breakdown:&lt;br /&gt;
** LCID 1: Small control data&lt;br /&gt;
** LCID 3 and 4: Carrying higher traffic load (e.g., 3773 TX / 6550 RX)&lt;br /&gt;
** LCID 5: Primary bearer – over 22 million TX and 31 million RX bytes&lt;br /&gt;
&lt;br /&gt;
This log confirms that both UEs are successfully attached and transmitting data over multiple logical channels. The differences in BLER and NPRB indicate dynamic scheduling by the gNB based on real-time radio conditions.&lt;br /&gt;
&lt;br /&gt;
====Wireshark Trace Analysis: Dual UE Registration and PDU Session Establishment====&lt;br /&gt;
&lt;br /&gt;
The figure listed below presents a Wireshark capture filtered with the NGAP protocol, showcasing the successful registration and session setup of two UEs over a 5G Standalone (SA) network. The trace includes both NGAP and NAS signaling exchanged between the gNB (10.88.136.29) and the 5GC (192.168.70.132).&lt;br /&gt;
&lt;br /&gt;
[[File:double_ue_connection_on_wireshark.png|thumb|800px|center|Wireshark capture showing NGAP procedures for dual UE connection]]&lt;br /&gt;
&lt;br /&gt;
The main stages observed in the trace are as follows:&lt;br /&gt;
&lt;br /&gt;
* NG Setup Procedure:&lt;br /&gt;
** NGSetupRequest from gNB to AMF, initiating the connection.&lt;br /&gt;
** NGSetupResponse from AMF to gNB, confirming the connection.&lt;br /&gt;
&lt;br /&gt;
* UE Registration Procedures:&lt;br /&gt;
** InitialUEMessage, Authentication Request/Response, and Security Mode Command/Complete are exchanged for NAS authentication and security.&lt;br /&gt;
** Two separate UEs go through this process, indicating a multi-UE test scenario.&lt;br /&gt;
&lt;br /&gt;
* UE Capability Exchange:&lt;br /&gt;
** UECapabilityInfoIndication is sent from the gNB to AMF.&lt;br /&gt;
&lt;br /&gt;
* PDU Session Establishment:&lt;br /&gt;
** The AMF initiates PDU Session Resource Setup Request to the gNB.&lt;br /&gt;
** The gNB responds with PDU Session Resource Setup Response}.&lt;br /&gt;
** PDU Session Establishment Accept is observed in JSON/NAS payloads.&lt;br /&gt;
&lt;br /&gt;
* Error Handling:&lt;br /&gt;
** One occurrence of Authentication Failure (Synch failure) is observed and immediately retried.&lt;br /&gt;
&lt;br /&gt;
The trace confirms that both UEs are successfully authenticated and registered with the 5G Core Network, and are able to establish PDU sessions, and are interacting with both control plane (NGAP/NAS) and data plane (JSON PDU content).&lt;br /&gt;
&lt;br /&gt;
==Connecting Google Pixel 9 to OAI gNB==&lt;br /&gt;
&lt;br /&gt;
To validate 5G SA connectivity with OAI, a commercial off-the-shelf (COTS) smartphone — specifically the Google Pixel 9 — is connected to an OAI-powered 5G Standalone (SA) network.&lt;br /&gt;
&lt;br /&gt;
This procedure involves provisioning a test SIM card, configuring the Access Point Name (APN), and verifying successful network registration.&lt;br /&gt;
&lt;br /&gt;
==Step-by-Step Configuration===&lt;br /&gt;
&lt;br /&gt;
# Insert OAI Test SIM  &lt;br /&gt;
Insert a custom test SIM card with the following parameters:&lt;br /&gt;
* MCC (Mobile Country Code): 001  &lt;br /&gt;
* MNC (Mobile Network Code): 01  &lt;br /&gt;
* PLMN: 00101 (test network)&lt;br /&gt;
&lt;br /&gt;
# Configure APN Settings on Google Pixel 9  &lt;br /&gt;
Navigate through:  &lt;br /&gt;
&amp;lt;code&amp;gt;Settings → Network &amp;amp; Internet → Mobile Network → Access Point Names&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then tap &amp;quot;Add APN&amp;quot; and enter:&lt;br /&gt;
* Name: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* APN: &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt;&lt;br /&gt;
* MCC: &amp;lt;code&amp;gt;001&amp;lt;/code&amp;gt;&lt;br /&gt;
* MNC: &amp;lt;code&amp;gt;01&amp;lt;/code&amp;gt;&lt;br /&gt;
* Bearer: Check only NR (5G)&lt;br /&gt;
* Save and select the new APN.&lt;br /&gt;
&lt;br /&gt;
# Power on the OAI gNB  &lt;br /&gt;
Ensure that:&lt;br /&gt;
* The gNB is configured with the same PLMN (001-01)&lt;br /&gt;
* The OAI Core Network (CN) is running and reachable.&lt;br /&gt;
&lt;br /&gt;
# Verify Connection Status  &lt;br /&gt;
After a few seconds, the Pixel 9 should:&lt;br /&gt;
* Display the operator name as &amp;lt;code&amp;gt;00101 - open cells&amp;lt;/code&amp;gt;&lt;br /&gt;
* Show the 5G NR icon on the status bar&lt;br /&gt;
&lt;br /&gt;
The figure listed below shows an example of the Google Pixel 9 connected to OAI gNB.&lt;br /&gt;
&lt;br /&gt;
[[File:mobile_phone_connectivity.png|center|800px|thumb|Connection stages of Google Pixel 9 to OAI gNB — (Left) No service; (Middle) Registered to test PLMN 00101; (Right) 5G NR icon confirms successful attachment.]]&lt;br /&gt;
&lt;br /&gt;
==Technical Support==&lt;br /&gt;
&lt;br /&gt;
The primary methods of technical support are the mailing lists.&lt;br /&gt;
&lt;br /&gt;
===USRP Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://lists.ettus.com/list/usrp-users.lists.ettus.com usrp-users mailing list] is for questions and discussions about the NI/Ettus USRP hardware as well as the UHD and RFNoC software.&lt;br /&gt;
&lt;br /&gt;
The archives for the usrp-users mailing list can be found [https://lists.ettus.com/empathy/list/usrp-users.lists.ettus.com here].&lt;br /&gt;
&lt;br /&gt;
===OAI Mailing List===&lt;br /&gt;
&lt;br /&gt;
The focus of the [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList openair5g-user mailing list] is for questions and discussions from users about the [https://gitlab.eurecom.fr/oai/openairinterface5g OpenAirInterface (OAI) software stack] from [https://openairinterface.org/ Eurecom].&lt;br /&gt;
&lt;br /&gt;
Additional information about the OAI mailing lists can be found [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/MailingList here] and [https://gitlab.eurecom.fr/oai/openairinterface5g/-/wikis/AskQuestions here].&lt;br /&gt;
&lt;br /&gt;
The archives for the openair5g-user mailing list can be found [http://lists.eurecom.fr/sympa/arc/openair5g-user here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6433</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6433"/>
				<updated>2025-11-07T18:23:30Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install the pre-requisites and Docker.&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
    sudo apt install -y git net-tools putty&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y ca-certificates curl&lt;br /&gt;
    sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
    sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
    echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
    sudo apt update&lt;br /&gt;
    sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
    sudo usermod -a -G docker $(whoami)&lt;br /&gt;
    reboot&lt;br /&gt;
    &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6432</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6432"/>
				<updated>2025-11-07T18:17:20Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
==Installing, Configuring, and Running the CN System==&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6431</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6431"/>
				<updated>2025-11-07T18:14:10Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
==Configuring the Ubuntu Linux Operating System==&lt;br /&gt;
&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks USRP Host Performance Tuning Tips and Tricks], which outlines specific settings and configuration procedures that are necessary to perform. These include:&lt;br /&gt;
 &lt;br /&gt;
* Set the CPU governors.&lt;br /&gt;
* Enable thread priority scheduling.&lt;br /&gt;
* Set the read and write socket buffer sizes.&lt;br /&gt;
* Adjust Ethernet MTU values.&lt;br /&gt;
* Set the network card ring buffer sizes.&lt;br /&gt;
* In the BIOS, disable Hyper-threading and disable P-state controls.&lt;br /&gt;
&lt;br /&gt;
Note that the use of the [https://www.dpdk.org/ Data Plane Development Kit (DPDK)] is not required for running any of the FR1 channel bandwidths. As of this writing, DPDK is not used in this reference architecture. The use of DPDK is necessary for the FR2 channel bandwidths.&lt;br /&gt;
&lt;br /&gt;
===Installing, Configuring, and Running the CN System===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the deployment architecture of the OAI 5G Core Network. The core network is implemented using several containerized network functions (NFs), each mapped to a specific IP address within the subnet `192.168.70.128/26`.&lt;br /&gt;
 &lt;br /&gt;
[[File:OAI_Core_Network.jpg|thumb|center|700px|OpenAirInterface (OAI) Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The following components are included:&lt;br /&gt;
 &lt;br /&gt;
* OAI-NRF (Network Repository Function) at `192.168.70.130` – Handles service registration and discovery.&lt;br /&gt;
&lt;br /&gt;
* OAI-AMF (Access and Mobility Function) at `192.168.70.132` – Manages UE registration, connection, and mobility.&lt;br /&gt;
&lt;br /&gt;
* OAI-SMF (Session Management Function) at `192.168.70.133` – Manages sessions and IP address allocation.&lt;br /&gt;
&lt;br /&gt;
* OAI-UPF (User Plane Function) at `192.168.70.134` – Routes user data traffic and connects to the external data network via the N3 interface.&lt;br /&gt;
&lt;br /&gt;
* OAI-EXT-DN (External Data Network) at `192.168.70.135` – Provides Internet or service access for UEs.&lt;br /&gt;
&lt;br /&gt;
* OAI-AUSF (Authentication Server Function) at `192.168.70.138` – Handles UE authentication.&lt;br /&gt;
&lt;br /&gt;
* OAI-UDM (Unified Data Management) at`192.168.70.137` and OAI-UDR (Unified Data Repository) at `192.168.70.136` –   Manage subscription and policy data.&lt;br /&gt;
&lt;br /&gt;
* MySQL Server – connected to `192.168.70.132` for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF.&lt;br /&gt;
&lt;br /&gt;
Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6430</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6430"/>
				<updated>2025-11-07T17:06:28Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
==Installing and Configuring the UHD Software==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system. We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates. At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies using the following command (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
    sudo apt update &amp;amp;&amp;amp; sudo apt install -y cmake g++ libboost-all-dev libusb-1.0-0-dev libuhd-dev python3 python3-mako python3-numpy python3-requests python3-ruamel.yaml libfftw3-dev libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools doxygen&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the &amp;quot;v4.8.0.0&amp;quot; tag:&lt;br /&gt;
&lt;br /&gt;
    git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
    cd uhd&lt;br /&gt;
    git checkout v4.8.0.0&lt;br /&gt;
&lt;br /&gt;
Then, build and install UHD:&lt;br /&gt;
&lt;br /&gt;
    cd host&lt;br /&gt;
    mkdir build&lt;br /&gt;
    cd build&lt;br /&gt;
    cmake ../&lt;br /&gt;
    make -j$(nproc)&lt;br /&gt;
    sudo make install&lt;br /&gt;
    sudo ldconfig&lt;br /&gt;
    export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
    sudo uhd_images_downloader&lt;br /&gt;
&lt;br /&gt;
You can verify the installation by running:&lt;br /&gt;
&lt;br /&gt;
    uhd_usrp_probe&lt;br /&gt;
    uhd_find_devices&lt;br /&gt;
&lt;br /&gt;
For more details, see the [https://github.com/EttusResearch/uhd UHD GitHub page].&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|thumb|800px|center|uhd_usrp_probe output for USRP B210]]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_find_devices_output.png|thumb|800px|center|uhd_find_devices output for USRP N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
===Installing and Configuring the USRP Radio===&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used either as the gNB or as the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
===USRP N300 and N310===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
===USRP N320 and N321===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N320/N321 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
These devices support all the channel bandwidths in FR1 and FR2, except the 400 MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
===USRP X410===&lt;br /&gt;
&lt;br /&gt;
For setup and configuration, refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6429</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6429"/>
				<updated>2025-11-07T16:44:12Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two USRP devices are required, one for the gNB, and one for the UE. Several USRP devices can be used.&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
You can use difference USRP devices for the gNB and UE. The gNB and UE do not need to use the same specific USRP device. For example, the gNB may use a USRP X410, while the UE uses a USRP N310.&lt;br /&gt;
&lt;br /&gt;
The USRP devices support the following channel bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50, 100, 200 MHz supported&lt;br /&gt;
** USRP X410: 50, 100, 200, 400 MHz supported&lt;br /&gt;
&lt;br /&gt;
===OctoClock-G===&lt;br /&gt;
&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios. This is only necessary when both the gNB and UE are implemented with USRP devices. Ensure you are using the &amp;quot;-G&amp;quot; version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
==Software Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the software components in the system.&lt;br /&gt;
&lt;br /&gt;
===Operation System===&lt;br /&gt;
&lt;br /&gt;
The recommended operating system for the gNB, UE, and CN systems is Ubuntu 22.04.5. Ensure you download and install the Desktop version, not the Server version.&lt;br /&gt;
&lt;br /&gt;
For the gNB and UE systems, it is optional to install the low-latency kernel to meet real-time performance requirements. The preferred kernel version is 6.8 or later.&lt;br /&gt;
&lt;br /&gt;
The CN system can operate with the default generic kernel and does not require low-latency optimizations.&lt;br /&gt;
&lt;br /&gt;
Do not run Ubuntu in a Virtual Machine (VM)} or any virtualization layer. Install Ubuntu directly on the hardware (on-the-metal).&lt;br /&gt;
&lt;br /&gt;
Alternative Ubuntu flavors such as Kubuntu, Lubuntu, Xubuntu, and Ubuntu MATE may also be used, if preferred.&lt;br /&gt;
&lt;br /&gt;
===UHD===&lt;br /&gt;
&lt;br /&gt;
UHD (USRP Hardware Driver) is the open-source device driver and API for all USRP radios. The required version for this reference architecture is UHD 4.8.0, which includes enhanced support for new hardware platforms and performance improvements over prior releases.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed on both the gNB and UE systems.&lt;br /&gt;
&lt;br /&gt;
* UHD is not required on the CN system.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source code, rather than installing it from a binary package, or using the OAI &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
&lt;br /&gt;
* UHD must be installed prior to building OAI. See the Application Note [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux here] for more information.&lt;br /&gt;
&lt;br /&gt;
===OAI===&lt;br /&gt;
&lt;br /&gt;
OAI provides an open-source, 3GPP-compliant implementation of the 5G NR stack, including the gNB, UE, and Core Network (CN) components. This reference design utilizes the latest &amp;quot;develop&amp;quot; branch of the OAI repository for all components.&lt;br /&gt;
&lt;br /&gt;
* The OAI software must be built and installed on the gNB, UE, and CN systems.&lt;br /&gt;
* Only the &amp;quot;develop&amp;quot; branch is used for this deployment to ensure access to the latest features and fixes.&lt;br /&gt;
* It is recommended to build OAI from source using the provided &amp;quot;build_oai&amp;quot; script.&lt;br /&gt;
* Be sure to build and install UHD prior to compiling and installing OAI.&lt;br /&gt;
&lt;br /&gt;
The Git repository for OAI is at the link below.&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g https://gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6428</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6428"/>
				<updated>2025-11-07T16:22:19Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two '''USRP''' devices are required — one for the '''gNB''' and one for the '''UE'''.  &lt;br /&gt;
They can be any of the following models:&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
Interchangeability: &lt;br /&gt;
You can mix devices (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
&lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50 / 100 / 200 MHz&lt;br /&gt;
** USRP X410: 50 / 100 / 200 / 400 MHz&lt;br /&gt;
&lt;br /&gt;
== OctoClock-G ==&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios  &lt;br /&gt;
(only necessary when both ends use USRPs).&lt;br /&gt;
&lt;br /&gt;
* Ensure you are using the “-G” version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
mmm&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6427</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6427"/>
				<updated>2025-11-07T16:21:50Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/shop/desktop-computers/precision-5860-tower/spd/precision-5860-workstation Dell Precision 5860 Tower Workstation]&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks, as the throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom's Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and should not be required.&lt;br /&gt;
&lt;br /&gt;
===Memory===&lt;br /&gt;
&lt;br /&gt;
* Minimum: 16 GB&lt;br /&gt;
* Dual-channel or quad-channel DDR4 or DDR5 memory&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
&lt;br /&gt;
===GPU===&lt;br /&gt;
&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
&lt;br /&gt;
===10 Gbps Ethernet Network Card===&lt;br /&gt;
&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard 1 Gbps Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
&lt;br /&gt;
===QSFP28-to-SFP28 Breakout Cable for USRP X410===&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 (100 GbE) ports. To connect the USRP X410 to the 10 GbE network card on a host computer, use a QSFP28-to-4xSFP28 breakout cable.&lt;br /&gt;
&lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
&lt;br /&gt;
The USRP X410 can also use its QSFP28 100 Gbps Ethernet Connection. This requires that the host computer have a 100 Gbps QSFP28 Ethernet card.&lt;br /&gt;
&lt;br /&gt;
Recommended network cards:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
&lt;br /&gt;
This reference architecture does not require full 100 GbE links. Dual 10 Gbps SFP+ links are sufficient for 1x1 and 2x2 MIMO operation in FR1.&lt;br /&gt;
&lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two '''USRP''' devices are required — one for the '''gNB''' and one for the '''UE'''.  &lt;br /&gt;
They can be any of the following models:&lt;br /&gt;
&lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
Interchangeability: &lt;br /&gt;
You can mix devices (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
&lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50 / 100 / 200 MHz&lt;br /&gt;
** USRP X410: 50 / 100 / 200 / 400 MHz&lt;br /&gt;
&lt;br /&gt;
== OctoClock-G ==&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios  &lt;br /&gt;
(only necessary when both ends use USRPs).&lt;br /&gt;
&lt;br /&gt;
* Ensure you are using the “-G” version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6426</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6426"/>
				<updated>2025-11-07T16:05:20Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]  (14 cores at 4.6 GHz)&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] (16 cores at 5.2 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon w7-2495X] (24 cores at 4.8 GHz)&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/212288/intel-xeon-platinum-8351n-processor-54m-cache-2-40-ghz/specifications.html Intel Xeon Platinum 8351N] (36 cores at 3.5 GHz)&lt;br /&gt;
 &lt;br /&gt;
===Disk===&lt;br /&gt;
&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks — throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom’s Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and rarely required.&lt;br /&gt;
 &lt;br /&gt;
== Memory ==&lt;br /&gt;
* Dual- or quad-channel DDR4/DDR5 (DDR5 preferred)&lt;br /&gt;
* Minimum: 16 GB to 32 GB&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
 &lt;br /&gt;
== GPU ==&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
 &lt;br /&gt;
== 10 Gbps Ethernet Network Card ==&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
 &lt;br /&gt;
Recommended NICs:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
== QSFP28 → SFP28 Breakout Cable for USRP X410 ==&lt;br /&gt;
The USRP X410 uses a QSFP28 (100 GbE) port.  &lt;br /&gt;
To connect it to 10 GbE or 25 GbE NICs, a '''QSFP28 → 4 × SFP28''' breakout cable is required.&lt;br /&gt;
 &lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
 &lt;br /&gt;
Alternative: Direct 100 GbE Connection&lt;br /&gt;
Use a 100 GbE QSFP28 NIC + QSFP28 DAC:&lt;br /&gt;
 &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
 &lt;br /&gt;
Intel Alternative:&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
 &lt;br /&gt;
Note: &lt;br /&gt;
This reference architecture does not require full 100 GbE links.  &lt;br /&gt;
Dual 10 GbE is sufficient unless testing FR2 (200/400 MHz) or 2×2 MIMO setups.&lt;br /&gt;
 &lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/work/shop/desktops-all-in-one-pcs/precision-5820-tower-workstation/spd/precision-5820-workstation Dell Precision 5820 Workstation]&lt;br /&gt;
 &lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two '''USRP''' devices are required — one for the '''gNB''' and one for the '''UE'''.  &lt;br /&gt;
They can be any of the following models:&lt;br /&gt;
 &lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
 &lt;br /&gt;
Interchangeability: &lt;br /&gt;
You can mix devices (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
 &lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50 / 100 / 200 MHz&lt;br /&gt;
** USRP X410: 50 / 100 / 200 / 400 MHz&lt;br /&gt;
 &lt;br /&gt;
== OctoClock-G ==&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios  &lt;br /&gt;
(only necessary when both ends use USRPs).&lt;br /&gt;
 &lt;br /&gt;
* Ensure you are using the “-G” version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6425</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6425"/>
				<updated>2025-11-07T16:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
&lt;br /&gt;
This section discusses details about each of the hardware components in the system.&lt;br /&gt;
&lt;br /&gt;
===Host Computers===&lt;br /&gt;
&lt;br /&gt;
Two or three host computers are needed, one for the gNB, one for the UE, and optionally one for the Core Network (CN). While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications. Each system should be dedicated to a single role (gNB, UE, or CN). A single host should not run multiple components simultaneously.&lt;br /&gt;
&lt;br /&gt;
===CPU===&lt;br /&gt;
&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (12th to 14th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 8 physical cores (for CN) or 20 physical cores (for gNB and UE)&lt;br /&gt;
** At least 24 PCIe lanes (for network card, more if GPU is also needed)&lt;br /&gt;
** PCIe Gen 4 support&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X] – 14 cores, 4.6 GHz&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] – 16 cores, 5.2 GHz&lt;br /&gt;
* Intel Xeon Platinum 8351N&lt;br /&gt;
 &lt;br /&gt;
== Disk ==&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks — throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom’s Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and rarely required.&lt;br /&gt;
 &lt;br /&gt;
== Memory ==&lt;br /&gt;
* Dual- or quad-channel DDR4/DDR5 (DDR5 preferred)&lt;br /&gt;
* Minimum: 16 GB to 32 GB&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
 &lt;br /&gt;
== GPU ==&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
 &lt;br /&gt;
== 10 Gbps Ethernet Network Card ==&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
 &lt;br /&gt;
Recommended NICs:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
== QSFP28 → SFP28 Breakout Cable for USRP X410 ==&lt;br /&gt;
The USRP X410 uses a QSFP28 (100 GbE) port.  &lt;br /&gt;
To connect it to 10 GbE or 25 GbE NICs, a '''QSFP28 → 4 × SFP28''' breakout cable is required.&lt;br /&gt;
 &lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
 &lt;br /&gt;
Alternative: Direct 100 GbE Connection&lt;br /&gt;
Use a 100 GbE QSFP28 NIC + QSFP28 DAC:&lt;br /&gt;
 &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
 &lt;br /&gt;
Intel Alternative:&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
 &lt;br /&gt;
Note: &lt;br /&gt;
This reference architecture does not require full 100 GbE links.  &lt;br /&gt;
Dual 10 GbE is sufficient unless testing FR2 (200/400 MHz) or 2×2 MIMO setups.&lt;br /&gt;
 &lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/work/shop/desktops-all-in-one-pcs/precision-5820-tower-workstation/spd/precision-5820-workstation Dell Precision 5820 Workstation]&lt;br /&gt;
 &lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two '''USRP''' devices are required — one for the '''gNB''' and one for the '''UE'''.  &lt;br /&gt;
They can be any of the following models:&lt;br /&gt;
 &lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
 &lt;br /&gt;
Interchangeability: &lt;br /&gt;
You can mix devices (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
 &lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50 / 100 / 200 MHz&lt;br /&gt;
** USRP X410: 50 / 100 / 200 / 400 MHz&lt;br /&gt;
 &lt;br /&gt;
== OctoClock-G ==&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios  &lt;br /&gt;
(only necessary when both ends use USRPs).&lt;br /&gt;
 &lt;br /&gt;
* Ensure you are using the “-G” version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6424</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6424"/>
				<updated>2025-11-07T15:49:06Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
 &lt;br /&gt;
== Host Computers ==&lt;br /&gt;
Two or three host computers are needed — one for the gNB, one for the UE, and optionally one for the Core Network (CN).  &lt;br /&gt;
While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications.  &lt;br /&gt;
Each system should be dedicated to a single role (gNB, UE, or CN).  &lt;br /&gt;
A single host should not run multiple components simultaneously.&lt;br /&gt;
 &lt;br /&gt;
== CPU ==&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (10th–12th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 10 physical cores&lt;br /&gt;
** At least 40 PCIe lanes (for NIC + GPU)&lt;br /&gt;
** PCIe Gen 4 support (preferred)&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X] – 14 cores, 4.6 GHz&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] – 16 cores, 5.2 GHz&lt;br /&gt;
* Intel Xeon Platinum 8351N&lt;br /&gt;
 &lt;br /&gt;
== Disk ==&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks — throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom’s Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and rarely required.&lt;br /&gt;
 &lt;br /&gt;
== Memory ==&lt;br /&gt;
* Dual- or quad-channel DDR4/DDR5 (DDR5 preferred)&lt;br /&gt;
* Minimum: 16 GB to 32 GB&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
 &lt;br /&gt;
== GPU ==&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
 &lt;br /&gt;
== 10 Gbps Ethernet Network Card ==&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
 &lt;br /&gt;
Recommended NICs:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
== QSFP28 → SFP28 Breakout Cable for USRP X410 ==&lt;br /&gt;
The USRP X410 uses a QSFP28 (100 GbE) port.  &lt;br /&gt;
To connect it to 10 GbE or 25 GbE NICs, a '''QSFP28 → 4 × SFP28''' breakout cable is required.&lt;br /&gt;
 &lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
 &lt;br /&gt;
Alternative: Direct 100 GbE Connection&lt;br /&gt;
Use a 100 GbE QSFP28 NIC + QSFP28 DAC:&lt;br /&gt;
 &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
 &lt;br /&gt;
Intel Alternative:&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
 &lt;br /&gt;
Note: &lt;br /&gt;
This reference architecture does not require full 100 GbE links.  &lt;br /&gt;
Dual 10 GbE is sufficient unless testing FR2 (200/400 MHz) or 2×2 MIMO setups.&lt;br /&gt;
 &lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/work/shop/desktops-all-in-one-pcs/precision-5820-tower-workstation/spd/precision-5820-workstation Dell Precision 5820 Workstation]&lt;br /&gt;
 &lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two '''USRP''' devices are required — one for the '''gNB''' and one for the '''UE'''.  &lt;br /&gt;
They can be any of the following models:&lt;br /&gt;
 &lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
 &lt;br /&gt;
Interchangeability: &lt;br /&gt;
You can mix devices (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
 &lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50 / 100 / 200 MHz&lt;br /&gt;
** USRP X410: 50 / 100 / 200 / 400 MHz&lt;br /&gt;
 &lt;br /&gt;
== OctoClock-G ==&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios  &lt;br /&gt;
(only necessary when both ends use USRPs).&lt;br /&gt;
 &lt;br /&gt;
* Ensure you are using the “-G” version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6423</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6423"/>
				<updated>2025-11-07T15:48:10Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
 &lt;br /&gt;
== Host Computers ==&lt;br /&gt;
Two or three host computers are needed — one for the gNB, one for the UE, and optionally one for the Core Network (CN).  &lt;br /&gt;
While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications.  &lt;br /&gt;
Each system should be dedicated to a single role (gNB, UE, or CN).  &lt;br /&gt;
A single host should not run multiple components simultaneously.&lt;br /&gt;
 &lt;br /&gt;
== CPU ==&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (10th–12th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 10 physical cores&lt;br /&gt;
** At least 40 PCIe lanes (for NIC + GPU)&lt;br /&gt;
** PCIe Gen 4 support (preferred)&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X] – 14 cores, 4.6 GHz&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] – 16 cores, 5.2 GHz&lt;br /&gt;
* Intel Xeon Platinum 8351N&lt;br /&gt;
 &lt;br /&gt;
== Disk ==&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks — throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom’s Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and rarely required.&lt;br /&gt;
 &lt;br /&gt;
== Memory ==&lt;br /&gt;
* Dual- or quad-channel DDR4/DDR5 (DDR5 preferred)&lt;br /&gt;
* Minimum: 16 GB to 32 GB&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
 &lt;br /&gt;
== GPU ==&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
 &lt;br /&gt;
== 10 Gbps Ethernet Network Card ==&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
 &lt;br /&gt;
Recommended NICs:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
== QSFP28 → SFP28 Breakout Cable for USRP X410 ==&lt;br /&gt;
The USRP X410 uses a QSFP28 (100 GbE) port.  &lt;br /&gt;
To connect it to 10 GbE or 25 GbE NICs, a '''QSFP28 → 4 × SFP28''' breakout cable is required.&lt;br /&gt;
 &lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
 &lt;br /&gt;
Alternative: Direct 100 GbE Connection&lt;br /&gt;
Use a 100 GbE QSFP28 NIC + QSFP28 DAC:&lt;br /&gt;
 &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
 &lt;br /&gt;
Intel Alternative:&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
 &lt;br /&gt;
Note: &lt;br /&gt;
This reference architecture does not require full 100 GbE links.  &lt;br /&gt;
Dual 10 GbE is sufficient unless testing FR2 (200/400 MHz) or 2×2 MIMO setups.&lt;br /&gt;
 &lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/work/shop/desktops-all-in-one-pcs/precision-5820-tower-workstation/spd/precision-5820-workstation Dell Precision 5820 Workstation]&lt;br /&gt;
 &lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two '''USRP''' devices are required — one for the '''gNB''' and one for the '''UE'''.  &lt;br /&gt;
They can be any of the following models:&lt;br /&gt;
 &lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
 &lt;br /&gt;
Interchangeability: &lt;br /&gt;
You can mix devices (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
 &lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50 / 100 / 200 MHz&lt;br /&gt;
** USRP X410: 50 / 100 / 200 / 400 MHz&lt;br /&gt;
 &lt;br /&gt;
== OctoClock-G ==&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios  &lt;br /&gt;
(only necessary when both ends use USRPs).&lt;br /&gt;
 &lt;br /&gt;
* Ensure you are using the “-G” version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6422</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6422"/>
				<updated>2025-11-07T15:46:18Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
==Hardware Requirements==&lt;br /&gt;
 &lt;br /&gt;
== Host Computers ==&lt;br /&gt;
Two or three host computers are needed — one for the gNB, one for the UE, and optionally one for the Core Network (CN).  &lt;br /&gt;
While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications.  &lt;br /&gt;
Each system should be dedicated to a single role (gNB, UE, or CN).  &lt;br /&gt;
A single host should not run multiple components simultaneously.&lt;br /&gt;
 &lt;br /&gt;
== CPU ==&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (10th–12th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 10 physical cores&lt;br /&gt;
** At least 40 PCIe lanes (for NIC + GPU)&lt;br /&gt;
** PCIe Gen 4 support (preferred)&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X] – 14 cores, 4.6 GHz&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] – 16 cores, 5.2 GHz&lt;br /&gt;
* Intel Xeon Platinum 8351N&lt;br /&gt;
 &lt;br /&gt;
== Disk ==&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks — throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom’s Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and rarely required.&lt;br /&gt;
 &lt;br /&gt;
== Memory ==&lt;br /&gt;
* Dual- or quad-channel DDR4/DDR5 (DDR5 preferred)&lt;br /&gt;
* Minimum: 16 GB to 32 GB&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
 &lt;br /&gt;
== GPU ==&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
 &lt;br /&gt;
== 10 Gbps Ethernet Network Card ==&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
 &lt;br /&gt;
Recommended NICs:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
== QSFP28 → SFP28 Breakout Cable for USRP X410 ==&lt;br /&gt;
The USRP X410 uses a QSFP28 (100 GbE) port.  &lt;br /&gt;
To connect it to 10 GbE or 25 GbE NICs, a '''QSFP28 → 4 × SFP28''' breakout cable is required.&lt;br /&gt;
 &lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
 &lt;br /&gt;
Alternative: Direct 100 GbE Connection&lt;br /&gt;
Use a 100 GbE QSFP28 NIC + QSFP28 DAC:&lt;br /&gt;
 &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
 &lt;br /&gt;
Intel Alternative:&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
 &lt;br /&gt;
Note: &lt;br /&gt;
This reference architecture does not require full 100 GbE links.  &lt;br /&gt;
Dual 10 GbE is sufficient unless testing FR2 (200/400 MHz) or 2×2 MIMO setups.&lt;br /&gt;
 &lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/work/shop/desktops-all-in-one-pcs/precision-5820-tower-workstation/spd/precision-5820-workstation Dell Precision 5820 Workstation]&lt;br /&gt;
 &lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two '''USRP''' devices are required — one for the '''gNB''' and one for the '''UE'''.  &lt;br /&gt;
They can be any of the following models:&lt;br /&gt;
 &lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
 &lt;br /&gt;
Interchangeability: &lt;br /&gt;
You can mix devices (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
 &lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50 / 100 / 200 MHz&lt;br /&gt;
** USRP X410: 50 / 100 / 200 / 400 MHz&lt;br /&gt;
 &lt;br /&gt;
== OctoClock-G ==&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios  &lt;br /&gt;
(only necessary when both ends use USRPs).&lt;br /&gt;
 &lt;br /&gt;
* Ensure you are using the “-G” version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6421</id>
		<title>5G OAI End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_OAI_End-to-End_Reference_Architecture_with_USRP&amp;diff=6421"/>
				<updated>2025-11-07T15:36:32Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: Created page with &amp;quot;== Application Note Number and Authors ==  '''AN-598'''  == Authors ==  Bharat Agarwal and Neel Pandeya  ==Executive Summary==  This Application Note presents a comprehensive...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-598'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying end-to-end (E2E) 5G NR Stand-Alone (SA) systems using the Eurecom OpenAirInterface (OAI) software stack on the USRP N300, N310, N320, N321, and X410 radios. The USRP B200, B210, B200mini, B206mini, X300, X310 radios can also be used, but with limitations, and are also discussed in this document  The reference design encompasses the base station (gNB), the user equipment (UE), and the Core Network (CN) components of the network, enabling researchers and engineers to build and evaluate full end-to-end deployments.&lt;br /&gt;
&lt;br /&gt;
The reference design offers flexibility in the Core Network deployment. The CN can be installed on the same machine as the gNB, suitable for compact and portable set-ups. Alternatively, the CN can be hosted on a separate machine, allowing for a distributed architecture to facilitate system testing and high-performance operation.&lt;br /&gt;
&lt;br /&gt;
The reference design supports three types of UE.&lt;br /&gt;
* The UE implemented using a USRP radio and the OAI UE software stack.&lt;br /&gt;
* The UE implemented using a wireless modem module, such as from Quectel or Sierra Wireless.&lt;br /&gt;
* The UE implemented using a commercial off-the-shelf (COTS) handset, such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
The reference design supports operation in Frequency Range 1 (FR1), and a discussion of operation in FR2 (20 to 44 GHz) and FR3 (6 to 20 GHz) will be added at a future date.&lt;br /&gt;
&lt;br /&gt;
This document provides detailed instructions on hardware and software installation, configuration, and execution, alongside expected results, benchmarking methods, performance monitoring, and troubleshooting guidance.&lt;br /&gt;
&lt;br /&gt;
The solution brochure for the OAI Reference Architecture for 5G and 6G Research with the USRP can be downloaded [https://www.ni.com/en/forms/oai-reference-architecture-brochure.html here].&lt;br /&gt;
&lt;br /&gt;
An overview of using OAI Software for 5G and 6G research at this [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping/research-6g-technologies-using-openairinterface-software.html webpage here].&lt;br /&gt;
&lt;br /&gt;
You can learn more about other solutions for 5G and 6G Wireless Research and Prototyping at the [https://www.ni.com/en/solutions/electronics/5g-6g-wireless-research-prototyping.html webpage here].&lt;br /&gt;
&lt;br /&gt;
==Overview of the USRP Hardware==&lt;br /&gt;
&lt;br /&gt;
The Universal Software Radio Peripheral (USRP) devices from NI (an Emerson company) are software-defined radios which are widely used for wireless research, prototyping, and education. The hardware specifications for the various USRP devices are listed elsewhere on this Knowledge Base (KB).&lt;br /&gt;
&lt;br /&gt;
The ideal USRP radios for deploying end-to-end (E2E) 5G systems are the USRP N300, N310, N320, N321, and X410. These radios natively support all the 5G sampling rates used in the 3GPP specifications, and they support all the FR1 channel bandwidths from 5 to 100 MHz.  The 5G systems use standardized sampling rates based on the channel bandwidth and sub-carrier spacing (SCS) (the numerology) to ensure interoperability and efficient signal processing.&lt;br /&gt;
&lt;br /&gt;
For the USRP N300, N320, N321, there should be two 10 Gbps SFP+ Ethernet connections to the host computer, along with one 1 Gbps Ethernet link for the Management Port. On the host computer, a dual-port 10 Gbps Ethernet network card is used to connect to the USRP.&lt;br /&gt;
&lt;br /&gt;
The USRP X410 has two QSFP28 100 Gbps Ethernet ports. There are two options for connectivity to the host computer, depending on what the IQ data rate is (how much bandwidth is needed). The first option is to use a QSFP28-to-4xSFP28 breakout cable on one of the QSFP28 ports. This will provide four 25 Gbps SFP28 Ethernet links. On the host computer, a dual-port SFP28/SFP+ Ethernet network card should be used. The second option is to use one of the two QSFP28 ports directly, with a QSFP28-to-QSFP28 cable, and with a 100 Gbps QSFP28 Ethernet network card on the host computer.&lt;br /&gt;
&lt;br /&gt;
The USRP B200, B210, B200mini, B206mini radios can also be used as the gNB or UE, but with some limitations.  The primary limitation is that you will only be able to operate with a maximum channel bandwidth of 40 MHz.  And even this channel bandwidth may not be possible, depending on what sampling rate is used, and whether the host computer has sufficient resources to support that sampling rate.  The host computer should ideally be able to support the maximum 61.44 Msps, but the sampling rate may be limited to 30.72 Msps, or other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. In addition, the USB interface is not as robust, and incurs more CPU overhead, than an Ethernet interface.&lt;br /&gt;
&lt;br /&gt;
The USRP X300 and X310 radios can also be used as the gNB or UE, but with some limitations. Due to the 184.32 master clock rate (MCR), many of the 5G sampling rates cannot be achieved, or can only be achieved using odd decimations factors, which is undesirable because of the much-higher attenuation. It is likely that other non-standard sampling rates such as 42.08 Msps may have to be used as a compromise, and this may correspondingly reduce the channel bandwidth and may cause quirks or problems in the physical layer processing. The OAI software supports a three-quarter sampling rate for these cases using non-standard sampling rates, which is enabled with the &amp;quot;-E&amp;quot; command line option. This can be used, for example, to select a 46.08 Msps sampling rate instead of the ideal 61.44 Msps sampling rate.&lt;br /&gt;
&lt;br /&gt;
Listed below are links to resources for the relevant USRP devices.&lt;br /&gt;
* The KB Hardware Resource page for the USRP B200, B210, B200mini, B206mini can be found [https://kb.ettus.com/B200/B210/B200mini/B205mini/B206mini here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X300 and X310 can be found [https://kb.ettus.com/X300/X310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N300 and N310 can be found [https://kb.ettus.com/N300/N310 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP N320 and N321 can be found [https://kb.ettus.com/N320/N321 here].&lt;br /&gt;
* The KB Hardware Resource page for the USRP X410 can be found [https://kb.ettus.com/X410 here].&lt;br /&gt;
&lt;br /&gt;
If the UE is implemented using a USRP device, then it is recommended that the gNB USRP and the UE USRP be synchronized with the use of a 10 MHz reference signal and a 1 PPS signal, distributed from a common source. This can be provided by the OctoClock-G (see [https://kb.ettus.com/OctoClock_CDA-2990 here] and [https://uhd.readthedocs.io/en/uhd-4.8/page_octoclock.html here] for more information).&lt;br /&gt;
&lt;br /&gt;
This document focuses on the use of the USRP X410. The usage of the USRP N300, N310, N320 is very similar to that of the X410. Specific discussion of the use of the USRP B200, B210, B200mini, B206mini, X300, X310 will be added in the near future.&lt;br /&gt;
&lt;br /&gt;
Further details of the hardware configuration will be discussed later in this document.&lt;br /&gt;
&lt;br /&gt;
==Overview of the OAI Software Stack==&lt;br /&gt;
&lt;br /&gt;
The OpenAirInterface (OAI) software stack provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) Stand-Alone (SA) protocol stack. It is designed to run in real-time on commodity x86 hardware and interoperate with USRP software-defined radios. Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA), which is a non-profit organization that supports open wireless innovation and collaborative research. OAI enables complete 5G system prototyping and research with implementations of the base station (gNB), the user equipment (UE), and the core network (CN). The OAI stack also allows for the use of other third-party core network software, such as Free5GC and Open5GS. This document does not discuss integration with the Free5GC and Open5GS core network softwares. The OAI software stack is designed to operate in real-time with USRP radios, support interoperability with commercial 5G handsets (COTS handsets), and enable academic, experimental, and pre-commercial deployments. The OAI software stack is structured around multiple Git repositories, enabling modularity and collaborative development of the OAI 5G Radio Access Network (RAN) Project and the OAI 5G Core Network (OAI-CN). The OAI source code is made freely available for non-commercial and academic research use, and licensing details can be found on the OAI website.&lt;br /&gt;
&lt;br /&gt;
Links to the relevant Git repositories are listed below.&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/openairinterface5g OAI 5G Radio Access Network (RAN)]&lt;br /&gt;
* [https://gitlab.eurecom.fr/oai/cn5g OAI 5G Core Network (OAI-CN)]&lt;br /&gt;
&lt;br /&gt;
==Overview of the Reference Architecture==&lt;br /&gt;
&lt;br /&gt;
This OAI End-to-End Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR SA systems using open-source software and commercial USRP hardware. This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups.&lt;br /&gt;
* A modular, distributed configuration for scalable experimentation.&lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of UE devices, including Quectel 5G modem modules, USRP-based UEs, and COTS handsets such as the Google Pixel 9.&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 1: OAI gNB and CN on the Same Machine===&lt;br /&gt;
&lt;br /&gt;
In this configuration, both the OAI Core Network (CN) and the OAI gNB are hosted on the same physical machine. This is typically used in lab-based research and teaching environments, portable demos and proof-of-concept systems, and quick-start testbeds for 5G protocol stack development.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
* Operating System: Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8&lt;br /&gt;
* USRP X410&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Easy to debug and deploy.&lt;br /&gt;
* Lower hardware requirements.&lt;br /&gt;
* Simple setup with fewer network dependencies.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* Shared CPU and I/O resources may limit performance.&lt;br /&gt;
* Less suitable and less scalable for high-throughput traffic testing and when using high sampling rates.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch.jpg|thumb|800px|center|Single-machine deployment with both OAI Core Network and gNB on the same host. USRP X410 provides RF connectivity to various UE types, including Quectel module, USRP UE, and Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
===Deployment Configuration 2: OAI gNB and CN on Separate Machines===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch. It is ideal for research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior, or for scalable testbeds with high-throughput and isolated workloads, or for large MIMO, beamforming or MEC-based deployments.&lt;br /&gt;
&lt;br /&gt;
The configuration of the system architecture is listed below.&lt;br /&gt;
&lt;br /&gt;
* gNB Host Computer: Intel or AMD CPU, with minimum 20 physical cores, such as the [https://www.intel.com/content/www/us/en/products/sku/233416/intel-xeon-w72495x-processor-45m-cache-2-50-ghz/specifications.html Intel Xeon W7-2495X], and with minimum 16 GB memory, and with 10 or 100 Gbps Ethernet card.&lt;br /&gt;
• CN Host Computer: Intel i9 CPU or Xeon CPU, with minimum 8 physical performance cores&lt;br /&gt;
* Operating System: Both hosts running Ubuntu 22.04.5, running on-the-metal (no virtual machine (VM))&lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core Network (AMF, SMF, UPF, NRF, etc.)&lt;br /&gt;
* UHD Version: 4.8 (gNB only)&lt;br /&gt;
* USRP X410 (gNB only)&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability.&lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints.&lt;br /&gt;
* Better performance profiling of CN and gNB independently.&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
* More complicated IP addressing, routing, and DNS configuration.&lt;br /&gt;
* More complicated to configure and monitor in real-time.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_E2E_Arch_Different_Machines.jpg|thumb|800px|center|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
==Cable and Connectivity Setup==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE. The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
===Quectel Wireless Module UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The diagram in the figure listed below illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB. This setup enables direct RF loopback in a controlled lab environment using coaxial cable connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.&lt;br /&gt;
&lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3) which are routed to a 4-way power splitter (Mini-Circuits ZN4PD1-63HP-S+) to combine the signals.&lt;br /&gt;
&lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within safe operating range.&lt;br /&gt;
&lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (Mini-Circuits ZN2PD2-50-S+) which separates it into TX/RX and RX-only paths.&lt;br /&gt;
&lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25G) links for baseband data transfer and synchronization.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_COTS_UE.png|thumb|800px|center|Cable and RF splitter and attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB]]&lt;br /&gt;
&lt;br /&gt;
===USRP-Based UE Cable Configuration===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the RF cabling setup used when both the OAI gNB and OAI UE are implemented using separate USRP X410 devices. This setup enables full bidirectional communication in a lab environment without the need for OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP X410 is connected to its respective host computer via dual SFP+ ports (Port 0 and Port 1), providing high-throughput data and synchronization channels.&lt;br /&gt;
&lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.&lt;br /&gt;
&lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe and within operational range for lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.&lt;br /&gt;
&lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.&lt;br /&gt;
&lt;br /&gt;
[[File:cable_setup_with_USRP_UE.png|thumb|800px|center|Cable setup between OAI gNB and OAI NR UE using two USRP X410 devices and RF splitters]]&lt;br /&gt;
&lt;br /&gt;
===Commercial UE Configuration with COTS Handset Over-the-Air (OTA)===&lt;br /&gt;
&lt;br /&gt;
The figure listed below illustrates the setup for using a COTS 5G smartphone (Google Pixel 9) as the UE, in conjunction with the OAI NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon W7-2495X CPU, and interfaces with a USRP X410 via two SFP+ ports.&lt;br /&gt;
&lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Google Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling. The Pixel 9 receives the signal wirelessly from the gNB.&lt;br /&gt;
&lt;br /&gt;
* SIM Card: The Google Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI core network.&lt;br /&gt;
&lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.&lt;br /&gt;
&lt;br /&gt;
[[File:OAI_With_Google_Pixel_9.jpg|thumb|800px|center|OTA-based connectivity with Google Pixel 9 and Open Cell SIM]]&lt;br /&gt;
&lt;br /&gt;
==Bill of Materials==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is listed below. This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research. The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations. The system design is modular and scalable—users can choose to co-locate or distribute gNB and Core Network (CN) components, and can switch between different UE types depending on the research focus, such as PHY-level tuning, link testing, or full-stack validation with 3GPP-compliant UEs.&lt;br /&gt;
&lt;br /&gt;
* Two or three desktop computers, with Intel i9 and/or Xeon CPU, of 12th, 13th, or 14th Generation, with clock speed of minimum 4.0 GHz, with minimum 8 (for i9 CPU) or 20 (for Xeon CPU) physical cores, and also with only NVMe disk drives. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet networks cards. We recommend the Intel 810-XXVDA2 and the Nvidia/Mellanox ConnectX-6 Lx (MCX631102A-ACAT) network cards. See further details about this item in the Hardware Requirements section.&lt;br /&gt;
&lt;br /&gt;
* The USRP may be any of USRP N300, N310, N320, N321, X410. There will be one USRP for the gNB, and one USRP for the UE. The USRP devices can be mixed (i.e., the gNB could run with a USRP X410, while the UE runs with a USRP N310).&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 breakout cable. This is only required when using the USRP X410.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html Nvidia MCP7F00-A003R26N] is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 26 AWG.&lt;br /&gt;
&lt;br /&gt;
** [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html Nvidia MCP7F00-A003R30L is a passive copper DAC splitter cable, 100GbE to 4x25GbE, 3m, 30 AWG.&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G. This is needed to synchronize the gNB USRP and the UE USRP. Ensure that device used is the &amp;quot;-G&amp;quot; model, which contains an internal GPSDO module. This is only needed when the UE is implemented on a USRP device.&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet cables with SFP+ terminations: Required when using USRP N300, N310, N320, or N321. Not needed for USRP X410. Available in multiple lengths:&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-dc/ 0.5 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-1m/ 1.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/10gige-3m/ 3.0 meter SFP+ Ethernet cable]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 antennas: Select based on the frequency bands in use. Third-party antennas are also compatible if they have a 50-ohm impedance and SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert900/ VERT900 Antenna]&lt;br /&gt;
&lt;br /&gt;
** [https://www.ettus.com/all-products/vert2450/ VERT2450 Antenna]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM520-GL 5G wireless modem module: Used as a UE option in the reference architecture. See the Hardware Requirements section for integration and compatibility details.&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]&lt;br /&gt;
&lt;br /&gt;
** [https://www.quectel.com/product/5g-rm520n-series/ Quectel RM520N Series Overview]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G handset (phone). Used as a commercial off-the-shelf (COTS) UE in the test setup. Ensure that the handset is unlocked for compatibility with test SIM cards.&lt;br /&gt;
&lt;br /&gt;
** [https://www.gsmarena.com/google_pixel_9-13219.php Google Pixel 9]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM cards and one USB UICC/SIM card reader/writer.&lt;br /&gt;
&lt;br /&gt;
** [https://open-cells.com/index.php/sim-cards/ Open Cells SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Power Splitter (ZN4PD1-63HP-S+), 250 to 6000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Model ZN4PD1-63HP-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Power Splitters (ZN2PD2-50-S+), 500 to 5000 MHz, 50 ohms.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/Splitters.html Mini-Circuits Splitters]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Model ZN2PD2-50-S+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Mini-Circuits Model VAT-10+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC to 6000 MHz, 50 ohms, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Mini-Circuits Model VAT-20+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC to 6000 MHz, 50~$\Omega$, with SMA connectors.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Mini-Circuits Model VAT-30+ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36-inch, 18 GHz.&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Mini-Circuits 086-36SM+ Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.minicircuits.com/pdfs/086-36SM+.pdf Mini-Circuits 086-36SM+ Datasheet]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Unmanaged Switch.&lt;br /&gt;
&lt;br /&gt;
** [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ NETGEAR Product Page]&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Product Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0 to 1 Gbps Ethernet Adapters (USB-A or USB-C depending on host ports).&lt;br /&gt;
&lt;br /&gt;
** [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ CableCreation USB 3.0 to Ethernet Adapter]&lt;br /&gt;
** [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C to Gigabit Ethernet Adapter]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hardware Requirements =&lt;br /&gt;
 &lt;br /&gt;
== Host Computers ==&lt;br /&gt;
Two or three host computers are needed — one for the gNB, one for the UE, and optionally one for the Core Network (CN).  &lt;br /&gt;
While the CN host has lower performance requirements, it is recommended that all machines meet the same baseline specifications.  &lt;br /&gt;
Each system should be dedicated to a single role (gNB, UE, or CN).  &lt;br /&gt;
A single host should not run multiple components simultaneously.&lt;br /&gt;
 &lt;br /&gt;
== CPU ==&lt;br /&gt;
* Recommended: Intel Core i9 or Intel Xeon (10th–12th Generation)&lt;br /&gt;
** Minimum clock speed: 4.0 GHz&lt;br /&gt;
** Minimum 10 physical cores&lt;br /&gt;
** At least 40 PCIe lanes (for NIC + GPU)&lt;br /&gt;
** PCIe Gen 4 support (preferred)&lt;br /&gt;
 &lt;br /&gt;
Example Processors:&lt;br /&gt;
* [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X] – 14 cores, 4.6 GHz&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K] – 16 cores, 5.2 GHz&lt;br /&gt;
* Intel Xeon Platinum 8351N&lt;br /&gt;
 &lt;br /&gt;
== Disk ==&lt;br /&gt;
* Strongly recommended: '''NVMe SSD''' (PCIe Gen 4)&lt;br /&gt;
* Do not use SATA disks — throughput is insufficient.&lt;br /&gt;
* Recommended models:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Amazon Link]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom’s Hardware Review]&lt;br /&gt;
 &lt;br /&gt;
RAID configurations with multiple NVMe drives are optional and rarely required.&lt;br /&gt;
 &lt;br /&gt;
== Memory ==&lt;br /&gt;
* Dual- or quad-channel DDR4/DDR5 (DDR5 preferred)&lt;br /&gt;
* Minimum: 16 GB to 32 GB&lt;br /&gt;
* Higher memory is optional unless running virtualized workloads.&lt;br /&gt;
 &lt;br /&gt;
== GPU ==&lt;br /&gt;
* The GPU is not required for UHD or OAI operation.&lt;br /&gt;
* Include one only if performing AI/ML workloads.&lt;br /&gt;
* The OAI 5G stack currently does not utilize GPU acceleration.&lt;br /&gt;
 &lt;br /&gt;
== 10 Gbps Ethernet Network Card ==&lt;br /&gt;
* The gNB and UE each require a dual-port 10/25 GbE NIC.&lt;br /&gt;
* The CN does not interface directly with USRPs and can use standard Ethernet.&lt;br /&gt;
* Ensure adequate cooling and PCIe slot space.&lt;br /&gt;
 &lt;br /&gt;
Recommended NICs:&lt;br /&gt;
* '''Intel E810-XXVDA2''' (25 GbE, backward compatible with 10 GbE)&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
* NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
** Dual-port SFP28, PCIe Gen 4, Linux + DPDK compatible&lt;br /&gt;
** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon Link]&lt;br /&gt;
 &lt;br /&gt;
== QSFP28 → SFP28 Breakout Cable for USRP X410 ==&lt;br /&gt;
The USRP X410 uses a QSFP28 (100 GbE) port.  &lt;br /&gt;
To connect it to 10 GbE or 25 GbE NICs, a '''QSFP28 → 4 × SFP28''' breakout cable is required.&lt;br /&gt;
 &lt;br /&gt;
Recommended cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 3 m, 26 AWG  &lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 3 m, 30 AWG  &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 1 m, 30 AWG  &lt;br /&gt;
 &lt;br /&gt;
Alternative: Direct 100 GbE Connection&lt;br /&gt;
Use a 100 GbE QSFP28 NIC + QSFP28 DAC:&lt;br /&gt;
 &lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CCAT (ConnectX-5 EN, PCIe Gen 3)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html Mellanox MCX516A-CDAT (ConnectX-5 Ex, PCIe Gen 4)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html Mellanox MCP1600-C003E26N (3 m, 26 AWG)]&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html Mellanox MCP1600-C003E30L (3 m, 30 AWG)]&lt;br /&gt;
 &lt;br /&gt;
Intel Alternative:&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28/SFP28)]&lt;br /&gt;
 &lt;br /&gt;
Note: &lt;br /&gt;
This reference architecture does not require full 100 GbE links.  &lt;br /&gt;
Dual 10 GbE is sufficient unless testing FR2 (200/400 MHz) or 2×2 MIMO setups.&lt;br /&gt;
 &lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/work/shop/desktops-all-in-one-pcs/precision-5820-tower-workstation/spd/precision-5820-workstation Dell Precision 5820 Workstation]&lt;br /&gt;
 &lt;br /&gt;
== USRP Devices ==&lt;br /&gt;
Two '''USRP''' devices are required — one for the '''gNB''' and one for the '''UE'''.  &lt;br /&gt;
They can be any of the following models:&lt;br /&gt;
 &lt;br /&gt;
* USRP N300 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 – [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 – [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 – [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
 &lt;br /&gt;
Interchangeability: &lt;br /&gt;
You can mix devices (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
 &lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6 GHz): All models support up to 100 MHz.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: 50 / 100 / 200 MHz&lt;br /&gt;
** USRP X410: 50 / 100 / 200 / 400 MHz&lt;br /&gt;
 &lt;br /&gt;
== OctoClock-G ==&lt;br /&gt;
An OctoClock-G is required to synchronize the gNB and UE USRP radios  &lt;br /&gt;
(only necessary when both ends use USRPs).&lt;br /&gt;
 &lt;br /&gt;
* Ensure you are using the “-G” version, which includes an internal GPSDO (GPS-Disciplined Oscillator).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1200px-X410.jpg&lt;br /&gt;
500px-quectel-ue-ADM-code.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_read.jpg&lt;br /&gt;
800px-quectel-ue-program_uicc_output_for_write.jpg&lt;br /&gt;
AMF_IP_Address.png&lt;br /&gt;
cable_setup_with_COTS_UE.png&lt;br /&gt;
cable_setup_with_USRP_UE.png&lt;br /&gt;
Double_UE_connection_on_gnb_logs.png&lt;br /&gt;
double_ue_connection_on_wireshark.png&lt;br /&gt;
MCC_MNC_update.png&lt;br /&gt;
mobile_phone_connectivity.png&lt;br /&gt;
multi_ue_connection.png&lt;br /&gt;
OAI_CN_Docker_Containers.png&lt;br /&gt;
OAI_Core_Network.jpg&lt;br /&gt;
OAI_E2E_Arch_Different_Machines.jpg&lt;br /&gt;
OAI_E2E_Arch.jpg&lt;br /&gt;
OAI_UE_Config_file.png&lt;br /&gt;
OAI_With_Google_Pixel_9.jpg&lt;br /&gt;
Open_Cell_Sim_Card.jpg&lt;br /&gt;
ORU_Update.png&lt;br /&gt;
quectel-ue-sim-card.jpg&lt;br /&gt;
Start_up_OAI_CN.png&lt;br /&gt;
uhd_find_devices_output.png&lt;br /&gt;
uhd_usrp_probe_output.png&lt;br /&gt;
Wireshark_Capture.png&lt;br /&gt;
Wireshark_OAI_NGAP.png&lt;br /&gt;
Wireshark_OAI.png&lt;br /&gt;
Wireshark_Packet_Captures.png&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mmm.jpg|thumb|800px|center|mmm_mmm_mmm]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:srsran_pixel9_50pc.png&amp;diff=6413</id>
		<title>File:srsran pixel9 50pc.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:srsran_pixel9_50pc.png&amp;diff=6413"/>
				<updated>2025-11-07T13:58:05Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_srsRAN_End-to-End_Reference_Architecture_with_USRP&amp;diff=6412</id>
		<title>5G srsRAN End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_srsRAN_End-to-End_Reference_Architecture_with_USRP&amp;diff=6412"/>
				<updated>2025-11-07T13:56:55Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: /* Commercial UE Setup: Google Pixel 9 Over-the-Air (OTA) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-599'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This Application Note presents a comprehensive reference design for deploying 5G NR Standalone (SA) systems using a hybrid open-source software stack: the srsRAN radio access network components and the OpenAirInterface (OAI) Core Network.  &lt;br /&gt;
This setup runs on NI/Ettus USRP radios, including the B210, enabling practical, low-cost, end-to-end 5G experimentation.&lt;br /&gt;
&lt;br /&gt;
This configuration supports full 5G SA mode and enables complete end-to-end evaluation of the entire protocol stack, from the physical layer up to the core network.&lt;br /&gt;
&lt;br /&gt;
=== Core Network Deployment Options ===&lt;br /&gt;
The OAI Core Network can be deployed in two modes:&lt;br /&gt;
&lt;br /&gt;
* Single-machine deployment: CN and gNB run on the same machine — ideal for compact or portable test setups.  &lt;br /&gt;
* Multi-machine deployment: CN is hosted on a separate machine — ideal for performance scaling or distributed 5G architecture evaluation.&lt;br /&gt;
&lt;br /&gt;
=== UE Configuration Options ===&lt;br /&gt;
This reference architecture supports the following UE configurations:&lt;br /&gt;
&lt;br /&gt;
* A software-defined UE implemented using '''srsUE''' with a USRP B210.  &lt;br /&gt;
* A modem-based UE, such as Quectel or Sierra Wireless modules.  &lt;br /&gt;
* A COTS 5G handset (e.g., '''Google Pixel 9''') for interoperability and benchmarking.&lt;br /&gt;
&lt;br /&gt;
== Overview of the OpenAirInterface (OAI) Software Stack ==&lt;br /&gt;
&lt;br /&gt;
The OAI) software provides a fully open-source and standards-compliant implementation of the 3GPP 5G New Radio (NR) protocol stack.  &lt;br /&gt;
It is designed to run in real time on commodity x86 hardware and interoperate with USRP software-defined radios.  &lt;br /&gt;
&lt;br /&gt;
Initially developed by Eurecom, a leading research institute in France, the project is now actively maintained by the OpenAirInterface Software Alliance (OSA) — a non-profit organization that promotes open wireless innovation and collaborative research.&lt;br /&gt;
&lt;br /&gt;
OAI enables complete 5G system prototyping and research with implementations of:&lt;br /&gt;
* The gNB (next-generation base station)&lt;br /&gt;
* The UE (user equipment)&lt;br /&gt;
* The 5G Core Network (5GCN)&lt;br /&gt;
&lt;br /&gt;
The OAI 5G NR stack is designed to:&lt;br /&gt;
* Operate in real time with USRP radios&lt;br /&gt;
* Support interoperability with commercial 5G NR handsets (e.g., COTS devices)&lt;br /&gt;
* Enable academic, experimental, and pre-commercial deployments&lt;br /&gt;
&lt;br /&gt;
The OAI software stack is organized into multiple Git repositories, allowing modularity and collaborative development:&lt;br /&gt;
&lt;br /&gt;
* OAI 5G Radio Access Network (RAN) Project:  &lt;br /&gt;
  [https://gitlab.eurecom.fr/oai/openairinterface5g gitlab.eurecom.fr/oai/openairinterface5g]&lt;br /&gt;
&lt;br /&gt;
* OAI 5G Core Network (OAI-CN):  &lt;br /&gt;
  [https://gitlab.eurecom.fr/oai/cn5g gitlab.eurecom.fr/oai/cn5g]&lt;br /&gt;
&lt;br /&gt;
OAI source code is freely available for non-commercial and academic research use.  &lt;br /&gt;
Licensing details and additional documentation are available on the [https://www.openairinterface.org/ OpenAirInterface website].&lt;br /&gt;
&lt;br /&gt;
== Overview of srsRAN ==&lt;br /&gt;
&lt;br /&gt;
srsRAN (Software Radio Systems Radio Access Network) is an open-source 4G and 5G software suite developed by Software Radio Systems Ltd. (SRS).  &lt;br /&gt;
It enables researchers, developers, and network engineers to deploy and experiment with end-to-end wireless communication systems.  &lt;br /&gt;
The suite provides modular components for building complete Radio Access Networks (RANs) and supports both 4G LTE and 5G NR (New Radio).&lt;br /&gt;
&lt;br /&gt;
=== Key Components of srsRAN 5G ===&lt;br /&gt;
The srsRAN 5G stack is composed of several main components:&lt;br /&gt;
&lt;br /&gt;
* srsRAN gNB: Implements the 5G NR base station (gNodeB), including PHY, MAC, RLC, PDCP, and NGAP layers. Supports standalone (SA) mode and connects to a 5G Core Network via NG interfaces.  &lt;br /&gt;
* srsUE: A 4G LTE software user equipment used primarily for legacy LTE research. The 5G UE is under active development and partially supported.  &lt;br /&gt;
* srsEPC (for LTE): The Evolved Packet Core for 4G LTE deployments. In 5G, this is replaced by external 5G Core Network solutions such as OAI-CN5G or commercial alternatives.  &lt;br /&gt;
* srsGUI and nrscope: Tools for real-time visualization and debugging of signal and protocol layer performance.  &lt;br /&gt;
&lt;br /&gt;
=== Supported Features ===&lt;br /&gt;
* 5G NR Standalone (SA) mode operation (Release 15+)  &lt;br /&gt;
* Configurable numerology, bandwidth, and frame structure  &lt;br /&gt;
* Support for USRP hardware (e.g., B210, N3xx, X410)  &lt;br /&gt;
* Dynamic scheduling, HARQ, and experimental beamforming  &lt;br /&gt;
* Compatibility with open-source 5G Core solutions (e.g., OAI-CN5G)  &lt;br /&gt;
&lt;br /&gt;
=== Use Cases ===&lt;br /&gt;
srsRAN is widely used for:&lt;br /&gt;
* Academic research and prototyping  &lt;br /&gt;
* 5G network testing and benchmarking  &lt;br /&gt;
* Private network deployments  &lt;br /&gt;
* SDR-based teaching and training environments  &lt;br /&gt;
&lt;br /&gt;
=== Licensing and Community ===&lt;br /&gt;
srsRAN is released under the AGPLv3 license, making it freely available for modification and redistribution under open-source terms.  &lt;br /&gt;
The project is actively maintained and supported by a growing developer community on platforms such as [https://github.com/srsran GitHub] and [https://gitlab.com/srsran GitLab].&lt;br /&gt;
&lt;br /&gt;
Overall, srsRAN provides a robust and flexible platform for 4G/5G experimentation and serves as a valuable resource for researchers working in wireless communications.&lt;br /&gt;
&lt;br /&gt;
== Overview of the Reference Architecture ==&lt;br /&gt;
&lt;br /&gt;
The OAI USRP Reference Architecture enables researchers, developers, and system integrators to build complete 5G NR systems using open-source software and commercial SDR hardware.  &lt;br /&gt;
This section outlines two typical deployment modes of the architecture:&lt;br /&gt;
&lt;br /&gt;
* A compact, single-host configuration for integrated lab setups  &lt;br /&gt;
* A modular, distributed configuration for scalable experimentation  &lt;br /&gt;
&lt;br /&gt;
Each mode supports connectivity to a diverse range of User Equipment (UE), including Quectel 5G modules, USRP-based UEs, and commercial handsets such as the Google Pixel 9 with an open SIM.&lt;br /&gt;
&lt;br /&gt;
=== Deployment 1: OAI gNB and CN on the Same Machine ===&lt;br /&gt;
&lt;br /&gt;
In this setup, both the OAI Core Network (CN) and the OAI NR gNB are hosted on the same physical machine.  &lt;br /&gt;
This configuration is typically used for:&lt;br /&gt;
&lt;br /&gt;
* Lab-based research and teaching environments  &lt;br /&gt;
* Portable demos and proof-of-concept systems  &lt;br /&gt;
* Quick-start testbeds for 5G protocol stack development  &lt;br /&gt;
&lt;br /&gt;
Architecture Highlights:&lt;br /&gt;
* Compute Node: High-core-count x86 server (e.g., Intel Xeon w7-2495X, 24 cores)  &lt;br /&gt;
* Operating System: Ubuntu 22.04  &lt;br /&gt;
* Software Stack: OpenAirInterface gNB (monolithic) and 5G Core (AMF, SMF, UPF, NRF, etc.)  &lt;br /&gt;
* UHD Version: 4.8  &lt;br /&gt;
* RF Front-End: USRP X410 with SFP+ (10/100 Gbps) link  &lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Simple setup with fewer network dependencies  &lt;br /&gt;
* Easy to debug and deploy  &lt;br /&gt;
* Lower hardware requirements  &lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
* Less suitable for high-throughput traffic testing  &lt;br /&gt;
* Shared CPU and I/O resources may limit performance  &lt;br /&gt;
&lt;br /&gt;
[[File:srsgnb_srsue_oaiue_50pc.jpg|center|800px|thumb|Single-host deployment where both the OAI Core Network and the srsRAN gNB are executed on the same machine. RF connectivity is established using a USRP B210, enabling communication with the gNB and various types of UEs, including Quectel modules and the Google Pixel 9.]]&lt;br /&gt;
&lt;br /&gt;
=== Deployment 2: OAI gNB and CN on Separate Machines ===&lt;br /&gt;
&lt;br /&gt;
This configuration separates the OAI gNB and CN onto two dedicated physical systems connected via an Ethernet switch.  &lt;br /&gt;
It is ideal for:&lt;br /&gt;
&lt;br /&gt;
* Research involving modular network slicing, edge cloud integration, or realistic RAN-Core interface behavior  &lt;br /&gt;
* Scalable testbeds with high-throughput and isolated workloads  &lt;br /&gt;
* Large MIMO, beamforming, or MEC-based deployments  &lt;br /&gt;
&lt;br /&gt;
Architecture Highlights:&lt;br /&gt;
* gNB Node: Intel Xeon w7-2495X, 24 cores, Ubuntu 22.04  &lt;br /&gt;
* CN Node: Separate x86 server, also running Ubuntu 22.04  &lt;br /&gt;
* Interconnect: High-speed Ethernet via managed switch  &lt;br /&gt;
* RF Front-End: USRP X410 with dual SFP+ for IQ data  &lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
* Higher reliability and scalability  &lt;br /&gt;
* Easier to simulate real-world latency, routing, and interface constraints  &lt;br /&gt;
* Better performance profiling of CN and gNB independently  &lt;br /&gt;
&lt;br /&gt;
Considerations:&lt;br /&gt;
* Requires correct IP addressing, routing, and DNS setup  &lt;br /&gt;
* More complex to configure and monitor  &lt;br /&gt;
&lt;br /&gt;
[[File:srsgnb_srsue_oaiue_separate_50pc.jpg|center|thumb|800px|Multi-machine deployment with OAI Core Network and gNB on separate hosts. The setup uses a high-speed Ethernet switch and supports flexible UE integration over coaxial and OTA interfaces.]]&lt;br /&gt;
&lt;br /&gt;
== Cable and Connectivity Setup ==&lt;br /&gt;
&lt;br /&gt;
This section describes the physical connectivity between the USRP hardware and various types of UE.  &lt;br /&gt;
The cabling requirements are independent of whether the gNB and CN are deployed on the same machine or on separate systems.&lt;br /&gt;
&lt;br /&gt;
=== Quectel Wireless Module UE Cable Setup ===&lt;br /&gt;
&lt;br /&gt;
The diagram in Figure [[#fig_quectel_cable|below]] illustrates the cabling and RF signal routing between the UE system running a Quectel RM520N wireless module and the USRP X410 connected to the OAI gNB.  &lt;br /&gt;
This setup enables direct RF loopback in a controlled lab environment using coaxial connections.&lt;br /&gt;
&lt;br /&gt;
* USB Connection: The Quectel RM520N is connected to the UE system via a USB 3.0 interface. The host PC runs Windows and interacts with the module through Qualcomm QMI or MBIM drivers.  &lt;br /&gt;
* RF Antennas: The module has 4 RF ports (ANT 0–3), which are routed to a 4-way power splitter (ZN4PD1-63HP-S+) to combine the signals.  &lt;br /&gt;
* Attenuation: A fixed 40 dB attenuator is inserted after the splitter to protect the downstream USRP RF front end and ensure signal levels remain within a safe operating range.  &lt;br /&gt;
* Downstream RF Splitting: The combined RF signal is routed to a 2-way splitter (ZN2PD2-50-S+), which separates it into TX/RX and RX-only paths.  &lt;br /&gt;
* USRP Connection: These RF paths are connected to the USRP X410, which is linked to the OAI gNB system over dual SFP+ (10/25 G) links for baseband data transfer and synchronization.  &lt;br /&gt;
&lt;br /&gt;
[[File:Drawing0.png|center|900px|thumb|Cable and RF splitter/attenuator setup for Quectel Wireless Module UE with USRP X410 and OAI gNB.]]&lt;br /&gt;
&lt;br /&gt;
=== USRP-Based srsUE Cable Setup ===&lt;br /&gt;
&lt;br /&gt;
Figure [[#fig_usrp_cable|below]] illustrates the RF cabling setup used when both the srsRAN gNB and srsUE are implemented using separate USRP X410 and B210 devices.  &lt;br /&gt;
This setup enables full bidirectional communication in a lab environment without the need for over-the-air (OTA) transmission.&lt;br /&gt;
&lt;br /&gt;
* Dual SFP+ Connection: Each USRP is connected to its respective host PC via dual SFP+ ports (Port 0 and Port 1) and USB 3.0, providing high-throughput data and synchronization channels.  &lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.  &lt;br /&gt;
* 40 dB Attenuator: To ensure RF power levels are safe. Within operational range for the lab setup, a fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.  &lt;br /&gt;
* Bidirectional Lab Setup: This configuration mimics over-the-air conditions by enabling a fully enclosed cable-based signal path between the USRP radios representing the gNB and UE, ensuring interference-free testing.  &lt;br /&gt;
&lt;br /&gt;
=== USRP-Based OAI-UE Cable Setup ===&lt;br /&gt;
&lt;br /&gt;
A similar RF cabling setup applies when both the srsRAN gNB and OAI-UE are implemented using separate USRP B210 devices.  &lt;br /&gt;
This configuration also enables full bidirectional communication in a lab environment without OTA transmission.&lt;br /&gt;
&lt;br /&gt;
* USB 3.0 Connection: Each USRP B210 is connected to its respective host PC via USB 3.0, providing high-throughput data and synchronization channels.  &lt;br /&gt;
* SMA Cabling and RF Splitting: RF ports from the USRP gNB are connected via SMA cables to a 2:1 power splitter, enabling simultaneous TX/RX operation.  &lt;br /&gt;
* 40 dB Attenuator: A fixed 40 dB attenuator is inserted before the splitter connecting to the UE-side USRP.  &lt;br /&gt;
* Bidirectional Lab Setup: The cable-based signal path ensures controlled, interference-free bidirectional testing.  &lt;br /&gt;
&lt;br /&gt;
[[File:srsue_oaueonly.png|center|900px|thumb|Cable setup between srsRAN gNB and srsUE or OAI-UE using USRP X410, B210 devices and RF splitters.]]&lt;br /&gt;
&lt;br /&gt;
=== Commercial UE Setup: Google Pixel 9 Over-the-Air (OTA) ===&lt;br /&gt;
&lt;br /&gt;
Figure [[#fig_pixel9_ota|below]] illustrates the setup for using a commercial 5G smartphone (Google Pixel 9) as the UE in conjunction with the srsRAN NR gNB running on a USRP X410.&lt;br /&gt;
&lt;br /&gt;
* gNB Host System: The gNB stack (OAI NR Monolithic) runs on an Ubuntu 22.04 server equipped with an Intel Xeon w7-2495X processor (24 cores, 2.5 GHz) and interfaces with a USRP X410 via two SFP+ ports.  &lt;br /&gt;
* OTA Link: The RF connection between the USRP and the Pixel 9 is established over the air, eliminating the need for RF splitters or coaxial cabling.  &lt;br /&gt;
* SIM Card: The Pixel 9 uses a programmable Open Cell SIM card provisioned with the correct PLMN and network parameters to allow registration with the OAI Core Network.  &lt;br /&gt;
* Use Case: This setup is ideal for validating interoperability with COTS 5G devices and ensuring compatibility with commercially available UEs under real-world radio conditions.  &lt;br /&gt;
&lt;br /&gt;
[[File:srsran_pixel9__50pc.png|center|900px|thumb|OTA-based connectivity with Google Pixel 9 and Open Cell SIM.]]&lt;br /&gt;
&lt;br /&gt;
== Bill of Materials ==&lt;br /&gt;
&lt;br /&gt;
The full Bill of Materials (BoM) for the OAI Reference Architecture is provided below.  &lt;br /&gt;
This comprehensive list includes all necessary hardware components required to support a variety of deployment configurations for 5G and 6G research.  &lt;br /&gt;
&lt;br /&gt;
The design supports multiple flexible system architectures, where the gNB (base station) and UE can each be implemented using any combination of the following USRP Software Defined Radios: N300, N310, N320, N321, or X410.&lt;br /&gt;
&lt;br /&gt;
This BoM covers all shared components (host machines, network interfaces, RF cabling, timing/sync equipment, antennas, attenuators, and splitters) required for various testbed configurations.  &lt;br /&gt;
The system design is modular and scalable — users can co-locate or distribute gNB and Core Network (CN) components and switch between different UE types depending on the research focus (PHY-level tuning, link testing, or full-stack validation).&lt;br /&gt;
&lt;br /&gt;
=== Hardware Components ===&lt;br /&gt;
&lt;br /&gt;
* Three or Two Desktop Computers:  &lt;br /&gt;
   Intel Core i9 CPU (10th–12th Gen) @ ≥4.0 GHz, with ≥10 physical cores and NVMe disk drives.  &lt;br /&gt;
   (See the Hardware Requirements section for further details.)&lt;br /&gt;
&lt;br /&gt;
* Two 10 Gbps Ethernet Network Cards:  &lt;br /&gt;
   * Recommended: Intel 810-XXVDA2  &lt;br /&gt;
   * Recommended: NVIDIA/Mellanox ConnectX-6 Lx (MCX631102A-ACAT)&lt;br /&gt;
&lt;br /&gt;
* Two USRP Devices: &lt;br /&gt;
   The gNB and UE each require one USRP. Supported devices include N300, N310, N320, N321, and X410.  &lt;br /&gt;
   Mixed configurations are also supported (e.g., X410 for gNB and N310 for UE).&lt;br /&gt;
&lt;br /&gt;
   * USRP X410: High-performance, 4 TX/RX channels, suitable for advanced 5G/6G R&amp;amp;D.  &lt;br /&gt;
     [https://kb.ettus.com/X410 Documentation] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
   * USRP N320 / N321: Wideband 2 TX/RX MIMO SDR with high dynamic range and onboard GPSDO (N321 only).  &lt;br /&gt;
     [https://kb.ettus.com/N320/N321 Documentation] | [https://www.ettus.com/all-products/usrp-n320/ N320 Product] | [https://www.ettus.com/all-products/usrp-n321/ N321 Product]&lt;br /&gt;
&lt;br /&gt;
   * USRP N300 / N310: Compact 4-channel SDR supporting distributed systems.  &lt;br /&gt;
     [https://kb.ettus.com/N300/N310 Documentation] | [https://www.ettus.com/all-products/usrp-n300/ N300 Product] | [https://www.ettus.com/all-products/usrp-n310/ N310 Product]&lt;br /&gt;
&lt;br /&gt;
* One QSFP28-to-SFP28 Breakout Cable (required for X410):  &lt;br /&gt;
   * [https://store.mellanox.com/products/nvidia-mcp7f00-a003r26n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-26awg-ca-n.html NVIDIA MCP7F00-A003R26N] – 100 GbE to 4×25 GbE, 3 m, 26 AWG  &lt;br /&gt;
   * [https://store.mellanox.com/products/nvidia-mcp7f00-a003r30l-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-3m-colored-30awg-ca-l.html NVIDIA MCP7F00-A003R30L] – 100 GbE to 4×25 GbE, 3 m, 30 AWG&lt;br /&gt;
&lt;br /&gt;
* One OctoClock-G: &lt;br /&gt;
   Provides synchronization for gNB and UE USRPs.  &lt;br /&gt;
   Must be the “-G” model (with GPSDO).  &lt;br /&gt;
   * [https://kb.ettus.com/OctoClock_CDA-2990 Ettus KB – OctoClock CDA-2990]  &lt;br /&gt;
   * [https://www.ettus.com/all-products/octoclock-g/ Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four 10 Gbps Ethernet Cables with SFP+ terminations:&lt;br /&gt;
   Required for N3xx and N32x devices; not needed for X410.  &lt;br /&gt;
   * [https://www.ettus.com/all-products/10gige-dc/ DAC Cable Listing]  &lt;br /&gt;
   * [https://www.ettus.com/all-products/10gige-1m/ 1 m SFP+ DAC]  &lt;br /&gt;
   * [https://www.ettus.com/all-products/10gige-3m/ 3 m SFP+ DAC]&lt;br /&gt;
&lt;br /&gt;
* Four VERT900 and/or VERT2450 Antennas:&lt;br /&gt;
   * [https://www.ettus.com/all-products/vert900/ VERT900 (824–960 MHz)]  &lt;br /&gt;
   * [https://www.ettus.com/all-products/vert2450/ VERT2450 (2.4–2.5 GHz / 4.9–5.9 GHz)]&lt;br /&gt;
&lt;br /&gt;
* One Quectel RM500Q-GL 5G Wireless Modem Module: &lt;br /&gt;
   Used as a UE option in the reference architecture.  &lt;br /&gt;
   * [https://www.quectel.com/5g-iot-modules/ Quectel 5G Modules]  &lt;br /&gt;
   * [https://www.quectel.com/product/5g-rm520n-series/ RM520N Series]&lt;br /&gt;
&lt;br /&gt;
* One Google Pixel 9 5G Handset:  &lt;br /&gt;
   Used as a COTS UE; ensure it is unlocked.  &lt;br /&gt;
   * [https://www.gsmarena.com/ GSMArena Specs]  &lt;br /&gt;
   * [https://www.amazon.com/ Amazon Listing]&lt;br /&gt;
&lt;br /&gt;
* Two 5G SIM Cards + One USB UICC/SIM Reader-Writer: &lt;br /&gt;
   * [https://open-cells.com/index.php/sim-cards/ Open Cells – SIM Cards]&lt;br /&gt;
&lt;br /&gt;
* One Mini-Circuits 4-way DC-Pass SMA Splitter (ZN4PD1-63HP-S+): 250–6000 MHz / 50 Ω  &lt;br /&gt;
   * [https://www.minicircuits.com/WebStore/Splitters.html Splitters Catalog]  &lt;br /&gt;
   * [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN4PD1-63HP-S%2B Product Page]&lt;br /&gt;
&lt;br /&gt;
* Two Mini-Circuits 2-way DC-Pass SMA Splitters (ZN2PD2-50-S+): 500–5000 MHz / 50 Ω  &lt;br /&gt;
   * [https://www.minicircuits.com/WebStore/Splitters.html Splitters Catalog]  &lt;br /&gt;
   * [https://www.minicircuits.com/WebStore/dashboard.html?model=ZN2PD2-50-S%2B Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-10+ Attenuators (10 dB, DC–6000 MHz, 50 Ω):  &lt;br /&gt;
   * [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-10%2B Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-20+ Attenuators (20 dB, DC–6000 MHz, 50 Ω): &lt;br /&gt;
   * [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-20%2B Product Page]&lt;br /&gt;
&lt;br /&gt;
* Four Mini-Circuits VAT-30+ Attenuators (30 dB, DC–6000 MHz, 50 Ω):&lt;br /&gt;
   * [https://www.minicircuits.com/WebStore/dashboard.html?model=VAT-30%2B Product Page]&lt;br /&gt;
&lt;br /&gt;
* Fourteen Mini-Circuits Hand-Flex SMA Coax Cables (086-36SM+, 36&amp;quot;, 18 GHz):  &lt;br /&gt;
   * [https://www.minicircuits.com/WebStore/dashboard.html?model=086-36SM%2B Product Page]  &lt;br /&gt;
   * [https://www.minicircuits.com/pdfs/086-36SM+.pdf Datasheet PDF]&lt;br /&gt;
&lt;br /&gt;
* One NETGEAR GS108 8-Port Gigabit Ethernet Switch: &lt;br /&gt;
   * [https://www.netgear.com/business/wired/switches/unmanaged/gs108/ Product Page]  &lt;br /&gt;
   * [https://www.amazon.com/NETGEAR-Ethernet-Unmanaged-Lifetime-Protection/dp/B00MPVR50A/ Amazon Listing]&lt;br /&gt;
&lt;br /&gt;
* Three USB 3.0-to-1 Gbps Ethernet Adapters: &lt;br /&gt;
   * [https://www.amazon.com/Network-Adapter-CableCreation-Ethernet-Supporting/dp/B013G4C8RE/ USB-A Adapter]  &lt;br /&gt;
   * [https://www.amazon.com/Ethernet-Thunderbolt-Gigabit-Network-Compatible/dp/B07XTGKP5M/ USB-C Adapter]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== Host Computers ===&lt;br /&gt;
Three or two host computers are needed — one for the gNB, one for the UE, and one for the CN — with the specifications discussed in this section. The requirements for the host running the CN are not as high as for the gNB and UE, but it is recommended that all three hosts meet the requirements described here. It is also strongly recommended that each of the gNB, UE, and CN be implemented on their own dedicated system. A single host computer should only run the gNB, or the UE, or the CN.&lt;br /&gt;
&lt;br /&gt;
=== CPU ===&lt;br /&gt;
* We recommend using an Intel Core i9 or Intel Xeon CPU from the 10&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt;, 11&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt;, or 12&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; Generation, with:&lt;br /&gt;
** Minimum clock speed of 4.0&amp;amp;nbsp;GHz&lt;br /&gt;
** Minimum 10 physical cores&lt;br /&gt;
** At least 40 PCIe lanes (or enough to support GPU and 10&amp;amp;nbsp;Gbps Ethernet)&lt;br /&gt;
** PCIe Gen 4 support (preferred)&lt;br /&gt;
* Recommended examples include:&lt;br /&gt;
** [https://www.intel.com/content/www/us/en/products/sku/198014/intel-core-i910940x-xseries-processor-19-25m-cache-3-30-ghz/specifications.html Intel Core i9-10940X]: 14 physical cores, up to 4.60&amp;amp;nbsp;GHz, 10&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; Gen&lt;br /&gt;
** [https://ark.intel.com/content/www/us/en/ark/products/134599/intel-core-i912900k-processor-30m-cache-up-to-5-20-ghz.html Intel Core i9-12900K]: 16 physical cores, up to 5.20&amp;amp;nbsp;GHz, 12&amp;lt;sup&amp;gt;th&amp;lt;/sup&amp;gt; Gen&lt;br /&gt;
** Intel Xeon Platinum 8351N&lt;br /&gt;
&lt;br /&gt;
=== Disk ===&lt;br /&gt;
* We strongly recommend using only NVMe SSDs, ideally with a PCIe Gen-4 interface for maximum throughput.&lt;br /&gt;
* Do not use SATA disks — they are not sufficient for the data rates required in this application.&lt;br /&gt;
* Recommended model:&lt;br /&gt;
** [https://www.samsung.com/us/computing/memory-storage/solid-state-drives/980-pro-pcie-4-0-nvme-ssd-1tb-mz-v8p1t0b-am/ Samsung 980 PRO PCIe 4.0 NVMe SSD]&lt;br /&gt;
** [https://www.amazon.com/SAMSUNG-PCIe-Internal-Gaming-MZ-V8P1T0B/dp/B08GLX7TNT/ Samsung 980 PRO on Amazon]&lt;br /&gt;
** [https://www.tomshardware.com/reviews/samsung-980-pro-m-2-nvme-ssd-review Tom’s Hardware Review of Samsung 980 PRO]&lt;br /&gt;
* RAID configurations with multiple NVMe drives are generally not required, but can be explored to further enhance throughput.&lt;br /&gt;
&lt;br /&gt;
=== Memory ===&lt;br /&gt;
The system should have either dual-channel or quad-channel DDR4 or DDR5 (preferred) memory, with the highest clock speed available. A minimum of 16&amp;amp;nbsp;GB or 32&amp;amp;nbsp;GB should be sufficient. Larger amounts of memory are typically unnecessary, as no virtualization, RAM disk, or other large in-memory buffering is being used.&lt;br /&gt;
&lt;br /&gt;
=== GPU ===&lt;br /&gt;
The GPU does not matter for the purposes of running UHD and OAI. If you plan to perform AI/ML processing on the GPU, select an appropriate accelerator. The OAI 5G stack does not currently leverage the GPU.&lt;br /&gt;
&lt;br /&gt;
=== 10 Gbps Ethernet Network Card ===&lt;br /&gt;
* Both the gNB and UE systems require a two-port 10&amp;amp;nbsp;Gbps Ethernet network card for connecting to the USRP radios.&lt;br /&gt;
* The Core Network (CN) system does not interface with USRPs directly and therefore does not require a 10G NIC.&lt;br /&gt;
* Ensure the computer chassis has adequate space and airflow to accommodate the network card.&lt;br /&gt;
* Recommended options:&lt;br /&gt;
** Intel E810-XXVDA2 (25GbE capable, backward compatible with 10GbE) — Works well with Ubuntu 20.04+ and supports DPDK. Ideal for advanced research requiring high throughput.&lt;br /&gt;
*** [https://www.intel.com/content/www/us/en/products/sku/189042/intel-ethernet-network-adapter-e810xxvda2/specifications.html Product Page (Intel)]&lt;br /&gt;
*** [https://www.amazon.com/Intel-E810XXVDA2-Ethernet-Network-Adapter/dp/B097M26PXZ/ Amazon]&lt;br /&gt;
** '''NVIDIA ConnectX-6 Lx (MCX631102A-ACAT)''' — Dual-port SFP28, PCIe Gen4, excellent compatibility with Linux and DPDK.&lt;br /&gt;
*** [https://www.nvidia.com/en-us/networking/products/ethernet-adapters/connectx-6-lx/ Product Page (NVIDIA)]&lt;br /&gt;
*** [https://www.amazon.com/NVIDIA-MCX631102A-ACAT-ConnectX-6-Dual-Port/dp/B09H3FWDVM/ Amazon]&lt;br /&gt;
&lt;br /&gt;
=== QSFP28-to-SFP28 Breakout Cable for USRP X410 ===&lt;br /&gt;
The USRP X410 features a QSFP28 port (100&amp;amp;nbsp;Gbps Ethernet). To interface with a host computer equipped with 10&amp;amp;nbsp;Gbps Ethernet, a QSFP28-to-SFP28 breakout cable is required. This is essential for X410 deployments, but is not necessary for USRP N300, N310, N320, or N321 devices.&lt;br /&gt;
&lt;br /&gt;
Recommended Breakout Cables:&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R26N/nvidiamcp7f00-a003r26ndacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R26N] – 100&amp;amp;nbsp;GbE to 4×25&amp;amp;nbsp;GbE, 3&amp;amp;nbsp;m, 26&amp;amp;nbsp;AWG&lt;br /&gt;
* [https://store.nvidia.com/en-us/networking/store/product/MCP7F00-A003R30L/nvidiamcp7f00-a003r30ldacsplittercableethernet100gbeto4x25gbe3m/ NVIDIA MCP7F00-A003R30L] – 100&amp;amp;nbsp;GbE to 4×25&amp;amp;nbsp;GbE, 3&amp;amp;nbsp;m, 30&amp;amp;nbsp;AWG&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp7f00-a001r30n-passive-copper-splitter-cable-ethernet-100gbe-to-4x25gbe-qsfp28-to-4xsfp28-1m-colored-30awg-ca-n.html NVIDIA MCP7F00-A001R30N] – 100&amp;amp;nbsp;GbE to 4×25&amp;amp;nbsp;GbE, 1&amp;amp;nbsp;m, 30&amp;amp;nbsp;AWG&lt;br /&gt;
&lt;br /&gt;
Alternative: Direct 100&amp;amp;nbsp;Gbps Connection to Host&lt;br /&gt;
Direct connectivity to the 100&amp;amp;nbsp;Gbps QSFP28 port is possible using a compatible 100&amp;amp;nbsp;GbE NIC. Recommended options:&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-ccat-connectx-5-en-adapter-card-100gbe-dual-port-qsfp28-pcie3-0-x16-tall-bracket-rohs-r6.html NVIDIA Mellanox MCX516A-CCAT] – ConnectX-5 EN, PCIe Gen3&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcx516a-cdat-connectx-5-ex-en-adapter-card-100gbe-dual-port-qsfp28-pcie4-0-x16-tall-bracket-rohs-r6.html NVIDIA Mellanox MCX516A-CDAT] – ConnectX-5 Ex, PCIe Gen4&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e26n-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-26awg-ca-n.html NVIDIA MCP1600-C003E26N] – 100&amp;amp;nbsp;GbE QSFP28, 3&amp;amp;nbsp;m, 26&amp;amp;nbsp;AWG&lt;br /&gt;
* [https://store.mellanox.com/products/nvidia-mcp1600-c003e30l-passive-copper-cable-ethernet-100gbe-qsfp28-3m-black-30awg-ca-l.html NVIDIA MCP1600-C003E30L] – 100&amp;amp;nbsp;GbE QSFP28, 3&amp;amp;nbsp;m, 30&amp;amp;nbsp;AWG&lt;br /&gt;
&lt;br /&gt;
Intel Alternative:&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/series/184846/100gbe-intel-ethernet-network-adapter-e810.html Intel E810 Series (QSFP28 and SFP28 cards)]&lt;br /&gt;
&lt;br /&gt;
Note: This reference architecture release does not yet require full 100&amp;amp;nbsp;Gbps Ethernet. The dual 10&amp;amp;nbsp;Gbps configuration is sufficient unless testing FR2 200/400&amp;amp;nbsp;MHz bandwidth or 2×2 MIMO.&lt;br /&gt;
&lt;br /&gt;
Example Host Systems:&lt;br /&gt;
* [https://system76.com/desktops/thelio-mira-b2/configure System76 Thelio Mira]&lt;br /&gt;
* [https://www.dell.com/en-us/work/shop/desktops-all-in-one-pcs/precision-5820-tower-workstation/spd/precision-5820-workstation Dell Precision 5820]&lt;br /&gt;
&lt;br /&gt;
=== USRP Devices ===&lt;br /&gt;
Two USRP devices are required: one for the gNB and one for the UE. The devices can be any combination of the following:&lt;br /&gt;
* USRP N300 — [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n300/ Product Page]&lt;br /&gt;
* USRP N310 — [https://kb.ettus.com/N300/N310 KB Page] | [https://www.ettus.com/all-products/usrp-n310/ Product Page]&lt;br /&gt;
* USRP N320 — [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n320/ Product Page]&lt;br /&gt;
* USRP N321 — [https://kb.ettus.com/N320/N321 KB Page] | [https://www.ettus.com/all-products/usrp-n321/ Product Page]&lt;br /&gt;
* USRP X410 — [https://kb.ettus.com/X410 KB Page] | [https://www.ettus.com/all-products/usrp-x410/ Product Page]&lt;br /&gt;
&lt;br /&gt;
These devices are fully interchangeable across the gNB and UE systems. For instance, the gNB may use a USRP X410, while the UE may use a USRP N310.&lt;br /&gt;
&lt;br /&gt;
Supported Bandwidths:&lt;br /&gt;
* FR1 (Sub-6&amp;amp;nbsp;GHz): All listed USRP models support up to 100&amp;amp;nbsp;MHz channel bandwidths.&lt;br /&gt;
* FR2 (mmWave):&lt;br /&gt;
** USRP N320: Supports 50, 100, 200&amp;amp;nbsp;MHz&lt;br /&gt;
** USRP X410: Supports 50, 100, 200, 400&amp;amp;nbsp;MHz&lt;br /&gt;
&lt;br /&gt;
=== OctoClock-G ===&lt;br /&gt;
One OctoClock-G device is required to synchronize the gNB USRP and the UE USRP.&lt;br /&gt;
* Ensure the device is the “-G” model, which includes an internal GPSDO (GPS Disciplined Oscillator) module.&lt;br /&gt;
* This synchronization device is only necessary when the UE is implemented using a USRP radio.&lt;br /&gt;
&lt;br /&gt;
More Information:&lt;br /&gt;
* [https://www.ettus.com/all-products/octoclock-g/ Product Page on Ettus]&lt;br /&gt;
* [https://kb.ettus.com/OctoClock_CDA-2990 OctoClock-G Knowledge Base]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the UHD Software ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code.  &lt;br /&gt;
At the time of this writing, we recommend using UHD version 4.8.&lt;br /&gt;
&lt;br /&gt;
* UHD is the open-source driver for all USRP radios and is required on both the gNB and UE systems. It is not required on the CN system.  &lt;br /&gt;
* We strongly recommend building UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates.&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all the required dependencies (for Ubuntu 22.04):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y \&lt;br /&gt;
    cmake g++ libboost-all-dev libusb-1.0-0-dev \&lt;br /&gt;
    libuhd-dev python3 python3-mako python3-numpy \&lt;br /&gt;
    python3-requests python3-ruamel.yaml libfftw3-dev \&lt;br /&gt;
    libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake \&lt;br /&gt;
    qtbase5-dev-tools doxygen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, clone the UHD repository and check out the v4.8.0.0 tag:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
cd uhd&lt;br /&gt;
git checkout v4.8.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build and install UHD:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify the installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_usrp_probe&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details, see the official UHD GitHub page:  &lt;br /&gt;
[https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]&lt;br /&gt;
&lt;br /&gt;
[[File:uhd_usrp_probe_output.png|400px|thumb|center|Example output of `uhd_usrp_probe` for USRP B210]]  &lt;br /&gt;
[[File:uhd_find_devices_output.png|400px|thumb|center|Example output of `uhd_find_devices` for N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the USRP Radio ==&lt;br /&gt;
&lt;br /&gt;
The USRP N300, N310, N320, N321, and X410 can all be used as either the gNB or the UE in this reference design.&lt;br /&gt;
&lt;br /&gt;
=== USRP N300 and N310 ===&lt;br /&gt;
* For setup and configuration, refer to the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310/N320/N321 Getting Started Guide].&lt;br /&gt;
* These devices support all the channel bandwidths in FR1.&lt;br /&gt;
&lt;br /&gt;
=== USRP N320 and N321 ===&lt;br /&gt;
* Setup is also covered in the [https://kb.ettus.com/USRP_N300/N310/N320/N321_Getting_Started_Guide USRP N300/N310/N320/N321 Getting Started Guide].&lt;br /&gt;
* These devices support all the channel bandwidths in FR1, and all except 400&amp;amp;nbsp;MHz in FR2.&lt;br /&gt;
&lt;br /&gt;
=== USRP X410 ===&lt;br /&gt;
* Refer to the [https://kb.ettus.com/USRP_X410/X440_Getting_Started_Guide USRP X410 Getting Started Guide] for detailed setup instructions.&lt;br /&gt;
* The X410 supports all channel bandwidths in both FR1 and FR2.&lt;br /&gt;
&lt;br /&gt;
== Configuring the Ubuntu Linux Operating System ==&lt;br /&gt;
For optimal system performance, refer to the article [https://kb.ettus.com/USRP_Host_Performance_Tuning_Tips_and_Tricks ''USRP Host Performance Tuning Tips and Tricks''], which outlines specific settings and configuration procedures. These include:&lt;br /&gt;
* Setting the CPU governors&lt;br /&gt;
* Enabling thread priority scheduling&lt;br /&gt;
* Configuring socket buffer sizes&lt;br /&gt;
* Adjusting Ethernet MTU values&lt;br /&gt;
* Configuring network card ring buffer sizes&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The use of the '''Data Plane Development Kit (DPDK)''' ([https://www.dpdk.org/ DPDK]) is not required for running any of the '''FR1''' channel bandwidths. As of this writing, '''DPDK is not used''' in this reference architecture.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Installing, Configuring, and Running the CN System ==&lt;br /&gt;
[[File:OAI_Core_Network.jpg|950px|center|thumb|OAI Core Network Deployment Architecture]]&lt;br /&gt;
&lt;br /&gt;
The figure above illustrates the deployment architecture of the OpenAirInterface (OAI) 5G Core Network. The core network is implemented using several containerized Network Functions (NFs), each mapped to a specific IP address within the subnet &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt;. The following components are shown:&lt;br /&gt;
&lt;br /&gt;
* '''OAI-NRF (Network Repository Function)''' at &amp;lt;code&amp;gt;192.168.70.130&amp;lt;/code&amp;gt; handles service registration and discovery.&lt;br /&gt;
* '''OAI-AMF (Access and Mobility Function)''' at &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt; manages UE registration, connection, and mobility.&lt;br /&gt;
* '''OAI-SMF (Session Management Function)''' at &amp;lt;code&amp;gt;192.168.70.133&amp;lt;/code&amp;gt; manages sessions and IP address allocation.&lt;br /&gt;
* '''OAI-UPF (User Plane Function)''' at &amp;lt;code&amp;gt;192.168.70.134&amp;lt;/code&amp;gt; routes user data traffic and connects to the external data network via N3 interface.&lt;br /&gt;
* '''OAI-EXT-DN (External Data Network)''' at &amp;lt;code&amp;gt;192.168.70.135&amp;lt;/code&amp;gt; provides Internet or service access for UEs.&lt;br /&gt;
* '''OAI-AUSF (Authentication Server Function)''' at &amp;lt;code&amp;gt;192.168.70.138&amp;lt;/code&amp;gt; handles UE authentication.&lt;br /&gt;
* '''OAI-UDM (Unified Data Management)''' at &amp;lt;code&amp;gt;192.168.70.137&amp;lt;/code&amp;gt; and '''OAI-UDR (Unified Data Repository)''' at &amp;lt;code&amp;gt;192.168.70.136&amp;lt;/code&amp;gt; manage subscription and policy data.&lt;br /&gt;
* A '''MySQL Server''' is connected to &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt; for database services required by AMF and UDM.&lt;br /&gt;
&lt;br /&gt;
This architecture demonstrates a standard service-based interface (SBI) deployment with N3 and N4 interfaces clearly marked between UPF and SMF. Each component is deployed in a containerized environment, typically using Docker Compose.&lt;br /&gt;
&lt;br /&gt;
=== Core Network (CN) Deployment Scenarios ===&lt;br /&gt;
The OAI CN5G can be deployed in two different configurations depending on the system requirements and testbed constraints. Both setups follow the same installation process, differing only in whether the CN is hosted on a separate machine or collocated with the gNB.&lt;br /&gt;
&lt;br /&gt;
==== Scenario 1: CN and gNB on the Same Machine ====&lt;br /&gt;
This configuration runs both the Core Network and the gNB stack on a single physical machine. It is suitable for development, testing, and lab-scale demonstrations.&lt;br /&gt;
&lt;br /&gt;
; Installation Commands&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install -y git net-tools putty&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install -y ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \&lt;br /&gt;
https://download.docker.com/linux/ubuntu $(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;${UBUNTU_CODENAME:-$VERSION_CODENAME}&amp;quot;) stable&amp;quot; \&lt;br /&gt;
| sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install -y docker-ce docker-ce-cli containerd.io \&lt;br /&gt;
  docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
sudo usermod -a -G docker $(whoami)&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
wget -O ~/oai-cn5g.zip &amp;quot;https://gitlab.eurecom.fr/oai/openairinterface5g/-/archive/develop/openairinterface5g-develop.zip?path=doc/tutorial_resources/oai-cn5g&amp;quot;&lt;br /&gt;
unzip ~/oai-cn5g.zip&lt;br /&gt;
mv ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g/doc/tutorial_resources/oai-cn5g ~/oai-cn5g&lt;br /&gt;
rm -r ~/openairinterface5g-develop-doc-tutorial_resources-oai-cn5g ~/oai-cn5g.zip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/oai-cn5g&lt;br /&gt;
docker compose pull&lt;br /&gt;
docker compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/oai-cn5g&lt;br /&gt;
docker compose down&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Scenario 2: CN and gNB on Separate Machines ====&lt;br /&gt;
In this setup, the Core Network is deployed on a dedicated host while the gNB runs on a separate system. This architecture is closer to real-world 5G deployments and helps isolate network functions for performance analysis.&lt;br /&gt;
&lt;br /&gt;
; Hardware Requirements&lt;br /&gt;
* Ubuntu 22.04 LTS&lt;br /&gt;
* CPU: 8 cores, x86_64 @ 3.5 GHz&lt;br /&gt;
* RAM: 32 GB&lt;br /&gt;
&lt;br /&gt;
; Additional Requirement&lt;br /&gt;
* A second physical machine with the hardware requirements&lt;br /&gt;
* Proper IP routing between CN and gNB machines&lt;br /&gt;
&lt;br /&gt;
; Installation Instructions&lt;br /&gt;
The same installation steps listed above should be executed on the second machine allocated for CN. Ensure that Docker and all dependencies are installed, and the &amp;lt;code&amp;gt;docker compose up -d&amp;lt;/code&amp;gt; command is executed on the CN machine.&lt;br /&gt;
&lt;br /&gt;
=== Core Network Database Configuration ===&lt;br /&gt;
To configure the OAI CN5G with a valid UE profile, manually insert subscriber information into the MySQL database by editing &amp;lt;code&amp;gt;oai_db.sql&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
; Navigate to DB scripts&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/oai-cn5g/database&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Insert subscriber entry (AuthenticationSubscription)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
INSERT INTO `AuthenticationSubscription` &lt;br /&gt;
(`ueid`, `authenticationMethod`, `encPermanentKey`, `protectionParameterId`, &lt;br /&gt;
 `sequenceNumber`, `authenticationManagementField`, `algorithmId`, `encOpcKey`, &lt;br /&gt;
 `encTopcKey`, `vectorGenerationInHss`, `n5gcAuthMethod`, `rgAuthenticationInd`, `supi`) &lt;br /&gt;
VALUES&lt;br /&gt;
('208950000000032', '5G_AKA', &lt;br /&gt;
 'fec86ba6eb707ed08905757b1bb44b8f', &lt;br /&gt;
 'fec86ba6eb707ed08905757b1bb44b8f', &lt;br /&gt;
 '{\&amp;quot;sqn\&amp;quot;: \&amp;quot;000000000000\&amp;quot;, \&amp;quot;sqnScheme\&amp;quot;: \&amp;quot;NON_TIME_BASED\&amp;quot;, \&amp;quot;lastIndexes\&amp;quot;: {\&amp;quot;ausf\&amp;quot;: 0}}', &lt;br /&gt;
 '8000', &lt;br /&gt;
 'milenage', &lt;br /&gt;
 'C42449363BBAD02B66D16BC975D77CC1', &lt;br /&gt;
 NULL, NULL, NULL, NULL, &lt;br /&gt;
 '001010000000001');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Important Notes&lt;br /&gt;
* '''IMSI (International Mobile Subscriber Identity):''' The &amp;lt;code&amp;gt;ueid&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;supi&amp;lt;/code&amp;gt; must match the IMSI used by your UE. Example IMSI: &amp;lt;code&amp;gt;208950000000032&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''KEY:''' Permanent key shared between the UE and the core network. Example: &amp;lt;code&amp;gt;fec86ba6eb707ed08905757b1bb44b8f&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''OPC:''' Operator Code for milenage: &amp;lt;code&amp;gt;C42449363BBAD02B66D16BC975D77CC1&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Authentication Method:''' Use &amp;lt;code&amp;gt;5G_AKA&amp;lt;/code&amp;gt; for standard 5G UE authentication.&lt;br /&gt;
&lt;br /&gt;
=== Update PLMN Configuration in &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt; ===&lt;br /&gt;
To ensure proper PLMN configuration for the UE registration, update the &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt; file to reflect the correct MCC, MNC, and SST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/oai-cn5g/config&lt;br /&gt;
nano config.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
plmn:&lt;br /&gt;
  mcc: &amp;quot;208&amp;quot;&lt;br /&gt;
  mnc: &amp;quot;95&amp;quot;&lt;br /&gt;
  tac: 1&lt;br /&gt;
  nssai:&lt;br /&gt;
    - sst: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;mcc&amp;lt;/code&amp;gt;: Set to &amp;lt;code&amp;gt;208&amp;lt;/code&amp;gt; (France)&lt;br /&gt;
* &amp;lt;code&amp;gt;mnc&amp;lt;/code&amp;gt;: Set to &amp;lt;code&amp;gt;95&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sst&amp;lt;/code&amp;gt;: Set to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (default data slice)&lt;br /&gt;
&lt;br /&gt;
Restart the CN stack:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/oai-cn5g&lt;br /&gt;
docker compose down&lt;br /&gt;
docker compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install Wireshark on Ubuntu ===&lt;br /&gt;
Wireshark is a widely used packet analyzer for monitoring network traffic.&lt;br /&gt;
&lt;br /&gt;
* Update packages&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade -y&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install Wireshark&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install -y wireshark&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Allow non-root capture (choose '''Yes''' when prompted)&lt;br /&gt;
If not prompted:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo dpkg-reconfigure wireshark-common&lt;br /&gt;
sudo usermod -aG wireshark $(whoami)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Launch Wireshark&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo wireshark&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launch, select the desired interface (e.g., &amp;lt;code&amp;gt;eth0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lo&amp;lt;/code&amp;gt;, &amp;lt;i&amp;gt;oai-cn&amp;lt;/i&amp;gt;) to start capturing packets.&lt;br /&gt;
&lt;br /&gt;
=== Successful Launch of OAI CN5G Containers ===&lt;br /&gt;
Run:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker-compose up -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see output similar to the following, confirming container startup:&lt;br /&gt;
[[File:Start_up_OAI_CN.png|750px|center|thumb|Successful startup of OAI CN5G containers using Docker Compose]]&lt;br /&gt;
&lt;br /&gt;
Each core network function such as &amp;lt;code&amp;gt;oai-amf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-smf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-upf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-nrf&amp;lt;/code&amp;gt;, and supporting services like &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-udm&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-ausf&amp;lt;/code&amp;gt;, etc., is instantiated as a Docker container. The message &amp;quot;&amp;lt;code&amp;gt;... done&amp;lt;/code&amp;gt;&amp;quot; indicates successful creation and start.&lt;br /&gt;
&lt;br /&gt;
=== Verification of Running CN5G Containers ===&lt;br /&gt;
Check container health:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker ps -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected view:&lt;br /&gt;
[[File:OAI_CN_Docker_Containers.png|750px|center|thumb|Docker containers for OAI CN5G core components running successfully]]&lt;br /&gt;
&lt;br /&gt;
This confirms healthy status for &amp;lt;code&amp;gt;oai-amf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-smf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-upf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-nrf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-ausf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-udm&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oai-udr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ims&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;oai-ext-dn&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Wireshark Monitoring of OAI CN5G ===&lt;br /&gt;
; Selecting the Interface&lt;br /&gt;
Choose the internal Docker network (e.g., &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt;) to monitor inter-container traffic.&lt;br /&gt;
[[File:Wireshark_OAI.png|850px|center|thumb|Selecting the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface in Wireshark to monitor 5G core container traffic]]&lt;br /&gt;
&lt;br /&gt;
; Capturing Inter-Container Traffic&lt;br /&gt;
Live capture shows HTTP/2, TCP, and PFCP traffic among AMF, SMF, NRF, AUSF, etc.&lt;br /&gt;
[[File:Wireshark_Capture.png|1000px|center|thumb|Live capture view showing HTTP/2, TCP, and PFCP traffic between CN5G Docker containers]]&lt;br /&gt;
&lt;br /&gt;
== Build Instructions for &amp;lt;code&amp;gt;srsRAN&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
Follow the steps below to clone and build the &amp;lt;code&amp;gt;srsRAN_Project&amp;lt;/code&amp;gt; from source.&lt;br /&gt;
&lt;br /&gt;
=== Clone the Repository ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/srsRAN/srsRAN_Project.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build the Codebase ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cd srsRAN_Project&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../&lt;br /&gt;
make -j $(nproc)&lt;br /&gt;
sudo make test&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Run the gNB ===&lt;br /&gt;
After a successful build, you can run the gNB from:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
/srsRAN_Project/build/apps/gnb/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Network Configuration for Separate CN Deployment ==&lt;br /&gt;
&lt;br /&gt;
When the Core Network (CN) is deployed on a separate machine from the gNB, the following network configurations are required to ensure connectivity between the gNB and CN:&lt;br /&gt;
&lt;br /&gt;
=== Add Static Route on gNB Machine ===&lt;br /&gt;
A static route must be added to the gNB machine so it can reach the CN container subnet.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip route add 192.168.70.128/26 via 10.89.14.119 dev eno1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;192.168.70.128/26&amp;lt;/code&amp;gt; is the subnet used by the CN Docker bridge network.&lt;br /&gt;
* &amp;lt;code&amp;gt;10.89.14.119&amp;lt;/code&amp;gt; is the IP address of the CN host machine.&lt;br /&gt;
* &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt; is the interface on the gNB machine connected to the CN machine. Replace with your actual interface name (e.g., &amp;lt;code&amp;gt;enp1s0&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This route is not persistent and will be lost after a reboot.&lt;br /&gt;
&lt;br /&gt;
=== Enable IP Forwarding and Adjust iptables on CN Machine ===&lt;br /&gt;
To allow the CN machine to forward packets between the gNB and the containerized core network functions, configure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo sysctl net.ipv4.conf.all.forwarding=1&lt;br /&gt;
sudo iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;net.ipv4.conf.all.forwarding=1&amp;lt;/code&amp;gt; enables IPv4 forwarding in the Linux kernel.&lt;br /&gt;
* &amp;lt;code&amp;gt;iptables -P FORWARD ACCEPT&amp;lt;/code&amp;gt; allows forwarded packets through the default filter chain.&lt;br /&gt;
&lt;br /&gt;
These settings are temporary and will reset after reboot unless added to permanent configs such as:&lt;br /&gt;
* &amp;lt;code&amp;gt;/etc/sysctl.conf&amp;lt;/code&amp;gt; (for forwarding)&lt;br /&gt;
* &amp;lt;code&amp;gt;iptables-persistent&amp;lt;/code&amp;gt; or a systemd service (for iptables rules)&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This configuration is not needed if the CN is deployed on the same machine as the gNB.&lt;br /&gt;
&lt;br /&gt;
== Invoking the gNB ==&lt;br /&gt;
&lt;br /&gt;
After configuring the gNB, invoke it using the following procedure.&lt;br /&gt;
&lt;br /&gt;
=== Copy the Configuration File ===&lt;br /&gt;
First, copy the edited gNB configuration file to the build directory:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cp /srsRAN_Project/configs/gnb_rf_b200_fdd_srsUE.yml /srsRAN_Project/build/apps/gnb/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== gNB Configuration File for srsRAN ===&lt;br /&gt;
Below is an excerpt of the customized &amp;lt;code&amp;gt;gnb.yaml&amp;lt;/code&amp;gt; used to configure the srsRAN gNB for interoperability with the OAI Core Network. Key parameters: AMF address, bind address, PLMN, TAC, and network slice information.&lt;br /&gt;
&lt;br /&gt;
; Modified Fields&lt;br /&gt;
* &amp;lt;code&amp;gt;amf.addr:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;192.168.70.132&amp;lt;/code&amp;gt; – IP address of the OAI AMF.&lt;br /&gt;
* &amp;lt;code&amp;gt;bind_addr:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;10.88.136.29&amp;lt;/code&amp;gt; – IP address of the host running the gNB software.&lt;br /&gt;
* &amp;lt;code&amp;gt;tac:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; – Tracking Area Code; must match the OAI CN.&lt;br /&gt;
* &amp;lt;code&amp;gt;plmn:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;20895&amp;lt;/code&amp;gt; – PLMN (MCC = 208, MNC = 95), consistent across CN and RAN.&lt;br /&gt;
* &amp;lt;code&amp;gt;sst:&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; – Slice/Service Type for the configured PLMN.&lt;br /&gt;
&lt;br /&gt;
; YAML Snippet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
cu_cp:&lt;br /&gt;
  amf:&lt;br /&gt;
    addr: 192.168.70.132&lt;br /&gt;
    port: 38412&lt;br /&gt;
    bind_addr: 10.88.136.29&lt;br /&gt;
    supported_tracking_areas:&lt;br /&gt;
      - tac: 1&lt;br /&gt;
        plmn_list:&lt;br /&gt;
          - plmn: &amp;quot;20895&amp;quot;&lt;br /&gt;
            tai_slice_support_list:&lt;br /&gt;
              - sst: 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure these parameters are consistent with your &amp;lt;code&amp;gt;config.yaml&amp;lt;/code&amp;gt; in the OAI Core Network (PLMN, TAC, SST) to ensure successful NGAP registration and PDU session establishment.&lt;br /&gt;
&lt;br /&gt;
=== Launch the gNB ===&lt;br /&gt;
After configuring &amp;lt;code&amp;gt;gnb_rf_b210_fdd_srsUE.yml&amp;lt;/code&amp;gt;, launch the gNB:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/srsRAN_Project/build/apps/gnb&lt;br /&gt;
sudo ./gnb -c gnb_rf_b210_fdd_srsUE.yml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This initializes the gNB using the specified YAML configuration file. Ensure the file includes correct values for &amp;lt;code&amp;gt;amf.addr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bind_addr&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;plmn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tac&amp;lt;/code&amp;gt;, and RF parameters suitable for your USRP B210 and deployment scenario.&lt;br /&gt;
&lt;br /&gt;
== Verifying with Wireshark ==&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_OAI_NGAP.png|750px|center|thumb|Wireshark capture showing successful NGSetupRequest and NGSetupResponse between gNB and AMF.]]&lt;br /&gt;
&lt;br /&gt;
Wireshark can verify NGAP signaling between the gNB and the Core Network (CN). The interface to monitor depends on your deployment setup:&lt;br /&gt;
&lt;br /&gt;
* '''Scenario A: CN and gNB on Separate Machines'''&lt;br /&gt;
** On the '''CN machine''', start Wireshark and select the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; network interface.&lt;br /&gt;
** On the '''gNB machine''', start Wireshark and select the Ethernet interface (e.g., &amp;lt;code&amp;gt;eno1&amp;lt;/code&amp;gt;) connected to the CN machine.&lt;br /&gt;
** Start capturing on both to monitor NGAP and related 5G signaling traffic.&lt;br /&gt;
&lt;br /&gt;
* '''Scenario B: CN and gNB on Same Machine'''&lt;br /&gt;
** Start Wireshark and select only the &amp;lt;code&amp;gt;oai-cn5g&amp;lt;/code&amp;gt; interface.&lt;br /&gt;
** All internal signaling between gNB and CN containers will be visible on this interface.&lt;br /&gt;
&lt;br /&gt;
'''Expected Behavior:'''&lt;br /&gt;
* After the gNB launches, it should initiate an &amp;lt;code&amp;gt;NGAP Setup Request&amp;lt;/code&amp;gt; to the AMF.&lt;br /&gt;
* The AMF should respond with an &amp;lt;code&amp;gt;NGAP Setup Response&amp;lt;/code&amp;gt; if MCC, MNC, and TAC match.&lt;br /&gt;
&lt;br /&gt;
'''Troubleshooting Tips:'''&lt;br /&gt;
* Ensure MCC, MNC, and SST are consistent in the gNB config and CN YAML.&lt;br /&gt;
* Verify the TAC (Tracking Area Code) matches on both sides.&lt;br /&gt;
* Check that the static route (if used) is set correctly and that Ethernet connectivity between gNB and CN is functional.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing, Configuring, and Running the srs UE System ==&lt;br /&gt;
&lt;br /&gt;
'''srsUE''' is a software-defined UE implementation using SDR (e.g., USRP B210).  &lt;br /&gt;
''Limitations'': The current 5G SA srsUE application has several constraints that impact gNB and core configuration:&lt;br /&gt;
* Limited to '''15 kHz SCS''' → FDD bands only&lt;br /&gt;
* Supported bandwidths: '''5, 10, 15, 20 MHz'''&lt;br /&gt;
&lt;br /&gt;
=== Building and Installing srs UE (4G) ===&lt;br /&gt;
To set up the srsRAN 4G UE software stack, follow the steps below.&lt;br /&gt;
&lt;br /&gt;
* Clone the repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/srsRAN/srsRAN_4G.git&lt;br /&gt;
cd srsRAN_4G&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Create a build directory and compile:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../&lt;br /&gt;
make&lt;br /&gt;
make test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install binaries and default configs:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo make install&lt;br /&gt;
srsran_install_configs.sh user&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This installs the necessary binaries and default configuration files for srsUE. You can now configure UE parameters and launch the UE application.&lt;br /&gt;
&lt;br /&gt;
=== Configuring srs UE for OAI Core Network ===&lt;br /&gt;
Key settings for interoperability:&lt;br /&gt;
* '''USIM Parameters''': &amp;lt;code&amp;gt;IMSI&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;OPC&amp;lt;/code&amp;gt; '''must match''' the entries in the Core Network DB.&lt;br /&gt;
* '''APN''': Typically &amp;lt;code&amp;gt;oai&amp;lt;/code&amp;gt; to match core configuration.&lt;br /&gt;
* '''Device''': &amp;lt;code&amp;gt;device_args = type=b200&amp;lt;/code&amp;gt; for USRP B210.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[rf]&lt;br /&gt;
freq_offset = 0&lt;br /&gt;
tx_gain = 50&lt;br /&gt;
rx_gain = 80&lt;br /&gt;
srate = 23.04e6&lt;br /&gt;
nof_antennas = 1&lt;br /&gt;
&lt;br /&gt;
device_name = uhd&lt;br /&gt;
device_args = type=b200&lt;br /&gt;
clock = internal&lt;br /&gt;
time_adv_nsamples = 300&lt;br /&gt;
&lt;br /&gt;
[usim]&lt;br /&gt;
mode = soft&lt;br /&gt;
algo = milenage&lt;br /&gt;
opc  = C42449363BBAD02B66D16BC975D77CC1&lt;br /&gt;
k    = fec86ba6eb707ed08905757b1bb44b8f&lt;br /&gt;
imsi = 208950000000032&lt;br /&gt;
imei = 353490069873319&lt;br /&gt;
&lt;br /&gt;
[nas]&lt;br /&gt;
apn = oai&lt;br /&gt;
apn_protocol = ipv4&lt;br /&gt;
&lt;br /&gt;
[rrc]&lt;br /&gt;
release = 15&lt;br /&gt;
ue_category = 4&lt;br /&gt;
&lt;br /&gt;
[pcap]&lt;br /&gt;
enable = none&lt;br /&gt;
mac_filename = /tmp/ue_mac.pcap&lt;br /&gt;
mac_nr_filename = /tmp/ue_mac_nr.pcap&lt;br /&gt;
nas_filename = /tmp/ue_nas.pcap&lt;br /&gt;
&lt;br /&gt;
[log]&lt;br /&gt;
all_level = info&lt;br /&gt;
filename = /tmp/ue.log&lt;br /&gt;
&lt;br /&gt;
[rat.nr]&lt;br /&gt;
bands = 3&lt;br /&gt;
nof_carriers = 1&lt;br /&gt;
nof_prb = 106&lt;br /&gt;
max_nof_prb = 106&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Invoking the srs UE with USRP B210 ===&lt;br /&gt;
Run from the build directory:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
~/srsRAN_4G/build/srsue/src$ sudo ./srsue ue_rf.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verifying srs UE IP Assignment ===&lt;br /&gt;
After PDU session establishment, verify the tunnel interface (e.g., &amp;lt;code&amp;gt;tun_srsue&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig tun_srsue&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example output:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
tun_srsue: flags=4305&amp;lt;UP,POINTOPOINT,RUNNING,NOARP,MULTICAST&amp;gt;  mtu 1500&lt;br /&gt;
    inet 10.0.0.12  netmask 255.255.255.0  destination 10.0.0.12&lt;br /&gt;
    RX packets 0  bytes 0 (0.0 B)&lt;br /&gt;
    TX packets 40 bytes 6920 (6.9 KB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this example, the UE received IP &amp;lt;code&amp;gt;10.0.0.12&amp;lt;/code&amp;gt; from the OAI 5G Core.&lt;br /&gt;
&lt;br /&gt;
=== srsRAN Log Interpretation for srsUE Attachment and PDU Session Setup ===&lt;br /&gt;
Annotated logs showing RA, RRC, NGAP, and PDU session setup:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[NR_PHY] [RAPROC] Initiating RA procedure with preamble 0 ...&lt;br /&gt;
[NR_MAC] UE RA-RNTI 010f TC-RNTI 55aa: Activating RA process index 0&lt;br /&gt;
...&lt;br /&gt;
[NR_RRC] RRCSetupComplete received — UE is now RRC_CONNECTED ✅&lt;br /&gt;
[NGAP] UE 1: Chose AMF 'OAI-AMF' (PLMN MCC 208, MNC 95)&lt;br /&gt;
...&lt;br /&gt;
[PDU SESSION SETUP INITIATED]&lt;br /&gt;
[GTPU] Tunnel Created: TEID: bf57e042 ↔ 192.168.70.134&lt;br /&gt;
...&lt;br /&gt;
[NR_RRC] RRCReconfigurationComplete received ✅&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Legend&lt;br /&gt;
* '''RA procedure succeeded''' – Msg4 ACK received&lt;br /&gt;
* '''RRC_CONNECTED''' – UE has RRC connection&lt;br /&gt;
* '''SecurityModeComplete''' – Security context active&lt;br /&gt;
* '''PDU Session Setup''' – Bearer/tunnel configured&lt;br /&gt;
&lt;br /&gt;
=== srsUE Log Interpretation for Initial Access and Registration ===&lt;br /&gt;
Launch UE:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/srsRAN_4G/build/srsue/src&lt;br /&gt;
sudo ./srsue ue_rf.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typical successful trace:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[INFO] [UHD] ... UHD_4.8.0 ...&lt;br /&gt;
[INFO] [B200] Detected Device: B210 (USB 3)&lt;br /&gt;
...&lt;br /&gt;
Random Access Complete. c-rnti=0x4601, ta=4&lt;br /&gt;
RRC Connected&lt;br /&gt;
PDU Session Establishment successful. IP: 10.0.0.8&lt;br /&gt;
RF status: O=2, U=0, L=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Verifying srsUE Attach and Registration via Wireshark ==&lt;br /&gt;
A Wireshark capture of NGAP and NAS signaling confirms:&lt;br /&gt;
* NG Setup (NGSetupRequest/Response)&lt;br /&gt;
* NAS Registration (InitialUEMessage → Registration Request)&lt;br /&gt;
* Authentication and Security Mode procedures&lt;br /&gt;
* UE Capability exchange&lt;br /&gt;
* Initial Context Setup&lt;br /&gt;
* PDU Session Resource Setup&lt;br /&gt;
&lt;br /&gt;
[[File:Wireshark_Packet_Capture.png|900px|center|thumb|NGAP and NAS signaling during UE attach and registration.]]&lt;br /&gt;
&lt;br /&gt;
== End-to-End Connectivity Verification via Ping ==&lt;br /&gt;
From the external DN container:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it oai-ext-dn ping 10.0.0.5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=35.0 ms&lt;br /&gt;
...&lt;br /&gt;
7 packets transmitted, 7 received, 0% packet loss&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Confirms UE registration, PDU session, and correct UPF forwarding.&lt;br /&gt;
&lt;br /&gt;
== iPerf Downlink (DL) Testing ==&lt;br /&gt;
; Server on UE (bind to UE tunnel IP)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo iperf -s -i 1 -u -B 10.0.0.5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Client on CN/gNB&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it oai-ext-dn iperf -c 10.0.0.5 -u -b 10M --bind 192.168.70.135&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example results show ~10.5 Mbit/s, 0% loss, sub-1 ms jitter.&lt;br /&gt;
&lt;br /&gt;
== iPerf Uplink (UL) Testing ==&lt;br /&gt;
; Server on CN&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo docker exec -it oai-ext-dn iperf -s -i 1 -u -B 192.168.70.135&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Client on UE&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
iperf -c 192.168.70.135 -u -b 10M --bind 10.0.0.5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Expected: stable UL throughput, low jitter, no loss.&lt;br /&gt;
&lt;br /&gt;
== Installing, Configuring, and Running the COTS UE System ==&lt;br /&gt;
&lt;br /&gt;
=== Quectel RM520N Series — 5G NR Sub-6 GHz Module ===&lt;br /&gt;
; Key Features&lt;br /&gt;
* 5G SA/NSA (3GPP Rel-16), M.2 30×52×2.3mm&lt;br /&gt;
* Migration compatible with RM50xQ/EM06/EM12/EM160R-GL&lt;br /&gt;
&lt;br /&gt;
; Performance&lt;br /&gt;
* SA: DL up to 2.4 Gbps / UL up to 900 Mbps&lt;br /&gt;
* NSA: DL up to 3.4 Gbps / UL ~550–600 Mbps&lt;br /&gt;
&lt;br /&gt;
; Environment&lt;br /&gt;
* –40°C…+85°C (extended), global carrier support&lt;br /&gt;
&lt;br /&gt;
; GNSS&lt;br /&gt;
* Qualcomm IZat Gen9C Lite: GPS/GLONASS/BDS/Galileo/QZSS&lt;br /&gt;
&lt;br /&gt;
=== Configuring the SIM Card ===&lt;br /&gt;
If using a modem or COTS handset, a SIM is required (OAI UE softmodem on USRP does not require one).&lt;br /&gt;
&lt;br /&gt;
Open-Cells SIM (ADM code printed on SIM). Read current data:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./program_uicc --adm 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example (failure due to wrong ADM length):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
No ADM code of 8 figures, cannot program the UICC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use the correct 8-digit ADM (example):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./program_uicc --adm 0C008080&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Successful programming and authentication example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./program_uicc --adm QC008080 \&lt;br /&gt;
  --key 8C6A145D419B107F93501CC02255D4C6 \&lt;br /&gt;
  --opc 1DB7A0E55282194FC145F9B9F184979D \&lt;br /&gt;
  --authenticate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:800px-quectel-ue-program_uicc_output_for_read.jpg|600px|center|thumb|UICC programming failure due to incorrect ADM length.]]&lt;br /&gt;
[[File:800px-quectel-ue-program_uicc_output_for_write.jpg|900px|center|thumb|Successful UICC programming and 5G AKA authentication.]]&lt;br /&gt;
&lt;br /&gt;
Ensure SIM values match the CN SQL database. Primary parameters:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Primary Configuration Parameters for UE, gNB, CN&lt;br /&gt;
! Parameter !! UE !! gNB !! CN&lt;br /&gt;
|-&lt;br /&gt;
| '''IMSI''' || 208920100001101 || MCC: '''208''', MNC: '''92''' || 208920100001101&lt;br /&gt;
|-&lt;br /&gt;
| '''MSISDN''' || 00000101 || — || 00000101&lt;br /&gt;
|-&lt;br /&gt;
| '''IMEI''' || 863305040549338 || — || 863305040549338&lt;br /&gt;
|-&lt;br /&gt;
| '''Key''' || 0C0A34601D4F07677303652C0462535B || — || 0C0A34601D4F07677303652C0462535B&lt;br /&gt;
|-&lt;br /&gt;
| '''OPC''' || 63bfa50ee6523365ff14c1f45f88737d || — || 63bfa50ee6523365ff14c1f45f88737d&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Serial Connection to the Module via Minicom ===&lt;br /&gt;
Attach antennas, insert the module (M.2), connect via USB 3.0.&lt;br /&gt;
&lt;br /&gt;
Install and start Minicom:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; enclose=&amp;quot;none&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install minicom&lt;br /&gt;
sudo minicom /dev/ttyUSB0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Exit: &amp;lt;code&amp;gt;Ctrl-A&amp;lt;/code&amp;gt;, then &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Quectel Module Configuration via AT Commands ===&lt;br /&gt;
Execute in Minicom (order):&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+GMR&amp;lt;/code&amp;gt; – Firmware version&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+CIMI&amp;lt;/code&amp;gt; – IMSI&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+GSN&amp;lt;/code&amp;gt; – IMEI&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+QMBNCFG=&amp;quot;select&amp;quot;,&amp;quot;ROW_Commercial&amp;quot;&amp;lt;/code&amp;gt; – Enable commercial profile&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+QNWPREFCFG=&amp;quot;nr5g_band&amp;quot;&amp;lt;/code&amp;gt; – Show NR bands&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;&amp;lt;/code&amp;gt; – Show mode&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+QNWPREFCFG=&amp;quot;mode_pref&amp;quot;,nr5g&amp;lt;/code&amp;gt; – Prefer NR SA&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+QNWPREFCFG=&amp;quot;nr5g_disable_mode&amp;quot;,0&amp;lt;/code&amp;gt; – Enable NR&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+CGDCONT=1,&amp;quot;IP&amp;quot;,&amp;quot;oai&amp;quot;,&amp;quot;0.0.0.0&amp;quot;,0,0&amp;lt;/code&amp;gt; – PDP context&lt;br /&gt;
# &amp;lt;code&amp;gt;AT+CFUN=0&amp;lt;/code&amp;gt; then &amp;lt;code&amp;gt;AT+CFUN=1&amp;lt;/code&amp;gt; – Cycle functionality&lt;br /&gt;
&lt;br /&gt;
==== Verifying Operation with AT Commands ====&lt;br /&gt;
; &amp;lt;code&amp;gt;AT+COPS?&amp;lt;/code&amp;gt; – Operator &amp;amp; registration&lt;br /&gt;
Expected:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
+COPS: 0,0,&amp;quot;208 92 open cells&amp;quot;,11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;code&amp;gt;AT+C5GREG?&amp;lt;/code&amp;gt; – 5G registration&lt;br /&gt;
Expected:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
+C5GREG: 2,1,&amp;quot;1&amp;quot;,&amp;quot;0&amp;quot;,11,16,&amp;quot;01.00007B;00.000000:01.00000C;00.000000&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Connectivity testing of COTS UE with OAI gNB/CN via ping and iperf follows the same steps as above.&lt;br /&gt;
&lt;br /&gt;
; Example OOKLA Speedtest (COTS UE)&lt;br /&gt;
* Downlink: '''48.93 Mbps'''&lt;br /&gt;
* Uplink: '''4 Mbps'''&lt;br /&gt;
* Latency: ~'''50 ms'''&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=5G_srsRAN_End-to-End_Reference_Architecture_with_USRP&amp;diff=6337</id>
		<title>5G srsRAN End-to-End Reference Architecture with USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=5G_srsRAN_End-to-End_Reference_Architecture_with_USRP&amp;diff=6337"/>
				<updated>2025-11-05T17:48:55Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: Created page with &amp;quot;== Application Note Number and Authors ==  '''AN-599'''  == Authors ==  Bharat Agarwal and Neel Pandeya  ==Executive Summary==  ===Overview===  This Application Note presents...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-599'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
&lt;br /&gt;
This Application Note presents ...&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=AI-Based_Spectrum_Sensing_with_Nvidia_Jetson_and_USRP&amp;diff=6321</id>
		<title>AI-Based Spectrum Sensing with Nvidia Jetson and USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=AI-Based_Spectrum_Sensing_with_Nvidia_Jetson_and_USRP&amp;diff=6321"/>
				<updated>2025-11-05T12:35:14Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: /* Waveform Repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-811'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
This application note presents a complete framework for real-time spectrum sensing using NI Universal Serial Radio Peripheral (USRP) Software-Defined Radios (SDRs) and NVIDIA Jetson or standard x86 compute platforms. The framework is not limited to a single USRP model—the X410, X310, and B2xx series (e.g., B206) can all be used as transmitters or receivers depending on the deployment scenario. The solution leverages the NI-RF Data Recording API to enable scalable RF data acquisition, SigMF-compliant metadata tagging, and seamless integration with machine learning workflows.&lt;br /&gt;
&lt;br /&gt;
The document outlines three core usage scenarios:&lt;br /&gt;
&lt;br /&gt;
# x86-Based Development Workflow: Using a workstation or server-class x86 machine, paired with high-end USRPs such as the X410 or X310, the system supports wideband spectrum sensing (up to 400&amp;amp;nbsp;MHz instantaneous bandwidth per channel). This configuration is ideal for laboratory development, algorithm training, and high-throughput dataset generation.&lt;br /&gt;
# Jetson-Based Embedded Sensing (Primary Use Case): Using an NVIDIA Jetson platform as the host (e.g., AGX Orin) with a compact B206 SDR as receiver and an X410 as transmitter, the system delivers efficient edge inference with GPU acceleration. Although the B206 limits the instantaneous bandwidth to 56&amp;amp;nbsp;MHz, this configuration emphasizes portability, low power, and real-time embedded operation.&lt;br /&gt;
# User-Defined Dataset Integration: In addition to live spectrum sensing, the framework supports integration and generation of user-defined datasets. This functionality extends the applicability of the system beyond real-time capture, enabling flexible experimentation, reproducibility, and seamless AI/ML dataset preparation. Two complementary capabilities are supported:&lt;br /&gt;
## SigMF Dataset Recording&lt;br /&gt;
##* All captured RF data is stored in the Signal Metadata Format (SigMF).&lt;br /&gt;
##* SigMF pairs raw IQ samples (&amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;) with a corresponding metadata file (&amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt;) in JSON format.&lt;br /&gt;
##* Metadata describes acquisition parameters such as frequency, bandwidth, gain, device type, timestamps, and scenario context.&lt;br /&gt;
##* Being human-readable and portable, SigMF datasets can be used across a wide range of software environments, making them ideal for wireless research, spectrum monitoring, AI/ML training for 6G, and regulatory validation.&lt;br /&gt;
##* Example: A spectrum sensing session at 3.5&amp;amp;nbsp;GHz, 20&amp;amp;nbsp;MHz bandwidth, and 10-second duration will result in a SigMF-compliant dataset ready for further processing or ML-based classification.&lt;br /&gt;
## Continuous Waveform Playback with User-Defined Files&lt;br /&gt;
##* The platform supports continuous transmission and replay of user-defined waveforms in TDMS or MATLAB (.mat) formats.&lt;br /&gt;
##* This allows testing with standard-compliant signals such as 5G NR, LTE, Radar, or Wi-Fi, or custom-designed waveforms.&lt;br /&gt;
##* By replaying predefined waveforms, researchers can benchmark algorithms, validate coexistence scenarios, and reproduce experiments consistently across testbeds.&lt;br /&gt;
##* Example: A MATLAB-generated LTE downlink frame can be continuously transmitted via an X410 while a B206 or X310 records the received signal in SigMF format for classification.&lt;br /&gt;
&lt;br /&gt;
Together, these capabilities ensure that the NI-RF Data Recording API can handle both dataset creation (SigMF-based recording) and waveform-driven experimentation (TDMS/MAT playback), thereby covering the entire pipeline from signal generation to ML-ready dataset production.&lt;br /&gt;
&lt;br /&gt;
By combining NI's reliable SDR hardware with NVIDIA's efficient edge compute platforms and a unified data interface, this solution supports a wide range of spectrum intelligence applications—from interference detection and dynamic spectrum access to embedded RF analytics. The methodology enables scalable deployment from lab to field, supporting real-time insights and long-term data collection in a streamlined, modular pipeline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USRP B206 Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File: USRP-b206_mini_01.jpg|thumb|center|400px|NI USRP B206 Software Defined Radio]]&lt;br /&gt;
&lt;br /&gt;
The USRP B206 is a compact, low-cost SDR developed by NI / Ettus Research. It supports full-duplex operation with one transmit and one receive channel, making it ideal for a variety of wireless communication and sensing applications. The B206 covers a wide RF frequency range from 70&amp;amp;nbsp;MHz to 6&amp;amp;nbsp;GHz and supports up to 56&amp;amp;nbsp;MHz of instantaneous bandwidth. This makes it suitable for applications such as spectrum sensing, dynamic spectrum access, and cognitive radio.&lt;br /&gt;
&lt;br /&gt;
The device connects to a host system via a high-speed USB&amp;amp;nbsp;3.0 interface, which enables data rates sufficient for wideband real-time signal acquisition and transmission. It also supports USB&amp;amp;nbsp;2.0 with reduced performance. The B206 includes a Xilinx Spartan-6 FPGA for onboard signal processing and is powered either through USB or an external DC supply, the latter being preferred for optimal RF performance.&lt;br /&gt;
&lt;br /&gt;
The USRP B206 is compatible with both x86 and ARM-based hosts, including embedded platforms like the NVIDIA Jetson series. This enables portable and energy-efficient deployment of spectrum sensing pipelines at the network edge. It is fully supported by the open-source UHD and integrates with popular SDR development tools such as GNU Radio, MATLAB, and LabVIEW.&lt;br /&gt;
&lt;br /&gt;
Typical use cases for the B206 include real-time spectrum monitoring, wireless signal classification using machine learning, prototyping of 4G/5G systems, and SDR education and training. Its compact size and flexible software support make it an excellent choice for both laboratory research and embedded field deployments.&lt;br /&gt;
&lt;br /&gt;
'''Key Features of the USRP B206:'''&lt;br /&gt;
* RF Capabilities: 1 TX, 1 RX, independently tunable, RF transceiver, 70&amp;amp;nbsp;MHz to 6&amp;amp;nbsp;GHz, up to 56&amp;amp;nbsp;MHz bandwidth&lt;br /&gt;
* Programmable Logic: FPGA: Xilinx Spartan-6 XC6SLX150&lt;br /&gt;
* Software: UHD 4.9 or later, GNU Radio, C/C++ and Python&lt;br /&gt;
* Synchronization: REF (external 10&amp;amp;nbsp;MHz or PPS reference)&lt;br /&gt;
* Digital Interfaces: USB&amp;amp;nbsp;3.0, GPIO (8 I/O lines with 3.3&amp;amp;nbsp;V I/O voltage), and JTAG&lt;br /&gt;
* Power, form factor: 5&amp;amp;nbsp;V&amp;amp;nbsp;DC, 0.9&amp;amp;nbsp;A maximum; Board-only: 84.3&amp;amp;nbsp;mm × 51.0&amp;amp;nbsp;mm × 8.7&amp;amp;nbsp;mm; Enclosed: 84.9&amp;amp;nbsp;mm × 55.7&amp;amp;nbsp;mm × 19.8&amp;amp;nbsp;mm&lt;br /&gt;
&lt;br /&gt;
== NI-RF Data Recording API Overview ==&lt;br /&gt;
&lt;br /&gt;
The '''[https://github.com/ni/ni-rf-data-recording-api/blob/main/README.md NI-RF Data Recording API]''' is an open-source, Python-based framework developed by National Instruments (NI) in collaboration with the Genesys Lab at Northeastern University. It is designed to streamline RF data collection using NI USRP SDRs, with support for structured metadata via the '''[https://github.com/sigmf/SigMF Signal Metadata Format (SigMF)]'''.&lt;br /&gt;
&lt;br /&gt;
=== Purpose and Scope ===&lt;br /&gt;
This API enables efficient recording, labeling, and replay of real-world RF signals. It is particularly suited for generating datasets used in AI/ML workflows, wireless research, and spectrum monitoring. The framework abstracts low-level UHD interactions, allowing users to define RF parameters through JSON or YAML configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Key Features ===&lt;br /&gt;
* Support for both signal transmission and reception using NI USRP hardware.&lt;br /&gt;
* Native recording in SigMF format, capturing both IQ samples and rich metadata.&lt;br /&gt;
* Python-based, modular architecture supporting custom extensions and automation.&lt;br /&gt;
* Multi-SDR support via coordinated configuration files.&lt;br /&gt;
* Sample waveform libraries included (e.g., LTE, NR, radar, Wi-Fi) in TDMS/MAT formats.&lt;br /&gt;
* Utility scripts for standalone use: transmit, receive, replay, or continuous capture.&lt;br /&gt;
&lt;br /&gt;
=== System Requirements ===&lt;br /&gt;
The API has been validated on Ubuntu&amp;amp;nbsp;22.04 systems with the following dependencies:&lt;br /&gt;
* At least one compatible NI USRP device (e.g., B206, X310, X410).&lt;br /&gt;
* Installed UHD drivers with Python bindings.&lt;br /&gt;
* Python&amp;amp;nbsp;3.x and required libraries (e.g., NumPy, PyYAML).&lt;br /&gt;
* Optional Docker environment for containerized deployment.&lt;br /&gt;
&lt;br /&gt;
=== Relevance to Our Use Cases ===&lt;br /&gt;
In this application note, we explore three deployment scenarios of the NI-RF Data Recording API:&lt;br /&gt;
&lt;br /&gt;
# x86-based Spectrum Sensing: Using the API on a desktop or server-class system, the USRP&amp;amp;nbsp;B206 is configured to perform spectrum capture, and the data is saved in SigMF format. This setup is optimal for high-throughput and lab-based development environments.&lt;br /&gt;
# Embedded Jetson Platform: The API is deployed on an NVIDIA Jetson device interfaced with the USRP&amp;amp;nbsp;B206 over USB&amp;amp;nbsp;3.0. This enables compact, power-efficient, and real-time spectrum sensing at the edge. Onboard GPU resources are leveraged for FFT computation and ML inference.&lt;br /&gt;
# User-Defined Dataset Integration: The API provides flexible support for user-defined datasets through two complementary capabilities:&lt;br /&gt;
## Importing Pre-Generated Data: Users can seamlessly import and tag custom IQ recordings (e.g., SigMF-compliant files or previously captured spectrum data) into the repository. This enables integration of external datasets for benchmarking, anomaly detection, or reproducible research.&lt;br /&gt;
## Data Lake Storage for AI/ML Pipelines: All captured and imported datasets can be stored in a structured data lake, significantly simplifying automated dataset selection, management, and preprocessing. This facilitates streamlined workflows for AI/ML model design, training, and validation in spectrum sensing and 6G wireless research.&lt;br /&gt;
&lt;br /&gt;
The NI-RF Data Recording API provides a flexible, hardware-agnostic foundation for both live RF capture and offline dataset handling, making it central to spectrum intelligence and edge-aware signal processing workflows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference Architecture for Spectrum Sensing ==&lt;br /&gt;
&lt;br /&gt;
To support flexible and scalable RF data collection workflows, we propose a dual-mode reference architecture that demonstrates spectrum sensing using NI USRP hardware with two compute platforms: a high-performance x86 host and an embedded NVIDIA Jetson device. Both configurations utilize the NI-RF Data Recording API to capture, store, and manage RF data in SigMF format. The hardware setup supports real-time signal acquisition, tagging, and streaming for downstream machine learning or signal intelligence tasks.&lt;br /&gt;
&lt;br /&gt;
=== x86-Based High-Performance Architecture ===&lt;br /&gt;
&lt;br /&gt;
[[File: x86.png|thumb|center|900px|x86-based spectrum sensing architecture using NI USRP B206 and X410]]&lt;br /&gt;
&lt;br /&gt;
In this high-performance lab-based deployment, a desktop-class x86 host system is used. The USRP&amp;amp;nbsp;X410 (or alternatively the X310) serves as the receiver, connected to the workstation via a 10&amp;amp;nbsp;GbE Ethernet interface to support high-throughput data streaming. The transmitter is also an NI USRP&amp;amp;nbsp;X410, connected through a 10&amp;amp;nbsp;GbE link via a network switch. A 30&amp;amp;nbsp;dB attenuator is inserted between the TX and RX paths to protect the RF front-end from saturation during close-proximity transmission. &lt;br /&gt;
&lt;br /&gt;
This configuration demonstrates the full high-performance capability of the platform, enabling wideband spectrum sensing and scalable data capture.&lt;br /&gt;
&lt;br /&gt;
Host System Specifications:&lt;br /&gt;
* Operating System: Ubuntu&amp;amp;nbsp;22.04  &lt;br /&gt;
* UHD Compatibility: The NI-RF Data Recording API supports UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.2. Most devices such as the X410 or X310 work with older versions, but the B206 requires UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.9.  &lt;br /&gt;
* Processor: Intel&amp;amp;nbsp;Xeon&amp;amp;nbsp;w7-2495X (24&amp;amp;nbsp;cores, 2.5&amp;amp;nbsp;GHz)&lt;br /&gt;
&lt;br /&gt;
This setup is suited for '''high-throughput spectrum recording, algorithm development, and dataset generation''' in a lab environment. It offers large storage capacity, stable power, and CPU-intensive post-processing capabilities.&lt;br /&gt;
&lt;br /&gt;
=== Jetson-Based Embedded Architecture ===&lt;br /&gt;
&lt;br /&gt;
[[File:SS_with_x86.png|thumb|center|900px|Jetson-based spectrum sensing architecture using NI USRP B2x0 and X410]]&lt;br /&gt;
&lt;br /&gt;
In this configuration, an NVIDIA Jetson module serves as the edge processing unit. The Jetson connects to a USRP&amp;amp;nbsp;B2x0 (e.g., B206) over a USB&amp;amp;nbsp;3.0 interface, acting as the spectrum sensor (receiver). A USRP&amp;amp;nbsp;X410 acts as the transmitter, linked via a LAN switch. A 30&amp;amp;nbsp;dB attenuator is used between the TX and RX paths to prevent RF front-end saturation during close-proximity transmission.&lt;br /&gt;
&lt;br /&gt;
The Jetson executes the RF data acquisition pipeline and leverages onboard GPU resources to perform high-speed FFTs, signal classification, and real-time metadata tagging. A display, keyboard, and mouse connect directly for standalone operation.&lt;br /&gt;
&lt;br /&gt;
'Jetson System Specifications:&lt;br /&gt;
* Operating System: Ubuntu&amp;amp;nbsp;22.04 with JetPack&amp;amp;nbsp;6.2.1  &lt;br /&gt;
* UHD Version: 4.9  &lt;br /&gt;
* Processor: NVIDIA&amp;amp;nbsp;Jetson&amp;amp;nbsp;AGX&amp;amp;nbsp;Orin&amp;amp;nbsp;64&amp;amp;nbsp;GB  &lt;br /&gt;
&lt;br /&gt;
This configuration is ideal for low-power, field-deployable sensing nodes where edge inference, minimal latency, and portability are required. The NI-RF Data Recording API runs natively on ARM-based Jetson, ensuring consistent data acquisition across architectures.&lt;br /&gt;
&lt;br /&gt;
=== Common Features Across Architectures ===&lt;br /&gt;
Both architectures support:&lt;br /&gt;
* Real-time IQ sample recording and metadata tagging using NI-RF Data Recording API  &lt;br /&gt;
* Integration with SigMF-compliant datasets  &lt;br /&gt;
* Wideband RF capture across 70&amp;amp;nbsp;MHz–6&amp;amp;nbsp;GHz (with B206)  &lt;br /&gt;
* Configurable gain, center frequency, bandwidth, and LO offsets via JSON/YAML files  &lt;br /&gt;
&lt;br /&gt;
The dual-platform design allows researchers to prototype, validate, and deploy spectrum sensing pipelines in a variety of scenarios—from power-constrained edge sensing to scalable, cloud-connected research environments.&lt;br /&gt;
&lt;br /&gt;
== Bill of Materials ==&lt;br /&gt;
&lt;br /&gt;
This section lists the hardware and software components required to replicate the spectrum sensing setup described in the reference architectures.&lt;br /&gt;
&lt;br /&gt;
=== Jetson-Based Embedded Spectrum Sensing Setup ===&lt;br /&gt;
* '''NI USRP B206 SDR (Receiver)'''&lt;br /&gt;
** Frequency Range: 70&amp;amp;nbsp;MHz – 6&amp;amp;nbsp;GHz  &lt;br /&gt;
** Bandwidth: up to 56&amp;amp;nbsp;MHz  &lt;br /&gt;
** Interface: USB&amp;amp;nbsp;3.0  &lt;br /&gt;
&lt;br /&gt;
* '''NI USRP X410 SDR (Transmitter)'''&lt;br /&gt;
** Frequency Range: up to 7.2&amp;amp;nbsp;GHz  &lt;br /&gt;
** Bandwidth: up to 1&amp;amp;nbsp;GHz per channel  &lt;br /&gt;
** Interface: 10&amp;amp;nbsp;GbE (SFP+)  &lt;br /&gt;
&lt;br /&gt;
* '''NVIDIA Jetson AGX Orin 64&amp;amp;nbsp;GB Developer Kit (Edge Host)'''&lt;br /&gt;
** GPU: 2048-core Ampere GPU  &lt;br /&gt;
** Interfaces: USB&amp;amp;nbsp;3.0, 10&amp;amp;nbsp;Gb Ethernet  &lt;br /&gt;
** OS: Ubuntu&amp;amp;nbsp;22.04 (ARM64) with JetPack&amp;amp;nbsp;6.2.1  &lt;br /&gt;
&lt;br /&gt;
* '''Display and Input Devices'''&lt;br /&gt;
** Monitor (DisplayPort or HDMI)  &lt;br /&gt;
** USB Keyboard and Mouse  &lt;br /&gt;
&lt;br /&gt;
* '''30&amp;amp;nbsp;dB RF Attenuator'''&lt;br /&gt;
** Protects RX frontend during loopback or close-range transmission  &lt;br /&gt;
&lt;br /&gt;
* '''Network Switch (Gigabit)'''&lt;br /&gt;
** Routes LAN traffic between Jetson and X410  &lt;br /&gt;
&lt;br /&gt;
* '''RF Cables and Antennas or Dummy Load'''  &lt;br /&gt;
* '''Power Supply for USRP X410 and Jetson'''  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable (for Jetson–B206 interface)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== x86-Based Spectrum Sensing Setup ===&lt;br /&gt;
* '''NI USRP B206 SDR (Receiver)'''&lt;br /&gt;
* '''NI USRP X410 SDR (Transmitter)'''&lt;br /&gt;
* '''x86 Workstation or Server (Host PC)'''&lt;br /&gt;
** CPU: Intel&amp;amp;nbsp;Xeon&amp;amp;nbsp;w7-2495X, 24&amp;amp;nbsp;cores, 2.5&amp;amp;nbsp;GHz  &lt;br /&gt;
** OS: Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS  &lt;br /&gt;
** UHD: Version&amp;amp;nbsp;4.8 or newer  &lt;br /&gt;
** RAM: Minimum 32&amp;amp;nbsp;GB recommended  &lt;br /&gt;
** Storage: SSD for high-speed IQ data logging  &lt;br /&gt;
&lt;br /&gt;
* '''Display and Input Devices'''&lt;br /&gt;
** Monitor (DisplayPort or HDMI)  &lt;br /&gt;
** USB Keyboard and Mouse  &lt;br /&gt;
&lt;br /&gt;
* '''30&amp;amp;nbsp;dB RF Attenuator'''  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable (PC–B206 interface)'''  &lt;br /&gt;
* '''Ethernet Cables (PC and X410 to switch)'''  &lt;br /&gt;
* '''Network Switch (Gigabit or 10&amp;amp;nbsp;GbE)'''  &lt;br /&gt;
* '''Coaxial Cable (RF connection between TX and RX)'''&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements (Common) ===&lt;br /&gt;
* '''NI-RF Data Recording API'''&lt;br /&gt;
** GitHub: [https://github.com/ni/ni-rf-data-recording-api https://github.com/ni/ni-rf-data-recording-api]  &lt;br /&gt;
** Supports SigMF format, YAML/JSON configuration, UHD interface  &lt;br /&gt;
&lt;br /&gt;
* '''UHD (USRP Hardware Driver)'''&lt;br /&gt;
** Version&amp;amp;nbsp;4.9 recommended  &lt;br /&gt;
** Installed natively  &lt;br /&gt;
&lt;br /&gt;
* '''Python&amp;amp;nbsp;3.x Environment'''&lt;br /&gt;
** Required packages: numpy, pyyaml, sigmf, uhd, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
To implement the proposed spectrum sensing architecture, the following hardware components are required. The selected devices are chosen for their compatibility with the NI-RF Data Recording API, support for UHD drivers, and ability to perform high-speed RF acquisition and processing.&lt;br /&gt;
&lt;br /&gt;
=== NI USRP B206 (Receiver SDR) ===&lt;br /&gt;
The USRP&amp;amp;nbsp;B206 is a low-cost, full-duplex software-defined radio with wide RF coverage and USB&amp;amp;nbsp;3.0 connectivity, making it ideal for spectrum sensing tasks.&lt;br /&gt;
&lt;br /&gt;
* '''Frequency Range:''' 70&amp;amp;nbsp;MHz&amp;amp;nbsp;–&amp;amp;nbsp;6&amp;amp;nbsp;GHz  &lt;br /&gt;
* '''Bandwidth:''' Up to 56&amp;amp;nbsp;MHz  &lt;br /&gt;
* '''Interface:''' USB&amp;amp;nbsp;3.0  &lt;br /&gt;
* '''Form Factor:''' Compact, bus-powered or DC-powered  &lt;br /&gt;
* '''Purchase Link:''' [https://www.ettus.com/all-products/usrp-b200/ https://www.ettus.com/all-products/usrp-b200/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NI USRP X410 (Transmitter SDR) ===&lt;br /&gt;
The USRP&amp;amp;nbsp;X410 is a high-performance, 4-channel SDR capable of wideband signal transmission and reception. It supports 10&amp;amp;nbsp;GbE connectivity and real-time FPGA processing.&lt;br /&gt;
&lt;br /&gt;
* '''Frequency Range:''' Up to 7.2&amp;amp;nbsp;GHz  &lt;br /&gt;
* '''Bandwidth:''' Up to 1&amp;amp;nbsp;GHz per channel  &lt;br /&gt;
* '''Interface:''' 10&amp;amp;nbsp;GbE&amp;amp;nbsp;(SFP+), PCIe&amp;amp;nbsp;(optional)  &lt;br /&gt;
* '''FPGA:''' Xilinx Zynq Ultrascale+ RFSoC  &lt;br /&gt;
* '''Purchase Link:''' [https://www.ettus.com/all-products/usrp-x410/ https://www.ettus.com/all-products/usrp-x410/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NVIDIA Jetson AGX Orin 64&amp;amp;nbsp;GB Developer Kit (Edge Host) ===&lt;br /&gt;
The Jetson&amp;amp;nbsp;AGX&amp;amp;nbsp;Orin series provides a powerful embedded GPU platform for edge AI and RF signal processing.&lt;br /&gt;
&lt;br /&gt;
* '''GPU:''' NVIDIA Ampere architecture  &lt;br /&gt;
* '''RAM:''' 32&amp;amp;nbsp;GB&amp;amp;nbsp;/&amp;amp;nbsp;64&amp;amp;nbsp;GB LPDDR4/5  &lt;br /&gt;
* '''Connectivity:''' USB&amp;amp;nbsp;3.0, Ethernet, GPIO  &lt;br /&gt;
* '''OS Support:''' Ubuntu&amp;amp;nbsp;20.04&amp;amp;nbsp;/&amp;amp;nbsp;22.04&amp;amp;nbsp;(ARM64)  &lt;br /&gt;
* '''Purchase Link:''' [https://store.nvidia.com/jetson/store/ https://store.nvidia.com/jetson/store/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Network Switch (Gigabit or 10&amp;amp;nbsp;GbE) ===&lt;br /&gt;
A managed or unmanaged Ethernet switch is required to route LAN traffic between the Jetson or x86 host and the USRP&amp;amp;nbsp;X410.&lt;br /&gt;
&lt;br /&gt;
* '''Recommended:''' Netgear&amp;amp;nbsp;GS108, Mikrotik&amp;amp;nbsp;CRS305, or Cisco&amp;amp;nbsp;CBS350  &lt;br /&gt;
* '''Typical Ports:''' 8+ (Gigabit or 10&amp;amp;nbsp;GbE&amp;amp;nbsp;SFP+)  &lt;br /&gt;
* '''Example Link:''' [https://www.netgear.com/business/wired/switches/smart/gs108/ https://www.netgear.com/business/wired/switches/smart/gs108/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== High-Performance x86 Host (Optional for Lab Use) ===&lt;br /&gt;
An x86 workstation is recommended for development, high-throughput data collection, or as an alternative to Jetson in a lab environment.&lt;br /&gt;
&lt;br /&gt;
* '''Processor:''' Minimum specification of an 8-core CPU at 3&amp;amp;nbsp;GHz or higher (e.g., Intel&amp;amp;nbsp;Xeon or equivalent). Higher core counts (e.g., 24-core&amp;amp;nbsp;Xeon&amp;amp;nbsp;W7-2495X) can improve throughput and parallel data processing but are not mandatory.  &lt;br /&gt;
* '''RAM:''' 64&amp;amp;nbsp;GB or more  &lt;br /&gt;
* '''Storage:''' NVMe SSD for high-speed data logging  &lt;br /&gt;
* '''Operating System:''' Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS  &lt;br /&gt;
* '''Form Factor:''' Tower workstation or server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RF Accessories ===&lt;br /&gt;
* '''RF Coaxial Cables (SMA)'''  &lt;br /&gt;
* '''30&amp;amp;nbsp;dB Attenuator''' – Protects RX during close TX–RX loopback tests  &lt;br /&gt;
* '''Antennas''' (Wideband or band-specific)  &lt;br /&gt;
* '''Dummy Load''' (for isolated lab TX tests)  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable''' (for USRP&amp;amp;nbsp;B206)  &lt;br /&gt;
* '''Ethernet Cables''' (Cat&amp;amp;nbsp;6 or SFP+ DAC for X410)  &lt;br /&gt;
* '''Power Supplies:'''&lt;br /&gt;
** Jetson: 19&amp;amp;nbsp;V&amp;amp;nbsp;/&amp;amp;nbsp;4.74&amp;amp;nbsp;A adapter (usually included)  &lt;br /&gt;
** X410: External DC or rack supply per specifications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Requirements ==&lt;br /&gt;
&lt;br /&gt;
This section outlines the required software components for enabling spectrum sensing using the NI-RF Data Recording API with USRP&amp;amp;nbsp;B206/X410 and NVIDIA Jetson or x86 hosts. These tools are compatible across both embedded and desktop-class platforms and support real-time signal acquisition and metadata tagging in SigMF format.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu Operating System ===&lt;br /&gt;
* '''Version:''' Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS (Jetson) / Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS (x86 recommended)&lt;br /&gt;
* '''Download Link:''' [https://ubuntu.com/download https://ubuntu.com/download]&lt;br /&gt;
* '''Jetson OS Image:''' JetPack&amp;amp;nbsp;SDK includes Ubuntu and NVIDIA drivers  &lt;br /&gt;
* '''JetPack Link:''' [https://developer.nvidia.com/embedded/jetpack https://developer.nvidia.com/embedded/jetpack]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NI-RF Data Recording API ===&lt;br /&gt;
* '''Description:''' Open-source Python API developed by NI and the Genesys Lab (Northeastern University) for recording and labeling RF data in SigMF format using USRP devices.  &lt;br /&gt;
* '''Features:''' Configurable YAML/JSON setups, multi-SDR coordination, SigMF conversion, supports transmission/reception workflows.  &lt;br /&gt;
* '''Repository:''' [https://github.com/ni/ni-rf-data-recording-api https://github.com/ni/ni-rf-data-recording-api]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UHD – USRP Hardware Driver ===&lt;br /&gt;
* '''Description:''' The official driver and API library for controlling and interfacing with all NI/Ettus USRP SDR hardware. Required for low-level communication between Python and the hardware.  &lt;br /&gt;
* '''Version:''' The NI-RF Data Recording API requires a UHD version that supports the selected USRP device:  &lt;br /&gt;
** For X410 (and other X-Series): UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.2 (first stable release UHD&amp;amp;nbsp;4.4 recommended)  &lt;br /&gt;
** For B206: UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.9 required  &lt;br /&gt;
* '''Repository:''' [https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]  &lt;br /&gt;
* '''Install Guide:''' [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux UHD and GNU&amp;amp;nbsp;Radio Install Guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Environment ===&lt;br /&gt;
* '''Version:''' Python&amp;amp;nbsp;3.10.12 or newer  &lt;br /&gt;
* '''Required Packages:'''  &lt;br /&gt;
** &amp;lt;code&amp;gt;numpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyyaml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sigmf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uhd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scipy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matplotlib&amp;lt;/code&amp;gt;, etc.  &lt;br /&gt;
* '''Package Manager:''' &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;conda&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Recommended Setup:''' Create a Python virtual environment for isolation and reproducibility.  &lt;br /&gt;
* '''Download Link:''' [https://www.python.org/ https://www.python.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SigMF Library (Python) ===&lt;br /&gt;
* '''Description:''' Used for generating and parsing metadata in the Signal Metadata Format (SigMF), enabling dataset interoperability and ML dataset labeling.  &lt;br /&gt;
* '''Supported Version:''' Validated with '''SigMF&amp;amp;nbsp;1.0.0''' (later versions such as&amp;amp;nbsp;1.1.x or&amp;amp;nbsp;1.2.x introduce major changes and have not been validated).  &lt;br /&gt;
* '''Repository:''' [https://github.com/gnuradio/sigmf-numpy https://github.com/gnuradio/sigmf-numpy]  &lt;br /&gt;
* '''Installation Command:''' &amp;lt;code&amp;gt;pip install sigmf==1.0.0&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Reference:''' For more details, see the [https://github.com/ni/ni-rf-data-recording-api/tree/main/docs NI RF Data Recording API Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the UHD Software ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. At the time of this writing, the recommended version is '''UHD&amp;amp;nbsp;4.9'''.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates.  &lt;br /&gt;
* For x86/64 Ubuntu systems with released UHD versions available, you may install via APT Debian packages.  &lt;br /&gt;
* For Jetson (ARM64) systems, UHD must be built from source since no binary packages are provided.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all required dependencies (Ubuntu&amp;amp;nbsp;22.04):&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If your system already has another UHD version installed, remove it first:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt remove libuhd* uhd-host&lt;br /&gt;
sudo rm -rf /usr/lib/uhd /usr/include/uhd /usr/local/lib/uhd /usr/local/include/uhd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install build dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y \&lt;br /&gt;
  cmake g++ libboost-all-dev libusb-1.0-0-dev \&lt;br /&gt;
  libuhd-dev python3 python3-mako python3-numpy \&lt;br /&gt;
  python3-requests python3-ruamel.yaml libfftw3-dev \&lt;br /&gt;
  libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake \&lt;br /&gt;
  qtbase5-dev-tools doxygen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone the UHD repository and check out version '''v4.9.0.0''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
cd uhd&lt;br /&gt;
git checkout v4.9.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build and install UHD:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd host&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
sudo usrp_images_downloader&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify the installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_usrp_probe&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details, see the official UHD GitHub page:  &lt;br /&gt;
[https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]&lt;br /&gt;
&lt;br /&gt;
[[File:fae8d810-08f0-4ae3-ab87-5b6a31eeaa66.png|thumb|400px|center|uhd_usrp_probe output for B206]]&lt;br /&gt;
[[File:5026560b-fc07-4f77-953c-c17f41acfccc.png|thumb|400px|center|uhd_find_devices output for N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Examples of UHD utilities used for USRP probing and device discovery.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post UHD Installation Tasks ===&lt;br /&gt;
# '''Download USRP images'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/uhd_images_downloader&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Add USB udev rule''' (can be limited to specific vendor/device IDs)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/udev/rules.d/99-usb.rules&lt;br /&gt;
# Add this line:&lt;br /&gt;
# SUBSYSTEM==&amp;quot;usb&amp;quot;,MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
sudo udevadm control --reload-rules&lt;br /&gt;
sudo udevadm trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Unplug and replug the USB device if it was already connected.&lt;br /&gt;
&lt;br /&gt;
# '''Enable Python UHD API visibility'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;/usr/local/lib/python3.10/site-packages&amp;quot; | \&lt;br /&gt;
sudo tee /usr/local/lib/python3.10/dist-packages/local-site-packages.pth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UHD Installation Verification ===&lt;br /&gt;
# '''Find connected USRP devices'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Run throughput benchmark on the B2x0 device'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/lib/uhd/examples/benchmark_rate --args &amp;quot;type=b200&amp;quot; --rx_rate 10e6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Run Python throughput benchmark'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3.10 /usr/local/lib/uhd/examples/python/benchmark_rate.py --args &amp;quot;type=b200&amp;quot; --rx_rate 10e6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the USRP X410 Radio ==&lt;br /&gt;
&lt;br /&gt;
For detailed documentation, see the official Ettus manual:  &lt;br /&gt;
[https://files.ettus.com/manual/page_usrp_x4xx.html https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Connecting to the X410 ===&lt;br /&gt;
You can connect to the USRP X410 using either of the following interfaces:&lt;br /&gt;
* Ethernet (RJ45)&lt;br /&gt;
* USB-C JTAG Console&lt;br /&gt;
&lt;br /&gt;
If you cannot connect to the X410 (e.g., because it has a static IP address):&lt;br /&gt;
&lt;br /&gt;
# Connect the USRP to your PC using a USB-C ↔ USB cable.  &lt;br /&gt;
  See the '''Serial connection''' section in the Ettus manual: [https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
# Change the static IP to a DHCP-assigned IP.  &lt;br /&gt;
  See the '''Network interfaces''' section: [https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updating the Filesystem ===&lt;br /&gt;
For full details, refer to the Ettus manual section: [https://files.ettus.com/manual/page_usrp_x4xx.html Updating Filesystems].&lt;br /&gt;
&lt;br /&gt;
The easiest method is to perform the update directly on the X410 using the built-in &amp;lt;code&amp;gt;usrp_update_fs&amp;lt;/code&amp;gt; utility:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Login to the USRP&lt;br /&gt;
ssh root@usrp_ip&lt;br /&gt;
&lt;br /&gt;
# Update filesystem to UHD 4.9&lt;br /&gt;
usrp_update_fs -t UHD-4.9&lt;br /&gt;
&lt;br /&gt;
# Or install the UHD master version&lt;br /&gt;
usrp_update_fs -t master&lt;br /&gt;
&lt;br /&gt;
# Reboot the USRP&lt;br /&gt;
reboot&lt;br /&gt;
&lt;br /&gt;
# If the reboot works and the device is functional, commit the changes&lt;br /&gt;
mender commit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updating the FPGA Image ===&lt;br /&gt;
For details, see: [https://files.ettus.com/manual/page_usrp_x4xx.html Updating the FPGA].&lt;br /&gt;
&lt;br /&gt;
You can verify and benchmark the X410 performance using the UHD example utility:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./benchmark_rate --args=&amp;quot;mgmt_addr=10.89.12.177,addr=192.168.10.2,\&lt;br /&gt;
second_addr=192.168.11.2,clock_source=internal,time_source=internal&amp;quot; \&lt;br /&gt;
--rx_rate 200e6 --channels 0 --rx_channels 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing Spectrum Sensing Example on x86 Architecture ==&lt;br /&gt;
&lt;br /&gt;
This section provides a detailed procedure for installing and running the Spectrum Sensing example on an x86 architecture.  &lt;br /&gt;
The '''spectrum_sensing''' folder within the NI-RF Data Recording API repository provides a ready-to-run demonstration of live RF spectrum sensing using a single receiver (e.g., USRP&amp;amp;nbsp;B206/X410) connected to an x86 host.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setup Instructions ===&lt;br /&gt;
# '''Clone the repository:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ni/ni-rf-data-recording-api.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Clone the YOLOv5 repository:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ultralytics/yolov5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Install dependencies for NI RF Data Recording API:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ni-rf-data-recording-api&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Package Dependencies ===&lt;br /&gt;
The following Python packages are required to run the spectrum sensing pipeline using the NI-RF Data Recording API.  &lt;br /&gt;
&lt;br /&gt;
* '''termcolor''' – Prints colored text in terminal for log readability.  &lt;br /&gt;
* '''numpy&amp;amp;nbsp;(&amp;gt;=1.23.5,&amp;amp;nbsp;&amp;lt;2.0.0)''' – Core numerical library for IQ array operations, FFTs, and signal processing.  &lt;br /&gt;
* '''scipy&amp;amp;nbsp;(&amp;gt;=1.4.1)''' – Used for filtering, spectral analysis, and mathematical routines.  &lt;br /&gt;
* '''matplotlib&amp;amp;nbsp;(&amp;gt;=3.3)''' – Generates spectrum plots, spectrograms, and PSD visualizations.  &lt;br /&gt;
* '''pandas&amp;amp;nbsp;(&amp;gt;=1.1.4)''' – Handles RF metadata and experiment logs.  &lt;br /&gt;
* '''pyyaml&amp;amp;nbsp;(&amp;gt;=5.3.1)''' – Loads YAML configuration files for USRP setup parameters.  &lt;br /&gt;
* '''nptdms''' – Enables reading and writing NI TDMS waveform files.  &lt;br /&gt;
* '''sigmf''' – Implements Signal Metadata Format for storing IQ recordings with metadata.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# '''Install dependencies for the example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Advanced Python Dependencies for Spectrum Sensing and ML Integration ===&lt;br /&gt;
These additional libraries enable advanced visualization, AI/ML inference, and web dashboard integration.&lt;br /&gt;
&lt;br /&gt;
* '''dash''' – Web-based dashboard framework for real-time spectrum visualization.  &lt;br /&gt;
* '''dash-daq''' – Adds instrumentation UI components for live control.  &lt;br /&gt;
* '''dash-bootstrap-components''' – Provides responsive Bootstrap layouts for Dash apps.  &lt;br /&gt;
* '''pillow&amp;amp;nbsp;(&amp;gt;=10.3.0)''' – Handles image saving and processing of spectrograms.  &lt;br /&gt;
* '''torch&amp;amp;nbsp;(&amp;gt;=1.8.0)''' – PyTorch deep learning framework for inference/training.  &lt;br /&gt;
* '''torchvision&amp;amp;nbsp;(&amp;gt;=0.9.0)''' – Vision utilities for preprocessing spectrograms.  &lt;br /&gt;
* '''ultralytics&amp;amp;nbsp;(&amp;gt;=8.2.34)''' – YOLOv8 utilities for signal classification.  &lt;br /&gt;
* '''gitpython&amp;amp;nbsp;(&amp;gt;=3.1.30)''' – Enables automated Git repository handling.  &lt;br /&gt;
* '''opencv-python&amp;amp;nbsp;(&amp;gt;=4.1.1)''' – Performs spectrogram image manipulation.  &lt;br /&gt;
* '''seaborn&amp;amp;nbsp;(&amp;gt;=0.11.0)''' – Provides data visualization and heatmaps.  &lt;br /&gt;
* '''tqdm&amp;amp;nbsp;(&amp;gt;=4.66.3)''' – Adds progress bars during capture or inference.  &lt;br /&gt;
* '''requests&amp;amp;nbsp;(&amp;gt;=2.32.2)''' – Handles model downloads and HTTP requests.  &lt;br /&gt;
* '''setuptools&amp;amp;nbsp;(&amp;gt;=70.0.0,&amp;amp;nbsp;&amp;lt;80.9.0)''' – Ensures consistent Python packaging.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Example ===&lt;br /&gt;
The configuration files are located at:  &lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/config/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They define:&lt;br /&gt;
* RF parameters: center frequency, gain, bandwidth, sample rate  &lt;br /&gt;
* Device type (e.g., B206) and connection interface  &lt;br /&gt;
* Capture duration and number of records  &lt;br /&gt;
* Output directory and naming conventions  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Key Configuration Parameters ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Description !! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rx_recorded_data_path&amp;lt;/code&amp;gt; || Path to store captured IQ data || &amp;lt;code&amp;gt;datasets/records/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nrecords&amp;lt;/code&amp;gt; || Number of snapshots to capture || &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;freq&amp;lt;/code&amp;gt; || Center frequency (Hz) || &amp;lt;code&amp;gt;3.6e9&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rate&amp;lt;/code&amp;gt; || IQ sample rate (Sps) || &amp;lt;code&amp;gt;50e6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bandwidth&amp;lt;/code&amp;gt; || Analog bandwidth || &amp;lt;code&amp;gt;20e6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;gain&amp;lt;/code&amp;gt; || RX gain (dB) || &amp;lt;code&amp;gt;40&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; || Recording duration (s) || &amp;lt;code&amp;gt;0.04&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rate_source&amp;lt;/code&amp;gt; || Sample rate mode || &amp;lt;code&amp;gt;user_defined&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;captured_data_file_name&amp;lt;/code&amp;gt; || Prefix for SigMF files || &amp;lt;code&amp;gt;rx-waveform-td-rec-&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;antenna&amp;lt;/code&amp;gt; || Antenna port || &amp;lt;code&amp;gt;TX/RX&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;clock_reference&amp;lt;/code&amp;gt; || Reference clock || &amp;lt;code&amp;gt;internal&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Execution ===&lt;br /&gt;
(a) Run the UI application:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
python spectrum_sensing.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launching, you’ll see:&lt;br /&gt;
&amp;lt;code&amp;gt;Dash is running on http://127.0.0.1:8050/&amp;lt;/code&amp;gt;  &lt;br /&gt;
Open this link in your browser to access the dashboard.&lt;br /&gt;
&lt;br /&gt;
* Load a configuration file from the dashboard.&lt;br /&gt;
* Click '''Start''' to begin sensing.&lt;br /&gt;
* IQ samples will be captured and saved in SigMF format at:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Dashboard.png|thumb|800px|center|AI-based spectrum sensing dashboard using NI USRP SDRs and NI RF Data Recording API]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' AI-based spectrum sensing system using NI USRP SDRs, the NI RF Data Recording API, and a web-based control dashboard.&lt;br /&gt;
&lt;br /&gt;
=== System Workflow Description ===&lt;br /&gt;
The figure above shows the end-to-end architecture for AI-driven spectrum sensing with NI USRPs.&lt;br /&gt;
&lt;br /&gt;
* '''TX Configuration:''' User selects the waveform to transmit; it can be sent over-the-air or via RF cable.  &lt;br /&gt;
* '''Start/Stop Control:''' Clicking '''Start''' launches the sensing and recording pipeline with live indicators for SDR initialization and capture status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(b) Run the inference script:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
python inference.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The inference script processes IQ recordings stored in:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It converts each dataset into a spectrogram image saved at:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The spectrograms are passed to a pre-trained '''YOLOv5''' model for signal classification.&lt;br /&gt;
&lt;br /&gt;
[[File:inference_running.png|thumb|800px|center|YOLOv5-based live inference detecting a 5G NR signal with 96% confidence]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Real-time inference output showing successful detection of a 5G&amp;amp;nbsp;NR waveform using a pre-trained YOLOv5 model.&lt;br /&gt;
&lt;br /&gt;
=== Live Inference Visualization ===&lt;br /&gt;
After IQ samples are captured and stored, &amp;lt;code&amp;gt;inference.py&amp;lt;/code&amp;gt; generates spectrograms and classifies signals.  &lt;br /&gt;
In the shown example, the YOLOv5 model identifies a 5G&amp;amp;nbsp;NR waveform (&amp;lt;code&amp;gt;5GNR&amp;lt;/code&amp;gt;) with a confidence score of '''0.96'''.  &lt;br /&gt;
Detected signals show high classification accuracy and clear time-frequency boundaries.&lt;br /&gt;
&lt;br /&gt;
== Spectrum Sensing Application with NI USRP and NVIDIA Jetson ==&lt;br /&gt;
&lt;br /&gt;
This section summarizes the official documentation for running the &amp;lt;code&amp;gt;spectrum_sensing&amp;lt;/code&amp;gt; application using NI USRP SDR hardware on NVIDIA Jetson platforms.&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
The application demonstrates real-time spectrum sensing by interfacing a NI USRP SDR (e.g., B206) with an NVIDIA Jetson device over USB&amp;amp;nbsp;3.0. The Jetson hosts the NI RF Data Recording API and executes the entire data acquisition pipeline — including RF configuration, signal capture, visualization, and data formatting into SigMF files.  &lt;br /&gt;
Because Jetson devices are ARM-based, a Jetson-specific PyTorch package is available from NVIDIA, while TorchVision must be built from source.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PyTorch Installation ===&lt;br /&gt;
# Install required dependencies:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install python3-pip libopenblas-base libopenmpi-dev&lt;br /&gt;
sudo pip3 install --upgrade pip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# For Python&amp;amp;nbsp;3.10 and JetPack&amp;amp;nbsp;6.2.1, install PyTorch&amp;amp;nbsp;2.5:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://developer.download.nvidia.com/compute/redist/jp/v61/pytorch/torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl&lt;br /&gt;
pip3 install torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Fix libcusparse-related errors (if any):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/tmp_cusparselt &amp;amp;&amp;amp; cd ~/tmp_cusparselt&lt;br /&gt;
wget https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-aarch64/libcusparse_lt-linux-aarch64-0.7.0.0-archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
tar xf *.tar.xz&lt;br /&gt;
sudo cp -a libcusparse_lt-linux-aarch64-0.7.0.0-archive/include/* /usr/local/cuda/include/&lt;br /&gt;
sudo cp -a libcusparse_lt-linux-aarch64-0.7.0.0-archive/lib/* /usr/local/cuda/lib64/&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
cd ~ &amp;amp;&amp;amp; rm -rf ~/tmp_cusparselt&lt;br /&gt;
&lt;br /&gt;
# Verify installation&lt;br /&gt;
python3 -c &amp;quot;import torch; print(torch.__version__); print(torch.cuda.is_available())&amp;quot;&lt;br /&gt;
# Output should show:&lt;br /&gt;
# 2.5.0a0+872 and True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PyTorch Vision (torchvision) ===&lt;br /&gt;
# Install dependencies:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev \&lt;br /&gt;
libavcodec-dev libavformat-dev libswscale-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Clone the source repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone --branch v0.20.0 https://github.com/pytorch/vision.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Build and install:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd vision&lt;br /&gt;
export BUILD_VERSION=0.20.0&lt;br /&gt;
python3 setup.py build&lt;br /&gt;
python3 setup.py install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Virtual Environment (Optional) ===&lt;br /&gt;
To isolate the working environment from the system:&lt;br /&gt;
# Install &amp;lt;code&amp;gt;venv&amp;lt;/code&amp;gt; support:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python3.10-venv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Create and activate environment:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3.10 -m venv .venv --system-site-packages --prompt demo&lt;br /&gt;
source .venv/bin/activate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Requirements ===&lt;br /&gt;
# Install SigMF:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install sigmf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Install npTDMS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install npTDMS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Colored terminal output:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install colored termcolor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Dash and dashboard components:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install dash dash_daq dash_bootstrap_components&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# YOLOv5 pre-requirements:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install -U &amp;quot;gitpython&amp;gt;=3.1.30&amp;quot; &amp;quot;matplotlib&amp;gt;=3.3&amp;quot; &amp;quot;numpy&amp;gt;=1.23.5&amp;quot; \&lt;br /&gt;
&amp;quot;opencv-python&amp;gt;=4.1.1&amp;quot; &amp;quot;pillow&amp;gt;=10.3.0&amp;quot; psutil &amp;quot;PyYAML&amp;gt;=5.3.1&amp;quot; \&lt;br /&gt;
&amp;quot;requests&amp;gt;=2.32.2&amp;quot; &amp;quot;scipy&amp;gt;=1.4.1&amp;quot; &amp;quot;thop&amp;gt;=0.1.1&amp;quot; &amp;quot;tqdm&amp;gt;=4.66.3&amp;quot; \&lt;br /&gt;
&amp;quot;ultralytics&amp;gt;=8.2.34&amp;quot; &amp;quot;setuptools&amp;gt;=70.0.0&amp;quot; &amp;quot;seaborn&amp;gt;=0.11.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== YOLOv5 Model ===&lt;br /&gt;
The demo application uses the YOLOv5 image detection model from Ultralytics (AGPL-3.0 license).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ultralytics/yolov5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demo Code and Data Recording API ===&lt;br /&gt;
Clone the NI RF Data Recording API repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ni/ni-rf-data-recording-api.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After all dependencies are installed, the Spectrum Sensing use case can be executed on Jetson following the same procedure as described for the x86 system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Waveform Creation and Signal Recording Pipeline ==&lt;br /&gt;
&lt;br /&gt;
This section outlines the process for generating waveforms, capturing RF data using the NI-RF Data Recording API, and producing spectrogram images for machine learning applications.&lt;br /&gt;
&lt;br /&gt;
=== Waveform Repository ===&lt;br /&gt;
The &amp;lt;code&amp;gt;src/waveforms/&amp;lt;/code&amp;gt; directory contains all pre-generated test signals used with the NI RF Data Recording API.  &lt;br /&gt;
It includes four subfolders: '''5G&amp;amp;nbsp;NR''', '''LTE''', '''Wi-Fi''', and '''Radar'''.&lt;br /&gt;
&lt;br /&gt;
Each waveform consists of:&lt;br /&gt;
* '''IQ Data File''' (&amp;lt;code&amp;gt;.tdms&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt;) — contains complex baseband samples.  &lt;br /&gt;
* '''Configuration File''' (&amp;lt;code&amp;gt;.rfws&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.yaml&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;.csv&amp;lt;/code&amp;gt;) — describes waveform parameters such as bandwidth and sampling rate.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* LTE: &amp;lt;code&amp;gt;LTE_TDD_DL_20MHz_....tdms&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;...rfws&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Radar: &amp;lt;code&amp;gt;Radar_Waveform_BW_2M.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;Radar_Waveform_BW_2M.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:waveform_repository_small_dimensions.png|thumb|800px|center|Waveform repository flow]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Waveform repository structure showing pre-generated 5G&amp;amp;nbsp;NR, LTE, Wi-Fi, and Radar signals mapped through the Wireless Link Parameter Dictionary.&lt;br /&gt;
&lt;br /&gt;
=== Waveform Sources ===&lt;br /&gt;
* '''RFmx Waveform Creator:''' Used for generating 5G&amp;amp;nbsp;NR and LTE waveforms (&amp;lt;code&amp;gt;.tdms&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.rfws&amp;lt;/code&amp;gt;).  &lt;br /&gt;
* '''IEEE MATLAB Wi-Fi Generator:''' Used for Wi-Fi test signals (&amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.csv&amp;lt;/code&amp;gt;).  &lt;br /&gt;
* '''Simulated Radar Generator (MATLAB):''' Used for radar signals (&amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.yaml&amp;lt;/code&amp;gt;).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Usage in the API ===&lt;br /&gt;
During recording, JSON/YAML configuration files in &amp;lt;code&amp;gt;src/config/&amp;lt;/code&amp;gt; reference these waveform paths.  &lt;br /&gt;
The &amp;lt;code&amp;gt;wireless_link_parameter_map.yaml&amp;lt;/code&amp;gt; dictionary maps waveform configuration fields (e.g., bandwidth, sampling rate, standard) to the SigMF metadata format — ensuring standardized dataset descriptions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Recording IQ Data and Metadata via API ===&lt;br /&gt;
Once waveforms are prepared:&lt;br /&gt;
&lt;br /&gt;
# Edit the configuration file (YAML/JSON) with your TX/RX parameters such as frequency, gain, and waveform paths.  &lt;br /&gt;
# Run the recording:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 main_rf_data_recording_api.py --config path/to/your_config.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# The API maps parameters to SigMF metadata, controls USRP Tx/Rx via UHD, and writes:&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt; (binary IQ samples)&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt; (JSON metadata)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spectrogram Image Generation via Preprocessing ===&lt;br /&gt;
After dataset generation:&lt;br /&gt;
&lt;br /&gt;
* Run preprocessing scripts (e.g., &amp;lt;code&amp;gt;rf_data_pre_processing_plot.py&amp;lt;/code&amp;gt;) to visualize or convert SigMF recordings into time/frequency plots.  &lt;br /&gt;
* Generate and crop spectrograms, partitioning them into training and validation sets for ML workflows.  &lt;br /&gt;
* The structured image datasets form the foundation for AI-based spectrum classification and detection.&lt;br /&gt;
&lt;br /&gt;
This end-to-end pipeline — from waveform generation to SigMF-formatted capture and spectrogram creation — enables reproducible, metadata-rich dataset production for AI-driven spectrum sensing research.&lt;br /&gt;
&lt;br /&gt;
== How to use RF Data Recording API with user defined dataset? ==&lt;br /&gt;
To use the NI RF Data Recording API with a user-defined dataset for training and inference using YOLOv8, follow this multi-step process covering signal generation, data preprocessing, model training, and inference.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== SigMF Data and Metadata Generation ===&lt;br /&gt;
Once the transmission signal is configured, stream IQ samples and record them in '''SigMF''' format by running &amp;lt;code&amp;gt;data_recording.py&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Location of the script:&lt;br /&gt;
: &amp;lt;code&amp;gt;/ni-rf-data-recording-api/examples/spectrum_sensing&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SigMF outputs:&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;: Binary file with raw IQ samples.  &lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt;: JSON metadata (frequency, sample rate, gain, antenna, timestamps, etc.).&lt;br /&gt;
&lt;br /&gt;
The script uses your YAML/JSON control file for parameters (center frequency, sample rate, bandwidth, gain, capture duration, number of records).&lt;br /&gt;
&lt;br /&gt;
* Output directory:&lt;br /&gt;
: &amp;lt;code&amp;gt;/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These SigMF files become the primary dataset for later analysis, visualization, and ML-based classification (e.g., spectrogram-based YOLO).&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Spectrogram Generation and Dataset Preprocessing ===&lt;br /&gt;
Convert SigMF recordings into labeled spectrogram images using &amp;lt;code&amp;gt;pre-processing.py&amp;lt;/code&amp;gt;. It orchestrates:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;spectrogram_creator.py&amp;lt;/code&amp;gt; – Reads &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;, applies STFT, saves spectrogram images (e.g., in &amp;lt;code&amp;gt;datasets/images&amp;lt;/code&amp;gt;).&lt;br /&gt;
# &amp;lt;code&amp;gt;image_cropper.py&amp;lt;/code&amp;gt; – Removes non-signal plot artifacts (axes, labels, borders) to produce clean images for detection models.&lt;br /&gt;
# &amp;lt;code&amp;gt;dataset_partitioner.py&amp;lt;/code&amp;gt; – Splits dataset into train/val (e.g., 80/20) with balanced classes.&lt;br /&gt;
# &amp;lt;code&amp;gt;label_maker.py&amp;lt;/code&amp;gt; – Creates YOLO-compatible label files for each image in the format:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;amp;lt;class_id&amp;amp;gt; &amp;amp;lt;x_center&amp;amp;gt; &amp;amp;lt;y_center&amp;amp;gt; &amp;amp;lt;image_width&amp;amp;gt; &amp;amp;lt;image_height&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Resulting structure:'''&lt;br /&gt;
* Cleaned spectrogram images: &amp;lt;code&amp;gt;datasets/images&amp;lt;/code&amp;gt;  &lt;br /&gt;
* YOLO labels: &amp;lt;code&amp;gt;datasets/labels&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Splits: &amp;lt;code&amp;gt;datasets/train&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;datasets/val&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This pipeline yields a model-ready dataset for accurate training and inference.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Dataset Configuration: &amp;lt;code&amp;gt;data.yaml&amp;lt;/code&amp;gt; for YOLO Training ===&lt;br /&gt;
'''Fields:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;train&amp;lt;/code&amp;gt; – Path to training images  &lt;br /&gt;
* &amp;lt;code&amp;gt;val&amp;lt;/code&amp;gt; – Path to validation images  &lt;br /&gt;
* &amp;lt;code&amp;gt;nc&amp;lt;/code&amp;gt; – Number of classes  &lt;br /&gt;
* &amp;lt;code&amp;gt;names&amp;lt;/code&amp;gt; – List of class names in class-id order&lt;br /&gt;
&lt;br /&gt;
'''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
train: datasets/train/images&lt;br /&gt;
val: datasets/val/images&lt;br /&gt;
&lt;br /&gt;
nc: 3&lt;br /&gt;
names: ['5gnr', 'wifi', 'lte']&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use this file with YOLOv5/YOLOv8 training commands. Store it in the project root or inside the dataset folder.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Model Training Using YOLOv8 (Example) ===&lt;br /&gt;
&lt;br /&gt;
==== Cloning YOLOv8 from Source ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Clone Ultralytics YOLOv8&lt;br /&gt;
git clone https://github.com/ultralytics/ultralytics.git&lt;br /&gt;
cd ultralytics&lt;br /&gt;
&lt;br /&gt;
# (Optional) Virtual environment&lt;br /&gt;
python3 -m venv .venv&lt;br /&gt;
source .venv/bin/activate   # Linux/macOS&lt;br /&gt;
# .venv\Scripts\activate    # Windows PowerShell&lt;br /&gt;
&lt;br /&gt;
# Install in editable mode&lt;br /&gt;
pip install --upgrade pip&lt;br /&gt;
pip install -e .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yolo help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== YOLOv8 Training Command ====&lt;br /&gt;
Train the nano model on your spectrogram dataset:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yolo detect train \&lt;br /&gt;
  model=yolov8n.pt \&lt;br /&gt;
  data=/content/dataset/data.yaml \&lt;br /&gt;
  epochs=50 \&lt;br /&gt;
  imgsz=640 \&lt;br /&gt;
  batch=16 \&lt;br /&gt;
  project=burst_train \&lt;br /&gt;
  name=yolov8n_spectrogram&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter notes:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;model=yolov8n.pt&amp;lt;/code&amp;gt; – Base architecture (nano).  &lt;br /&gt;
* &amp;lt;code&amp;gt;data=...&amp;lt;/code&amp;gt; – Path to &amp;lt;code&amp;gt;data.yaml&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* &amp;lt;code&amp;gt;epochs=50&amp;lt;/code&amp;gt; – Training epochs.  &lt;br /&gt;
* &amp;lt;code&amp;gt;imgsz=640&amp;lt;/code&amp;gt; – Input resolution.  &lt;br /&gt;
* &amp;lt;code&amp;gt;batch=16&amp;lt;/code&amp;gt; – Batch size.  &lt;br /&gt;
* &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; – Output directories for logs/artifacts.&lt;br /&gt;
&lt;br /&gt;
'''Outputs:'''&lt;br /&gt;
: &amp;lt;code&amp;gt;burst_train/yolov8n_spectrogram&amp;lt;/code&amp;gt;  &lt;br /&gt;
(Weights, logs, confusion matrices, PR curves, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The NI RF Data Recording API provides a powerful and flexible framework for real-time spectrum sensing, dataset generation, and AI-driven signal classification across both x86 and embedded platforms such as NVIDIA Jetson.  &lt;br /&gt;
By leveraging standardized formats like SigMF and integrating deep learning models such as YOLOv8, the framework enables a complete end-to-end workflow—from RF signal acquisition and metadata tagging to spectrogram creation, training, and live inference.  &lt;br /&gt;
&lt;br /&gt;
This modular approach allows researchers and engineers to rapidly prototype, evaluate, and deploy intelligent wireless sensing systems that bridge the gap between traditional SDR experimentation and modern AI-based spectrum analytics.  &lt;br /&gt;
The same unified methodology can be extended to multi-band sensing, interference detection, cognitive radio, and 6G spectrum intelligence research, ensuring scalability and reproducibility in both laboratory and field environments.&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=File:waveform_repository_small_dimensions.png&amp;diff=6320</id>
		<title>File:waveform repository small dimensions.png</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=File:waveform_repository_small_dimensions.png&amp;diff=6320"/>
				<updated>2025-11-05T12:32:49Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=AI-Based_Spectrum_Sensing_with_Nvidia_Jetson_and_USRP&amp;diff=6319</id>
		<title>AI-Based Spectrum Sensing with Nvidia Jetson and USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=AI-Based_Spectrum_Sensing_with_Nvidia_Jetson_and_USRP&amp;diff=6319"/>
				<updated>2025-11-05T12:30:01Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: /* Key Configuration Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-811'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
This application note presents a complete framework for real-time spectrum sensing using NI Universal Serial Radio Peripheral (USRP) Software-Defined Radios (SDRs) and NVIDIA Jetson or standard x86 compute platforms. The framework is not limited to a single USRP model—the X410, X310, and B2xx series (e.g., B206) can all be used as transmitters or receivers depending on the deployment scenario. The solution leverages the NI-RF Data Recording API to enable scalable RF data acquisition, SigMF-compliant metadata tagging, and seamless integration with machine learning workflows.&lt;br /&gt;
&lt;br /&gt;
The document outlines three core usage scenarios:&lt;br /&gt;
&lt;br /&gt;
# x86-Based Development Workflow: Using a workstation or server-class x86 machine, paired with high-end USRPs such as the X410 or X310, the system supports wideband spectrum sensing (up to 400&amp;amp;nbsp;MHz instantaneous bandwidth per channel). This configuration is ideal for laboratory development, algorithm training, and high-throughput dataset generation.&lt;br /&gt;
# Jetson-Based Embedded Sensing (Primary Use Case): Using an NVIDIA Jetson platform as the host (e.g., AGX Orin) with a compact B206 SDR as receiver and an X410 as transmitter, the system delivers efficient edge inference with GPU acceleration. Although the B206 limits the instantaneous bandwidth to 56&amp;amp;nbsp;MHz, this configuration emphasizes portability, low power, and real-time embedded operation.&lt;br /&gt;
# User-Defined Dataset Integration: In addition to live spectrum sensing, the framework supports integration and generation of user-defined datasets. This functionality extends the applicability of the system beyond real-time capture, enabling flexible experimentation, reproducibility, and seamless AI/ML dataset preparation. Two complementary capabilities are supported:&lt;br /&gt;
## SigMF Dataset Recording&lt;br /&gt;
##* All captured RF data is stored in the Signal Metadata Format (SigMF).&lt;br /&gt;
##* SigMF pairs raw IQ samples (&amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;) with a corresponding metadata file (&amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt;) in JSON format.&lt;br /&gt;
##* Metadata describes acquisition parameters such as frequency, bandwidth, gain, device type, timestamps, and scenario context.&lt;br /&gt;
##* Being human-readable and portable, SigMF datasets can be used across a wide range of software environments, making them ideal for wireless research, spectrum monitoring, AI/ML training for 6G, and regulatory validation.&lt;br /&gt;
##* Example: A spectrum sensing session at 3.5&amp;amp;nbsp;GHz, 20&amp;amp;nbsp;MHz bandwidth, and 10-second duration will result in a SigMF-compliant dataset ready for further processing or ML-based classification.&lt;br /&gt;
## Continuous Waveform Playback with User-Defined Files&lt;br /&gt;
##* The platform supports continuous transmission and replay of user-defined waveforms in TDMS or MATLAB (.mat) formats.&lt;br /&gt;
##* This allows testing with standard-compliant signals such as 5G NR, LTE, Radar, or Wi-Fi, or custom-designed waveforms.&lt;br /&gt;
##* By replaying predefined waveforms, researchers can benchmark algorithms, validate coexistence scenarios, and reproduce experiments consistently across testbeds.&lt;br /&gt;
##* Example: A MATLAB-generated LTE downlink frame can be continuously transmitted via an X410 while a B206 or X310 records the received signal in SigMF format for classification.&lt;br /&gt;
&lt;br /&gt;
Together, these capabilities ensure that the NI-RF Data Recording API can handle both dataset creation (SigMF-based recording) and waveform-driven experimentation (TDMS/MAT playback), thereby covering the entire pipeline from signal generation to ML-ready dataset production.&lt;br /&gt;
&lt;br /&gt;
By combining NI's reliable SDR hardware with NVIDIA's efficient edge compute platforms and a unified data interface, this solution supports a wide range of spectrum intelligence applications—from interference detection and dynamic spectrum access to embedded RF analytics. The methodology enables scalable deployment from lab to field, supporting real-time insights and long-term data collection in a streamlined, modular pipeline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USRP B206 Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File: USRP-b206_mini_01.jpg|thumb|center|400px|NI USRP B206 Software Defined Radio]]&lt;br /&gt;
&lt;br /&gt;
The USRP B206 is a compact, low-cost SDR developed by NI / Ettus Research. It supports full-duplex operation with one transmit and one receive channel, making it ideal for a variety of wireless communication and sensing applications. The B206 covers a wide RF frequency range from 70&amp;amp;nbsp;MHz to 6&amp;amp;nbsp;GHz and supports up to 56&amp;amp;nbsp;MHz of instantaneous bandwidth. This makes it suitable for applications such as spectrum sensing, dynamic spectrum access, and cognitive radio.&lt;br /&gt;
&lt;br /&gt;
The device connects to a host system via a high-speed USB&amp;amp;nbsp;3.0 interface, which enables data rates sufficient for wideband real-time signal acquisition and transmission. It also supports USB&amp;amp;nbsp;2.0 with reduced performance. The B206 includes a Xilinx Spartan-6 FPGA for onboard signal processing and is powered either through USB or an external DC supply, the latter being preferred for optimal RF performance.&lt;br /&gt;
&lt;br /&gt;
The USRP B206 is compatible with both x86 and ARM-based hosts, including embedded platforms like the NVIDIA Jetson series. This enables portable and energy-efficient deployment of spectrum sensing pipelines at the network edge. It is fully supported by the open-source UHD and integrates with popular SDR development tools such as GNU Radio, MATLAB, and LabVIEW.&lt;br /&gt;
&lt;br /&gt;
Typical use cases for the B206 include real-time spectrum monitoring, wireless signal classification using machine learning, prototyping of 4G/5G systems, and SDR education and training. Its compact size and flexible software support make it an excellent choice for both laboratory research and embedded field deployments.&lt;br /&gt;
&lt;br /&gt;
'''Key Features of the USRP B206:'''&lt;br /&gt;
* RF Capabilities: 1 TX, 1 RX, independently tunable, RF transceiver, 70&amp;amp;nbsp;MHz to 6&amp;amp;nbsp;GHz, up to 56&amp;amp;nbsp;MHz bandwidth&lt;br /&gt;
* Programmable Logic: FPGA: Xilinx Spartan-6 XC6SLX150&lt;br /&gt;
* Software: UHD 4.9 or later, GNU Radio, C/C++ and Python&lt;br /&gt;
* Synchronization: REF (external 10&amp;amp;nbsp;MHz or PPS reference)&lt;br /&gt;
* Digital Interfaces: USB&amp;amp;nbsp;3.0, GPIO (8 I/O lines with 3.3&amp;amp;nbsp;V I/O voltage), and JTAG&lt;br /&gt;
* Power, form factor: 5&amp;amp;nbsp;V&amp;amp;nbsp;DC, 0.9&amp;amp;nbsp;A maximum; Board-only: 84.3&amp;amp;nbsp;mm × 51.0&amp;amp;nbsp;mm × 8.7&amp;amp;nbsp;mm; Enclosed: 84.9&amp;amp;nbsp;mm × 55.7&amp;amp;nbsp;mm × 19.8&amp;amp;nbsp;mm&lt;br /&gt;
&lt;br /&gt;
== NI-RF Data Recording API Overview ==&lt;br /&gt;
&lt;br /&gt;
The '''[https://github.com/ni/ni-rf-data-recording-api/blob/main/README.md NI-RF Data Recording API]''' is an open-source, Python-based framework developed by National Instruments (NI) in collaboration with the Genesys Lab at Northeastern University. It is designed to streamline RF data collection using NI USRP SDRs, with support for structured metadata via the '''[https://github.com/sigmf/SigMF Signal Metadata Format (SigMF)]'''.&lt;br /&gt;
&lt;br /&gt;
=== Purpose and Scope ===&lt;br /&gt;
This API enables efficient recording, labeling, and replay of real-world RF signals. It is particularly suited for generating datasets used in AI/ML workflows, wireless research, and spectrum monitoring. The framework abstracts low-level UHD interactions, allowing users to define RF parameters through JSON or YAML configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Key Features ===&lt;br /&gt;
* Support for both signal transmission and reception using NI USRP hardware.&lt;br /&gt;
* Native recording in SigMF format, capturing both IQ samples and rich metadata.&lt;br /&gt;
* Python-based, modular architecture supporting custom extensions and automation.&lt;br /&gt;
* Multi-SDR support via coordinated configuration files.&lt;br /&gt;
* Sample waveform libraries included (e.g., LTE, NR, radar, Wi-Fi) in TDMS/MAT formats.&lt;br /&gt;
* Utility scripts for standalone use: transmit, receive, replay, or continuous capture.&lt;br /&gt;
&lt;br /&gt;
=== System Requirements ===&lt;br /&gt;
The API has been validated on Ubuntu&amp;amp;nbsp;22.04 systems with the following dependencies:&lt;br /&gt;
* At least one compatible NI USRP device (e.g., B206, X310, X410).&lt;br /&gt;
* Installed UHD drivers with Python bindings.&lt;br /&gt;
* Python&amp;amp;nbsp;3.x and required libraries (e.g., NumPy, PyYAML).&lt;br /&gt;
* Optional Docker environment for containerized deployment.&lt;br /&gt;
&lt;br /&gt;
=== Relevance to Our Use Cases ===&lt;br /&gt;
In this application note, we explore three deployment scenarios of the NI-RF Data Recording API:&lt;br /&gt;
&lt;br /&gt;
# x86-based Spectrum Sensing: Using the API on a desktop or server-class system, the USRP&amp;amp;nbsp;B206 is configured to perform spectrum capture, and the data is saved in SigMF format. This setup is optimal for high-throughput and lab-based development environments.&lt;br /&gt;
# Embedded Jetson Platform: The API is deployed on an NVIDIA Jetson device interfaced with the USRP&amp;amp;nbsp;B206 over USB&amp;amp;nbsp;3.0. This enables compact, power-efficient, and real-time spectrum sensing at the edge. Onboard GPU resources are leveraged for FFT computation and ML inference.&lt;br /&gt;
# User-Defined Dataset Integration: The API provides flexible support for user-defined datasets through two complementary capabilities:&lt;br /&gt;
## Importing Pre-Generated Data: Users can seamlessly import and tag custom IQ recordings (e.g., SigMF-compliant files or previously captured spectrum data) into the repository. This enables integration of external datasets for benchmarking, anomaly detection, or reproducible research.&lt;br /&gt;
## Data Lake Storage for AI/ML Pipelines: All captured and imported datasets can be stored in a structured data lake, significantly simplifying automated dataset selection, management, and preprocessing. This facilitates streamlined workflows for AI/ML model design, training, and validation in spectrum sensing and 6G wireless research.&lt;br /&gt;
&lt;br /&gt;
The NI-RF Data Recording API provides a flexible, hardware-agnostic foundation for both live RF capture and offline dataset handling, making it central to spectrum intelligence and edge-aware signal processing workflows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference Architecture for Spectrum Sensing ==&lt;br /&gt;
&lt;br /&gt;
To support flexible and scalable RF data collection workflows, we propose a dual-mode reference architecture that demonstrates spectrum sensing using NI USRP hardware with two compute platforms: a high-performance x86 host and an embedded NVIDIA Jetson device. Both configurations utilize the NI-RF Data Recording API to capture, store, and manage RF data in SigMF format. The hardware setup supports real-time signal acquisition, tagging, and streaming for downstream machine learning or signal intelligence tasks.&lt;br /&gt;
&lt;br /&gt;
=== x86-Based High-Performance Architecture ===&lt;br /&gt;
&lt;br /&gt;
[[File: x86.png|thumb|center|900px|x86-based spectrum sensing architecture using NI USRP B206 and X410]]&lt;br /&gt;
&lt;br /&gt;
In this high-performance lab-based deployment, a desktop-class x86 host system is used. The USRP&amp;amp;nbsp;X410 (or alternatively the X310) serves as the receiver, connected to the workstation via a 10&amp;amp;nbsp;GbE Ethernet interface to support high-throughput data streaming. The transmitter is also an NI USRP&amp;amp;nbsp;X410, connected through a 10&amp;amp;nbsp;GbE link via a network switch. A 30&amp;amp;nbsp;dB attenuator is inserted between the TX and RX paths to protect the RF front-end from saturation during close-proximity transmission. &lt;br /&gt;
&lt;br /&gt;
This configuration demonstrates the full high-performance capability of the platform, enabling wideband spectrum sensing and scalable data capture.&lt;br /&gt;
&lt;br /&gt;
Host System Specifications:&lt;br /&gt;
* Operating System: Ubuntu&amp;amp;nbsp;22.04  &lt;br /&gt;
* UHD Compatibility: The NI-RF Data Recording API supports UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.2. Most devices such as the X410 or X310 work with older versions, but the B206 requires UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.9.  &lt;br /&gt;
* Processor: Intel&amp;amp;nbsp;Xeon&amp;amp;nbsp;w7-2495X (24&amp;amp;nbsp;cores, 2.5&amp;amp;nbsp;GHz)&lt;br /&gt;
&lt;br /&gt;
This setup is suited for '''high-throughput spectrum recording, algorithm development, and dataset generation''' in a lab environment. It offers large storage capacity, stable power, and CPU-intensive post-processing capabilities.&lt;br /&gt;
&lt;br /&gt;
=== Jetson-Based Embedded Architecture ===&lt;br /&gt;
&lt;br /&gt;
[[File:SS_with_x86.png|thumb|center|900px|Jetson-based spectrum sensing architecture using NI USRP B2x0 and X410]]&lt;br /&gt;
&lt;br /&gt;
In this configuration, an NVIDIA Jetson module serves as the edge processing unit. The Jetson connects to a USRP&amp;amp;nbsp;B2x0 (e.g., B206) over a USB&amp;amp;nbsp;3.0 interface, acting as the spectrum sensor (receiver). A USRP&amp;amp;nbsp;X410 acts as the transmitter, linked via a LAN switch. A 30&amp;amp;nbsp;dB attenuator is used between the TX and RX paths to prevent RF front-end saturation during close-proximity transmission.&lt;br /&gt;
&lt;br /&gt;
The Jetson executes the RF data acquisition pipeline and leverages onboard GPU resources to perform high-speed FFTs, signal classification, and real-time metadata tagging. A display, keyboard, and mouse connect directly for standalone operation.&lt;br /&gt;
&lt;br /&gt;
'Jetson System Specifications:&lt;br /&gt;
* Operating System: Ubuntu&amp;amp;nbsp;22.04 with JetPack&amp;amp;nbsp;6.2.1  &lt;br /&gt;
* UHD Version: 4.9  &lt;br /&gt;
* Processor: NVIDIA&amp;amp;nbsp;Jetson&amp;amp;nbsp;AGX&amp;amp;nbsp;Orin&amp;amp;nbsp;64&amp;amp;nbsp;GB  &lt;br /&gt;
&lt;br /&gt;
This configuration is ideal for low-power, field-deployable sensing nodes where edge inference, minimal latency, and portability are required. The NI-RF Data Recording API runs natively on ARM-based Jetson, ensuring consistent data acquisition across architectures.&lt;br /&gt;
&lt;br /&gt;
=== Common Features Across Architectures ===&lt;br /&gt;
Both architectures support:&lt;br /&gt;
* Real-time IQ sample recording and metadata tagging using NI-RF Data Recording API  &lt;br /&gt;
* Integration with SigMF-compliant datasets  &lt;br /&gt;
* Wideband RF capture across 70&amp;amp;nbsp;MHz–6&amp;amp;nbsp;GHz (with B206)  &lt;br /&gt;
* Configurable gain, center frequency, bandwidth, and LO offsets via JSON/YAML files  &lt;br /&gt;
&lt;br /&gt;
The dual-platform design allows researchers to prototype, validate, and deploy spectrum sensing pipelines in a variety of scenarios—from power-constrained edge sensing to scalable, cloud-connected research environments.&lt;br /&gt;
&lt;br /&gt;
== Bill of Materials ==&lt;br /&gt;
&lt;br /&gt;
This section lists the hardware and software components required to replicate the spectrum sensing setup described in the reference architectures.&lt;br /&gt;
&lt;br /&gt;
=== Jetson-Based Embedded Spectrum Sensing Setup ===&lt;br /&gt;
* '''NI USRP B206 SDR (Receiver)'''&lt;br /&gt;
** Frequency Range: 70&amp;amp;nbsp;MHz – 6&amp;amp;nbsp;GHz  &lt;br /&gt;
** Bandwidth: up to 56&amp;amp;nbsp;MHz  &lt;br /&gt;
** Interface: USB&amp;amp;nbsp;3.0  &lt;br /&gt;
&lt;br /&gt;
* '''NI USRP X410 SDR (Transmitter)'''&lt;br /&gt;
** Frequency Range: up to 7.2&amp;amp;nbsp;GHz  &lt;br /&gt;
** Bandwidth: up to 1&amp;amp;nbsp;GHz per channel  &lt;br /&gt;
** Interface: 10&amp;amp;nbsp;GbE (SFP+)  &lt;br /&gt;
&lt;br /&gt;
* '''NVIDIA Jetson AGX Orin 64&amp;amp;nbsp;GB Developer Kit (Edge Host)'''&lt;br /&gt;
** GPU: 2048-core Ampere GPU  &lt;br /&gt;
** Interfaces: USB&amp;amp;nbsp;3.0, 10&amp;amp;nbsp;Gb Ethernet  &lt;br /&gt;
** OS: Ubuntu&amp;amp;nbsp;22.04 (ARM64) with JetPack&amp;amp;nbsp;6.2.1  &lt;br /&gt;
&lt;br /&gt;
* '''Display and Input Devices'''&lt;br /&gt;
** Monitor (DisplayPort or HDMI)  &lt;br /&gt;
** USB Keyboard and Mouse  &lt;br /&gt;
&lt;br /&gt;
* '''30&amp;amp;nbsp;dB RF Attenuator'''&lt;br /&gt;
** Protects RX frontend during loopback or close-range transmission  &lt;br /&gt;
&lt;br /&gt;
* '''Network Switch (Gigabit)'''&lt;br /&gt;
** Routes LAN traffic between Jetson and X410  &lt;br /&gt;
&lt;br /&gt;
* '''RF Cables and Antennas or Dummy Load'''  &lt;br /&gt;
* '''Power Supply for USRP X410 and Jetson'''  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable (for Jetson–B206 interface)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== x86-Based Spectrum Sensing Setup ===&lt;br /&gt;
* '''NI USRP B206 SDR (Receiver)'''&lt;br /&gt;
* '''NI USRP X410 SDR (Transmitter)'''&lt;br /&gt;
* '''x86 Workstation or Server (Host PC)'''&lt;br /&gt;
** CPU: Intel&amp;amp;nbsp;Xeon&amp;amp;nbsp;w7-2495X, 24&amp;amp;nbsp;cores, 2.5&amp;amp;nbsp;GHz  &lt;br /&gt;
** OS: Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS  &lt;br /&gt;
** UHD: Version&amp;amp;nbsp;4.8 or newer  &lt;br /&gt;
** RAM: Minimum 32&amp;amp;nbsp;GB recommended  &lt;br /&gt;
** Storage: SSD for high-speed IQ data logging  &lt;br /&gt;
&lt;br /&gt;
* '''Display and Input Devices'''&lt;br /&gt;
** Monitor (DisplayPort or HDMI)  &lt;br /&gt;
** USB Keyboard and Mouse  &lt;br /&gt;
&lt;br /&gt;
* '''30&amp;amp;nbsp;dB RF Attenuator'''  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable (PC–B206 interface)'''  &lt;br /&gt;
* '''Ethernet Cables (PC and X410 to switch)'''  &lt;br /&gt;
* '''Network Switch (Gigabit or 10&amp;amp;nbsp;GbE)'''  &lt;br /&gt;
* '''Coaxial Cable (RF connection between TX and RX)'''&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements (Common) ===&lt;br /&gt;
* '''NI-RF Data Recording API'''&lt;br /&gt;
** GitHub: [https://github.com/ni/ni-rf-data-recording-api https://github.com/ni/ni-rf-data-recording-api]  &lt;br /&gt;
** Supports SigMF format, YAML/JSON configuration, UHD interface  &lt;br /&gt;
&lt;br /&gt;
* '''UHD (USRP Hardware Driver)'''&lt;br /&gt;
** Version&amp;amp;nbsp;4.9 recommended  &lt;br /&gt;
** Installed natively  &lt;br /&gt;
&lt;br /&gt;
* '''Python&amp;amp;nbsp;3.x Environment'''&lt;br /&gt;
** Required packages: numpy, pyyaml, sigmf, uhd, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
To implement the proposed spectrum sensing architecture, the following hardware components are required. The selected devices are chosen for their compatibility with the NI-RF Data Recording API, support for UHD drivers, and ability to perform high-speed RF acquisition and processing.&lt;br /&gt;
&lt;br /&gt;
=== NI USRP B206 (Receiver SDR) ===&lt;br /&gt;
The USRP&amp;amp;nbsp;B206 is a low-cost, full-duplex software-defined radio with wide RF coverage and USB&amp;amp;nbsp;3.0 connectivity, making it ideal for spectrum sensing tasks.&lt;br /&gt;
&lt;br /&gt;
* '''Frequency Range:''' 70&amp;amp;nbsp;MHz&amp;amp;nbsp;–&amp;amp;nbsp;6&amp;amp;nbsp;GHz  &lt;br /&gt;
* '''Bandwidth:''' Up to 56&amp;amp;nbsp;MHz  &lt;br /&gt;
* '''Interface:''' USB&amp;amp;nbsp;3.0  &lt;br /&gt;
* '''Form Factor:''' Compact, bus-powered or DC-powered  &lt;br /&gt;
* '''Purchase Link:''' [https://www.ettus.com/all-products/usrp-b200/ https://www.ettus.com/all-products/usrp-b200/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NI USRP X410 (Transmitter SDR) ===&lt;br /&gt;
The USRP&amp;amp;nbsp;X410 is a high-performance, 4-channel SDR capable of wideband signal transmission and reception. It supports 10&amp;amp;nbsp;GbE connectivity and real-time FPGA processing.&lt;br /&gt;
&lt;br /&gt;
* '''Frequency Range:''' Up to 7.2&amp;amp;nbsp;GHz  &lt;br /&gt;
* '''Bandwidth:''' Up to 1&amp;amp;nbsp;GHz per channel  &lt;br /&gt;
* '''Interface:''' 10&amp;amp;nbsp;GbE&amp;amp;nbsp;(SFP+), PCIe&amp;amp;nbsp;(optional)  &lt;br /&gt;
* '''FPGA:''' Xilinx Zynq Ultrascale+ RFSoC  &lt;br /&gt;
* '''Purchase Link:''' [https://www.ettus.com/all-products/usrp-x410/ https://www.ettus.com/all-products/usrp-x410/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NVIDIA Jetson AGX Orin 64&amp;amp;nbsp;GB Developer Kit (Edge Host) ===&lt;br /&gt;
The Jetson&amp;amp;nbsp;AGX&amp;amp;nbsp;Orin series provides a powerful embedded GPU platform for edge AI and RF signal processing.&lt;br /&gt;
&lt;br /&gt;
* '''GPU:''' NVIDIA Ampere architecture  &lt;br /&gt;
* '''RAM:''' 32&amp;amp;nbsp;GB&amp;amp;nbsp;/&amp;amp;nbsp;64&amp;amp;nbsp;GB LPDDR4/5  &lt;br /&gt;
* '''Connectivity:''' USB&amp;amp;nbsp;3.0, Ethernet, GPIO  &lt;br /&gt;
* '''OS Support:''' Ubuntu&amp;amp;nbsp;20.04&amp;amp;nbsp;/&amp;amp;nbsp;22.04&amp;amp;nbsp;(ARM64)  &lt;br /&gt;
* '''Purchase Link:''' [https://store.nvidia.com/jetson/store/ https://store.nvidia.com/jetson/store/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Network Switch (Gigabit or 10&amp;amp;nbsp;GbE) ===&lt;br /&gt;
A managed or unmanaged Ethernet switch is required to route LAN traffic between the Jetson or x86 host and the USRP&amp;amp;nbsp;X410.&lt;br /&gt;
&lt;br /&gt;
* '''Recommended:''' Netgear&amp;amp;nbsp;GS108, Mikrotik&amp;amp;nbsp;CRS305, or Cisco&amp;amp;nbsp;CBS350  &lt;br /&gt;
* '''Typical Ports:''' 8+ (Gigabit or 10&amp;amp;nbsp;GbE&amp;amp;nbsp;SFP+)  &lt;br /&gt;
* '''Example Link:''' [https://www.netgear.com/business/wired/switches/smart/gs108/ https://www.netgear.com/business/wired/switches/smart/gs108/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== High-Performance x86 Host (Optional for Lab Use) ===&lt;br /&gt;
An x86 workstation is recommended for development, high-throughput data collection, or as an alternative to Jetson in a lab environment.&lt;br /&gt;
&lt;br /&gt;
* '''Processor:''' Minimum specification of an 8-core CPU at 3&amp;amp;nbsp;GHz or higher (e.g., Intel&amp;amp;nbsp;Xeon or equivalent). Higher core counts (e.g., 24-core&amp;amp;nbsp;Xeon&amp;amp;nbsp;W7-2495X) can improve throughput and parallel data processing but are not mandatory.  &lt;br /&gt;
* '''RAM:''' 64&amp;amp;nbsp;GB or more  &lt;br /&gt;
* '''Storage:''' NVMe SSD for high-speed data logging  &lt;br /&gt;
* '''Operating System:''' Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS  &lt;br /&gt;
* '''Form Factor:''' Tower workstation or server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RF Accessories ===&lt;br /&gt;
* '''RF Coaxial Cables (SMA)'''  &lt;br /&gt;
* '''30&amp;amp;nbsp;dB Attenuator''' – Protects RX during close TX–RX loopback tests  &lt;br /&gt;
* '''Antennas''' (Wideband or band-specific)  &lt;br /&gt;
* '''Dummy Load''' (for isolated lab TX tests)  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable''' (for USRP&amp;amp;nbsp;B206)  &lt;br /&gt;
* '''Ethernet Cables''' (Cat&amp;amp;nbsp;6 or SFP+ DAC for X410)  &lt;br /&gt;
* '''Power Supplies:'''&lt;br /&gt;
** Jetson: 19&amp;amp;nbsp;V&amp;amp;nbsp;/&amp;amp;nbsp;4.74&amp;amp;nbsp;A adapter (usually included)  &lt;br /&gt;
** X410: External DC or rack supply per specifications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Requirements ==&lt;br /&gt;
&lt;br /&gt;
This section outlines the required software components for enabling spectrum sensing using the NI-RF Data Recording API with USRP&amp;amp;nbsp;B206/X410 and NVIDIA Jetson or x86 hosts. These tools are compatible across both embedded and desktop-class platforms and support real-time signal acquisition and metadata tagging in SigMF format.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu Operating System ===&lt;br /&gt;
* '''Version:''' Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS (Jetson) / Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS (x86 recommended)&lt;br /&gt;
* '''Download Link:''' [https://ubuntu.com/download https://ubuntu.com/download]&lt;br /&gt;
* '''Jetson OS Image:''' JetPack&amp;amp;nbsp;SDK includes Ubuntu and NVIDIA drivers  &lt;br /&gt;
* '''JetPack Link:''' [https://developer.nvidia.com/embedded/jetpack https://developer.nvidia.com/embedded/jetpack]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NI-RF Data Recording API ===&lt;br /&gt;
* '''Description:''' Open-source Python API developed by NI and the Genesys Lab (Northeastern University) for recording and labeling RF data in SigMF format using USRP devices.  &lt;br /&gt;
* '''Features:''' Configurable YAML/JSON setups, multi-SDR coordination, SigMF conversion, supports transmission/reception workflows.  &lt;br /&gt;
* '''Repository:''' [https://github.com/ni/ni-rf-data-recording-api https://github.com/ni/ni-rf-data-recording-api]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UHD – USRP Hardware Driver ===&lt;br /&gt;
* '''Description:''' The official driver and API library for controlling and interfacing with all NI/Ettus USRP SDR hardware. Required for low-level communication between Python and the hardware.  &lt;br /&gt;
* '''Version:''' The NI-RF Data Recording API requires a UHD version that supports the selected USRP device:  &lt;br /&gt;
** For X410 (and other X-Series): UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.2 (first stable release UHD&amp;amp;nbsp;4.4 recommended)  &lt;br /&gt;
** For B206: UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.9 required  &lt;br /&gt;
* '''Repository:''' [https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]  &lt;br /&gt;
* '''Install Guide:''' [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux UHD and GNU&amp;amp;nbsp;Radio Install Guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Environment ===&lt;br /&gt;
* '''Version:''' Python&amp;amp;nbsp;3.10.12 or newer  &lt;br /&gt;
* '''Required Packages:'''  &lt;br /&gt;
** &amp;lt;code&amp;gt;numpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyyaml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sigmf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uhd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scipy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matplotlib&amp;lt;/code&amp;gt;, etc.  &lt;br /&gt;
* '''Package Manager:''' &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;conda&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Recommended Setup:''' Create a Python virtual environment for isolation and reproducibility.  &lt;br /&gt;
* '''Download Link:''' [https://www.python.org/ https://www.python.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SigMF Library (Python) ===&lt;br /&gt;
* '''Description:''' Used for generating and parsing metadata in the Signal Metadata Format (SigMF), enabling dataset interoperability and ML dataset labeling.  &lt;br /&gt;
* '''Supported Version:''' Validated with '''SigMF&amp;amp;nbsp;1.0.0''' (later versions such as&amp;amp;nbsp;1.1.x or&amp;amp;nbsp;1.2.x introduce major changes and have not been validated).  &lt;br /&gt;
* '''Repository:''' [https://github.com/gnuradio/sigmf-numpy https://github.com/gnuradio/sigmf-numpy]  &lt;br /&gt;
* '''Installation Command:''' &amp;lt;code&amp;gt;pip install sigmf==1.0.0&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Reference:''' For more details, see the [https://github.com/ni/ni-rf-data-recording-api/tree/main/docs NI RF Data Recording API Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the UHD Software ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. At the time of this writing, the recommended version is '''UHD&amp;amp;nbsp;4.9'''.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates.  &lt;br /&gt;
* For x86/64 Ubuntu systems with released UHD versions available, you may install via APT Debian packages.  &lt;br /&gt;
* For Jetson (ARM64) systems, UHD must be built from source since no binary packages are provided.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all required dependencies (Ubuntu&amp;amp;nbsp;22.04):&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If your system already has another UHD version installed, remove it first:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt remove libuhd* uhd-host&lt;br /&gt;
sudo rm -rf /usr/lib/uhd /usr/include/uhd /usr/local/lib/uhd /usr/local/include/uhd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install build dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y \&lt;br /&gt;
  cmake g++ libboost-all-dev libusb-1.0-0-dev \&lt;br /&gt;
  libuhd-dev python3 python3-mako python3-numpy \&lt;br /&gt;
  python3-requests python3-ruamel.yaml libfftw3-dev \&lt;br /&gt;
  libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake \&lt;br /&gt;
  qtbase5-dev-tools doxygen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone the UHD repository and check out version '''v4.9.0.0''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
cd uhd&lt;br /&gt;
git checkout v4.9.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build and install UHD:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd host&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
sudo usrp_images_downloader&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify the installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_usrp_probe&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details, see the official UHD GitHub page:  &lt;br /&gt;
[https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]&lt;br /&gt;
&lt;br /&gt;
[[File:fae8d810-08f0-4ae3-ab87-5b6a31eeaa66.png|thumb|400px|center|uhd_usrp_probe output for B206]]&lt;br /&gt;
[[File:5026560b-fc07-4f77-953c-c17f41acfccc.png|thumb|400px|center|uhd_find_devices output for N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Examples of UHD utilities used for USRP probing and device discovery.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post UHD Installation Tasks ===&lt;br /&gt;
# '''Download USRP images'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/uhd_images_downloader&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Add USB udev rule''' (can be limited to specific vendor/device IDs)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/udev/rules.d/99-usb.rules&lt;br /&gt;
# Add this line:&lt;br /&gt;
# SUBSYSTEM==&amp;quot;usb&amp;quot;,MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
sudo udevadm control --reload-rules&lt;br /&gt;
sudo udevadm trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Unplug and replug the USB device if it was already connected.&lt;br /&gt;
&lt;br /&gt;
# '''Enable Python UHD API visibility'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;/usr/local/lib/python3.10/site-packages&amp;quot; | \&lt;br /&gt;
sudo tee /usr/local/lib/python3.10/dist-packages/local-site-packages.pth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UHD Installation Verification ===&lt;br /&gt;
# '''Find connected USRP devices'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Run throughput benchmark on the B2x0 device'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/lib/uhd/examples/benchmark_rate --args &amp;quot;type=b200&amp;quot; --rx_rate 10e6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Run Python throughput benchmark'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3.10 /usr/local/lib/uhd/examples/python/benchmark_rate.py --args &amp;quot;type=b200&amp;quot; --rx_rate 10e6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the USRP X410 Radio ==&lt;br /&gt;
&lt;br /&gt;
For detailed documentation, see the official Ettus manual:  &lt;br /&gt;
[https://files.ettus.com/manual/page_usrp_x4xx.html https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Connecting to the X410 ===&lt;br /&gt;
You can connect to the USRP X410 using either of the following interfaces:&lt;br /&gt;
* Ethernet (RJ45)&lt;br /&gt;
* USB-C JTAG Console&lt;br /&gt;
&lt;br /&gt;
If you cannot connect to the X410 (e.g., because it has a static IP address):&lt;br /&gt;
&lt;br /&gt;
# Connect the USRP to your PC using a USB-C ↔ USB cable.  &lt;br /&gt;
  See the '''Serial connection''' section in the Ettus manual: [https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
# Change the static IP to a DHCP-assigned IP.  &lt;br /&gt;
  See the '''Network interfaces''' section: [https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updating the Filesystem ===&lt;br /&gt;
For full details, refer to the Ettus manual section: [https://files.ettus.com/manual/page_usrp_x4xx.html Updating Filesystems].&lt;br /&gt;
&lt;br /&gt;
The easiest method is to perform the update directly on the X410 using the built-in &amp;lt;code&amp;gt;usrp_update_fs&amp;lt;/code&amp;gt; utility:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Login to the USRP&lt;br /&gt;
ssh root@usrp_ip&lt;br /&gt;
&lt;br /&gt;
# Update filesystem to UHD 4.9&lt;br /&gt;
usrp_update_fs -t UHD-4.9&lt;br /&gt;
&lt;br /&gt;
# Or install the UHD master version&lt;br /&gt;
usrp_update_fs -t master&lt;br /&gt;
&lt;br /&gt;
# Reboot the USRP&lt;br /&gt;
reboot&lt;br /&gt;
&lt;br /&gt;
# If the reboot works and the device is functional, commit the changes&lt;br /&gt;
mender commit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updating the FPGA Image ===&lt;br /&gt;
For details, see: [https://files.ettus.com/manual/page_usrp_x4xx.html Updating the FPGA].&lt;br /&gt;
&lt;br /&gt;
You can verify and benchmark the X410 performance using the UHD example utility:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./benchmark_rate --args=&amp;quot;mgmt_addr=10.89.12.177,addr=192.168.10.2,\&lt;br /&gt;
second_addr=192.168.11.2,clock_source=internal,time_source=internal&amp;quot; \&lt;br /&gt;
--rx_rate 200e6 --channels 0 --rx_channels 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing Spectrum Sensing Example on x86 Architecture ==&lt;br /&gt;
&lt;br /&gt;
This section provides a detailed procedure for installing and running the Spectrum Sensing example on an x86 architecture.  &lt;br /&gt;
The '''spectrum_sensing''' folder within the NI-RF Data Recording API repository provides a ready-to-run demonstration of live RF spectrum sensing using a single receiver (e.g., USRP&amp;amp;nbsp;B206/X410) connected to an x86 host.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setup Instructions ===&lt;br /&gt;
# '''Clone the repository:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ni/ni-rf-data-recording-api.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Clone the YOLOv5 repository:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ultralytics/yolov5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Install dependencies for NI RF Data Recording API:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ni-rf-data-recording-api&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Package Dependencies ===&lt;br /&gt;
The following Python packages are required to run the spectrum sensing pipeline using the NI-RF Data Recording API.  &lt;br /&gt;
&lt;br /&gt;
* '''termcolor''' – Prints colored text in terminal for log readability.  &lt;br /&gt;
* '''numpy&amp;amp;nbsp;(&amp;gt;=1.23.5,&amp;amp;nbsp;&amp;lt;2.0.0)''' – Core numerical library for IQ array operations, FFTs, and signal processing.  &lt;br /&gt;
* '''scipy&amp;amp;nbsp;(&amp;gt;=1.4.1)''' – Used for filtering, spectral analysis, and mathematical routines.  &lt;br /&gt;
* '''matplotlib&amp;amp;nbsp;(&amp;gt;=3.3)''' – Generates spectrum plots, spectrograms, and PSD visualizations.  &lt;br /&gt;
* '''pandas&amp;amp;nbsp;(&amp;gt;=1.1.4)''' – Handles RF metadata and experiment logs.  &lt;br /&gt;
* '''pyyaml&amp;amp;nbsp;(&amp;gt;=5.3.1)''' – Loads YAML configuration files for USRP setup parameters.  &lt;br /&gt;
* '''nptdms''' – Enables reading and writing NI TDMS waveform files.  &lt;br /&gt;
* '''sigmf''' – Implements Signal Metadata Format for storing IQ recordings with metadata.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# '''Install dependencies for the example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Advanced Python Dependencies for Spectrum Sensing and ML Integration ===&lt;br /&gt;
These additional libraries enable advanced visualization, AI/ML inference, and web dashboard integration.&lt;br /&gt;
&lt;br /&gt;
* '''dash''' – Web-based dashboard framework for real-time spectrum visualization.  &lt;br /&gt;
* '''dash-daq''' – Adds instrumentation UI components for live control.  &lt;br /&gt;
* '''dash-bootstrap-components''' – Provides responsive Bootstrap layouts for Dash apps.  &lt;br /&gt;
* '''pillow&amp;amp;nbsp;(&amp;gt;=10.3.0)''' – Handles image saving and processing of spectrograms.  &lt;br /&gt;
* '''torch&amp;amp;nbsp;(&amp;gt;=1.8.0)''' – PyTorch deep learning framework for inference/training.  &lt;br /&gt;
* '''torchvision&amp;amp;nbsp;(&amp;gt;=0.9.0)''' – Vision utilities for preprocessing spectrograms.  &lt;br /&gt;
* '''ultralytics&amp;amp;nbsp;(&amp;gt;=8.2.34)''' – YOLOv8 utilities for signal classification.  &lt;br /&gt;
* '''gitpython&amp;amp;nbsp;(&amp;gt;=3.1.30)''' – Enables automated Git repository handling.  &lt;br /&gt;
* '''opencv-python&amp;amp;nbsp;(&amp;gt;=4.1.1)''' – Performs spectrogram image manipulation.  &lt;br /&gt;
* '''seaborn&amp;amp;nbsp;(&amp;gt;=0.11.0)''' – Provides data visualization and heatmaps.  &lt;br /&gt;
* '''tqdm&amp;amp;nbsp;(&amp;gt;=4.66.3)''' – Adds progress bars during capture or inference.  &lt;br /&gt;
* '''requests&amp;amp;nbsp;(&amp;gt;=2.32.2)''' – Handles model downloads and HTTP requests.  &lt;br /&gt;
* '''setuptools&amp;amp;nbsp;(&amp;gt;=70.0.0,&amp;amp;nbsp;&amp;lt;80.9.0)''' – Ensures consistent Python packaging.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Example ===&lt;br /&gt;
The configuration files are located at:  &lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/config/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They define:&lt;br /&gt;
* RF parameters: center frequency, gain, bandwidth, sample rate  &lt;br /&gt;
* Device type (e.g., B206) and connection interface  &lt;br /&gt;
* Capture duration and number of records  &lt;br /&gt;
* Output directory and naming conventions  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Key Configuration Parameters ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Description !! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rx_recorded_data_path&amp;lt;/code&amp;gt; || Path to store captured IQ data || &amp;lt;code&amp;gt;datasets/records/&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;nrecords&amp;lt;/code&amp;gt; || Number of snapshots to capture || &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;freq&amp;lt;/code&amp;gt; || Center frequency (Hz) || &amp;lt;code&amp;gt;3.6e9&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rate&amp;lt;/code&amp;gt; || IQ sample rate (Sps) || &amp;lt;code&amp;gt;50e6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bandwidth&amp;lt;/code&amp;gt; || Analog bandwidth || &amp;lt;code&amp;gt;20e6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;gain&amp;lt;/code&amp;gt; || RX gain (dB) || &amp;lt;code&amp;gt;40&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;duration&amp;lt;/code&amp;gt; || Recording duration (s) || &amp;lt;code&amp;gt;0.04&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rate_source&amp;lt;/code&amp;gt; || Sample rate mode || &amp;lt;code&amp;gt;user_defined&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;captured_data_file_name&amp;lt;/code&amp;gt; || Prefix for SigMF files || &amp;lt;code&amp;gt;rx-waveform-td-rec-&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;antenna&amp;lt;/code&amp;gt; || Antenna port || &amp;lt;code&amp;gt;TX/RX&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;clock_reference&amp;lt;/code&amp;gt; || Reference clock || &amp;lt;code&amp;gt;internal&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Execution ===&lt;br /&gt;
(a) Run the UI application:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
python spectrum_sensing.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launching, you’ll see:&lt;br /&gt;
&amp;lt;code&amp;gt;Dash is running on http://127.0.0.1:8050/&amp;lt;/code&amp;gt;  &lt;br /&gt;
Open this link in your browser to access the dashboard.&lt;br /&gt;
&lt;br /&gt;
* Load a configuration file from the dashboard.&lt;br /&gt;
* Click '''Start''' to begin sensing.&lt;br /&gt;
* IQ samples will be captured and saved in SigMF format at:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Dashboard.png|thumb|800px|center|AI-based spectrum sensing dashboard using NI USRP SDRs and NI RF Data Recording API]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' AI-based spectrum sensing system using NI USRP SDRs, the NI RF Data Recording API, and a web-based control dashboard.&lt;br /&gt;
&lt;br /&gt;
=== System Workflow Description ===&lt;br /&gt;
The figure above shows the end-to-end architecture for AI-driven spectrum sensing with NI USRPs.&lt;br /&gt;
&lt;br /&gt;
* '''TX Configuration:''' User selects the waveform to transmit; it can be sent over-the-air or via RF cable.  &lt;br /&gt;
* '''Start/Stop Control:''' Clicking '''Start''' launches the sensing and recording pipeline with live indicators for SDR initialization and capture status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(b) Run the inference script:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
python inference.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The inference script processes IQ recordings stored in:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It converts each dataset into a spectrogram image saved at:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The spectrograms are passed to a pre-trained '''YOLOv5''' model for signal classification.&lt;br /&gt;
&lt;br /&gt;
[[File:inference_running.png|thumb|800px|center|YOLOv5-based live inference detecting a 5G NR signal with 96% confidence]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Real-time inference output showing successful detection of a 5G&amp;amp;nbsp;NR waveform using a pre-trained YOLOv5 model.&lt;br /&gt;
&lt;br /&gt;
=== Live Inference Visualization ===&lt;br /&gt;
After IQ samples are captured and stored, &amp;lt;code&amp;gt;inference.py&amp;lt;/code&amp;gt; generates spectrograms and classifies signals.  &lt;br /&gt;
In the shown example, the YOLOv5 model identifies a 5G&amp;amp;nbsp;NR waveform (&amp;lt;code&amp;gt;5GNR&amp;lt;/code&amp;gt;) with a confidence score of '''0.96'''.  &lt;br /&gt;
Detected signals show high classification accuracy and clear time-frequency boundaries.&lt;br /&gt;
&lt;br /&gt;
== Spectrum Sensing Application with NI USRP and NVIDIA Jetson ==&lt;br /&gt;
&lt;br /&gt;
This section summarizes the official documentation for running the &amp;lt;code&amp;gt;spectrum_sensing&amp;lt;/code&amp;gt; application using NI USRP SDR hardware on NVIDIA Jetson platforms.&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
The application demonstrates real-time spectrum sensing by interfacing a NI USRP SDR (e.g., B206) with an NVIDIA Jetson device over USB&amp;amp;nbsp;3.0. The Jetson hosts the NI RF Data Recording API and executes the entire data acquisition pipeline — including RF configuration, signal capture, visualization, and data formatting into SigMF files.  &lt;br /&gt;
Because Jetson devices are ARM-based, a Jetson-specific PyTorch package is available from NVIDIA, while TorchVision must be built from source.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PyTorch Installation ===&lt;br /&gt;
# Install required dependencies:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install python3-pip libopenblas-base libopenmpi-dev&lt;br /&gt;
sudo pip3 install --upgrade pip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# For Python&amp;amp;nbsp;3.10 and JetPack&amp;amp;nbsp;6.2.1, install PyTorch&amp;amp;nbsp;2.5:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://developer.download.nvidia.com/compute/redist/jp/v61/pytorch/torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl&lt;br /&gt;
pip3 install torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Fix libcusparse-related errors (if any):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/tmp_cusparselt &amp;amp;&amp;amp; cd ~/tmp_cusparselt&lt;br /&gt;
wget https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-aarch64/libcusparse_lt-linux-aarch64-0.7.0.0-archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
tar xf *.tar.xz&lt;br /&gt;
sudo cp -a libcusparse_lt-linux-aarch64-0.7.0.0-archive/include/* /usr/local/cuda/include/&lt;br /&gt;
sudo cp -a libcusparse_lt-linux-aarch64-0.7.0.0-archive/lib/* /usr/local/cuda/lib64/&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
cd ~ &amp;amp;&amp;amp; rm -rf ~/tmp_cusparselt&lt;br /&gt;
&lt;br /&gt;
# Verify installation&lt;br /&gt;
python3 -c &amp;quot;import torch; print(torch.__version__); print(torch.cuda.is_available())&amp;quot;&lt;br /&gt;
# Output should show:&lt;br /&gt;
# 2.5.0a0+872 and True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PyTorch Vision (torchvision) ===&lt;br /&gt;
# Install dependencies:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev \&lt;br /&gt;
libavcodec-dev libavformat-dev libswscale-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Clone the source repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone --branch v0.20.0 https://github.com/pytorch/vision.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Build and install:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd vision&lt;br /&gt;
export BUILD_VERSION=0.20.0&lt;br /&gt;
python3 setup.py build&lt;br /&gt;
python3 setup.py install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Virtual Environment (Optional) ===&lt;br /&gt;
To isolate the working environment from the system:&lt;br /&gt;
# Install &amp;lt;code&amp;gt;venv&amp;lt;/code&amp;gt; support:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python3.10-venv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Create and activate environment:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3.10 -m venv .venv --system-site-packages --prompt demo&lt;br /&gt;
source .venv/bin/activate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Requirements ===&lt;br /&gt;
# Install SigMF:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install sigmf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Install npTDMS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install npTDMS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Colored terminal output:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install colored termcolor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Dash and dashboard components:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install dash dash_daq dash_bootstrap_components&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# YOLOv5 pre-requirements:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install -U &amp;quot;gitpython&amp;gt;=3.1.30&amp;quot; &amp;quot;matplotlib&amp;gt;=3.3&amp;quot; &amp;quot;numpy&amp;gt;=1.23.5&amp;quot; \&lt;br /&gt;
&amp;quot;opencv-python&amp;gt;=4.1.1&amp;quot; &amp;quot;pillow&amp;gt;=10.3.0&amp;quot; psutil &amp;quot;PyYAML&amp;gt;=5.3.1&amp;quot; \&lt;br /&gt;
&amp;quot;requests&amp;gt;=2.32.2&amp;quot; &amp;quot;scipy&amp;gt;=1.4.1&amp;quot; &amp;quot;thop&amp;gt;=0.1.1&amp;quot; &amp;quot;tqdm&amp;gt;=4.66.3&amp;quot; \&lt;br /&gt;
&amp;quot;ultralytics&amp;gt;=8.2.34&amp;quot; &amp;quot;setuptools&amp;gt;=70.0.0&amp;quot; &amp;quot;seaborn&amp;gt;=0.11.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== YOLOv5 Model ===&lt;br /&gt;
The demo application uses the YOLOv5 image detection model from Ultralytics (AGPL-3.0 license).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ultralytics/yolov5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demo Code and Data Recording API ===&lt;br /&gt;
Clone the NI RF Data Recording API repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ni/ni-rf-data-recording-api.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After all dependencies are installed, the Spectrum Sensing use case can be executed on Jetson following the same procedure as described for the x86 system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Waveform Creation and Signal Recording Pipeline ==&lt;br /&gt;
&lt;br /&gt;
This section outlines the process for generating waveforms, capturing RF data using the NI-RF Data Recording API, and producing spectrogram images for machine learning applications.&lt;br /&gt;
&lt;br /&gt;
=== Waveform Repository ===&lt;br /&gt;
The &amp;lt;code&amp;gt;src/waveforms/&amp;lt;/code&amp;gt; directory contains all pre-generated test signals used with the NI RF Data Recording API.  &lt;br /&gt;
It includes four subfolders: '''5G&amp;amp;nbsp;NR''', '''LTE''', '''Wi-Fi''', and '''Radar'''.&lt;br /&gt;
&lt;br /&gt;
Each waveform consists of:&lt;br /&gt;
* '''IQ Data File''' (&amp;lt;code&amp;gt;.tdms&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt;) — contains complex baseband samples.  &lt;br /&gt;
* '''Configuration File''' (&amp;lt;code&amp;gt;.rfws&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.yaml&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;.csv&amp;lt;/code&amp;gt;) — describes waveform parameters such as bandwidth and sampling rate.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* LTE: &amp;lt;code&amp;gt;LTE_TDD_DL_20MHz_....tdms&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;...rfws&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Radar: &amp;lt;code&amp;gt;Radar_Waveform_BW_2M.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;Radar_Waveform_BW_2M.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:waveform_repository_small_dimensions.png|thumb|800px|center|Waveform repository flow]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Waveform repository structure showing pre-generated 5G&amp;amp;nbsp;NR, LTE, Wi-Fi, and Radar signals mapped through the Wireless Link Parameter Dictionary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Waveform Sources ===&lt;br /&gt;
* '''RFmx Waveform Creator:''' Used for generating 5G&amp;amp;nbsp;NR and LTE waveforms (&amp;lt;code&amp;gt;.tdms&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.rfws&amp;lt;/code&amp;gt;).  &lt;br /&gt;
* '''IEEE MATLAB Wi-Fi Generator:''' Used for Wi-Fi test signals (&amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.csv&amp;lt;/code&amp;gt;).  &lt;br /&gt;
* '''Simulated Radar Generator (MATLAB):''' Used for radar signals (&amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.yaml&amp;lt;/code&amp;gt;).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Usage in the API ===&lt;br /&gt;
During recording, JSON/YAML configuration files in &amp;lt;code&amp;gt;src/config/&amp;lt;/code&amp;gt; reference these waveform paths.  &lt;br /&gt;
The &amp;lt;code&amp;gt;wireless_link_parameter_map.yaml&amp;lt;/code&amp;gt; dictionary maps waveform configuration fields (e.g., bandwidth, sampling rate, standard) to the SigMF metadata format — ensuring standardized dataset descriptions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Recording IQ Data and Metadata via API ===&lt;br /&gt;
Once waveforms are prepared:&lt;br /&gt;
&lt;br /&gt;
# Edit the configuration file (YAML/JSON) with your TX/RX parameters such as frequency, gain, and waveform paths.  &lt;br /&gt;
# Run the recording:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 main_rf_data_recording_api.py --config path/to/your_config.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# The API maps parameters to SigMF metadata, controls USRP Tx/Rx via UHD, and writes:&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt; (binary IQ samples)&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt; (JSON metadata)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spectrogram Image Generation via Preprocessing ===&lt;br /&gt;
After dataset generation:&lt;br /&gt;
&lt;br /&gt;
* Run preprocessing scripts (e.g., &amp;lt;code&amp;gt;rf_data_pre_processing_plot.py&amp;lt;/code&amp;gt;) to visualize or convert SigMF recordings into time/frequency plots.  &lt;br /&gt;
* Generate and crop spectrograms, partitioning them into training and validation sets for ML workflows.  &lt;br /&gt;
* The structured image datasets form the foundation for AI-based spectrum classification and detection.&lt;br /&gt;
&lt;br /&gt;
This end-to-end pipeline — from waveform generation to SigMF-formatted capture and spectrogram creation — enables reproducible, metadata-rich dataset production for AI-driven spectrum sensing research.&lt;br /&gt;
&lt;br /&gt;
== How to use RF Data Recording API with user defined dataset? ==&lt;br /&gt;
To use the NI RF Data Recording API with a user-defined dataset for training and inference using YOLOv8, follow this multi-step process covering signal generation, data preprocessing, model training, and inference.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== SigMF Data and Metadata Generation ===&lt;br /&gt;
Once the transmission signal is configured, stream IQ samples and record them in '''SigMF''' format by running &amp;lt;code&amp;gt;data_recording.py&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Location of the script:&lt;br /&gt;
: &amp;lt;code&amp;gt;/ni-rf-data-recording-api/examples/spectrum_sensing&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SigMF outputs:&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;: Binary file with raw IQ samples.  &lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt;: JSON metadata (frequency, sample rate, gain, antenna, timestamps, etc.).&lt;br /&gt;
&lt;br /&gt;
The script uses your YAML/JSON control file for parameters (center frequency, sample rate, bandwidth, gain, capture duration, number of records).&lt;br /&gt;
&lt;br /&gt;
* Output directory:&lt;br /&gt;
: &amp;lt;code&amp;gt;/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These SigMF files become the primary dataset for later analysis, visualization, and ML-based classification (e.g., spectrogram-based YOLO).&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Spectrogram Generation and Dataset Preprocessing ===&lt;br /&gt;
Convert SigMF recordings into labeled spectrogram images using &amp;lt;code&amp;gt;pre-processing.py&amp;lt;/code&amp;gt;. It orchestrates:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;spectrogram_creator.py&amp;lt;/code&amp;gt; – Reads &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;, applies STFT, saves spectrogram images (e.g., in &amp;lt;code&amp;gt;datasets/images&amp;lt;/code&amp;gt;).&lt;br /&gt;
# &amp;lt;code&amp;gt;image_cropper.py&amp;lt;/code&amp;gt; – Removes non-signal plot artifacts (axes, labels, borders) to produce clean images for detection models.&lt;br /&gt;
# &amp;lt;code&amp;gt;dataset_partitioner.py&amp;lt;/code&amp;gt; – Splits dataset into train/val (e.g., 80/20) with balanced classes.&lt;br /&gt;
# &amp;lt;code&amp;gt;label_maker.py&amp;lt;/code&amp;gt; – Creates YOLO-compatible label files for each image in the format:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;amp;lt;class_id&amp;amp;gt; &amp;amp;lt;x_center&amp;amp;gt; &amp;amp;lt;y_center&amp;amp;gt; &amp;amp;lt;image_width&amp;amp;gt; &amp;amp;lt;image_height&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Resulting structure:'''&lt;br /&gt;
* Cleaned spectrogram images: &amp;lt;code&amp;gt;datasets/images&amp;lt;/code&amp;gt;  &lt;br /&gt;
* YOLO labels: &amp;lt;code&amp;gt;datasets/labels&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Splits: &amp;lt;code&amp;gt;datasets/train&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;datasets/val&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This pipeline yields a model-ready dataset for accurate training and inference.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Dataset Configuration: &amp;lt;code&amp;gt;data.yaml&amp;lt;/code&amp;gt; for YOLO Training ===&lt;br /&gt;
'''Fields:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;train&amp;lt;/code&amp;gt; – Path to training images  &lt;br /&gt;
* &amp;lt;code&amp;gt;val&amp;lt;/code&amp;gt; – Path to validation images  &lt;br /&gt;
* &amp;lt;code&amp;gt;nc&amp;lt;/code&amp;gt; – Number of classes  &lt;br /&gt;
* &amp;lt;code&amp;gt;names&amp;lt;/code&amp;gt; – List of class names in class-id order&lt;br /&gt;
&lt;br /&gt;
'''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
train: datasets/train/images&lt;br /&gt;
val: datasets/val/images&lt;br /&gt;
&lt;br /&gt;
nc: 3&lt;br /&gt;
names: ['5gnr', 'wifi', 'lte']&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use this file with YOLOv5/YOLOv8 training commands. Store it in the project root or inside the dataset folder.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Model Training Using YOLOv8 (Example) ===&lt;br /&gt;
&lt;br /&gt;
==== Cloning YOLOv8 from Source ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Clone Ultralytics YOLOv8&lt;br /&gt;
git clone https://github.com/ultralytics/ultralytics.git&lt;br /&gt;
cd ultralytics&lt;br /&gt;
&lt;br /&gt;
# (Optional) Virtual environment&lt;br /&gt;
python3 -m venv .venv&lt;br /&gt;
source .venv/bin/activate   # Linux/macOS&lt;br /&gt;
# .venv\Scripts\activate    # Windows PowerShell&lt;br /&gt;
&lt;br /&gt;
# Install in editable mode&lt;br /&gt;
pip install --upgrade pip&lt;br /&gt;
pip install -e .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yolo help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== YOLOv8 Training Command ====&lt;br /&gt;
Train the nano model on your spectrogram dataset:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yolo detect train \&lt;br /&gt;
  model=yolov8n.pt \&lt;br /&gt;
  data=/content/dataset/data.yaml \&lt;br /&gt;
  epochs=50 \&lt;br /&gt;
  imgsz=640 \&lt;br /&gt;
  batch=16 \&lt;br /&gt;
  project=burst_train \&lt;br /&gt;
  name=yolov8n_spectrogram&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter notes:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;model=yolov8n.pt&amp;lt;/code&amp;gt; – Base architecture (nano).  &lt;br /&gt;
* &amp;lt;code&amp;gt;data=...&amp;lt;/code&amp;gt; – Path to &amp;lt;code&amp;gt;data.yaml&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* &amp;lt;code&amp;gt;epochs=50&amp;lt;/code&amp;gt; – Training epochs.  &lt;br /&gt;
* &amp;lt;code&amp;gt;imgsz=640&amp;lt;/code&amp;gt; – Input resolution.  &lt;br /&gt;
* &amp;lt;code&amp;gt;batch=16&amp;lt;/code&amp;gt; – Batch size.  &lt;br /&gt;
* &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; – Output directories for logs/artifacts.&lt;br /&gt;
&lt;br /&gt;
'''Outputs:'''&lt;br /&gt;
: &amp;lt;code&amp;gt;burst_train/yolov8n_spectrogram&amp;lt;/code&amp;gt;  &lt;br /&gt;
(Weights, logs, confusion matrices, PR curves, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The NI RF Data Recording API provides a powerful and flexible framework for real-time spectrum sensing, dataset generation, and AI-driven signal classification across both x86 and embedded platforms such as NVIDIA Jetson.  &lt;br /&gt;
By leveraging standardized formats like SigMF and integrating deep learning models such as YOLOv8, the framework enables a complete end-to-end workflow—from RF signal acquisition and metadata tagging to spectrogram creation, training, and live inference.  &lt;br /&gt;
&lt;br /&gt;
This modular approach allows researchers and engineers to rapidly prototype, evaluate, and deploy intelligent wireless sensing systems that bridge the gap between traditional SDR experimentation and modern AI-based spectrum analytics.  &lt;br /&gt;
The same unified methodology can be extended to multi-band sensing, interference detection, cognitive radio, and 6G spectrum intelligence research, ensuring scalability and reproducibility in both laboratory and field environments.&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=AI-Based_Spectrum_Sensing_with_Nvidia_Jetson_and_USRP&amp;diff=6316</id>
		<title>AI-Based Spectrum Sensing with Nvidia Jetson and USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=AI-Based_Spectrum_Sensing_with_Nvidia_Jetson_and_USRP&amp;diff=6316"/>
				<updated>2025-11-05T12:21:22Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: /* Waveform Creation and Signal Recording Pipeline */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-811'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
This application note presents a complete framework for real-time spectrum sensing using NI Universal Serial Radio Peripheral (USRP) Software-Defined Radios (SDRs) and NVIDIA Jetson or standard x86 compute platforms. The framework is not limited to a single USRP model—the X410, X310, and B2xx series (e.g., B206) can all be used as transmitters or receivers depending on the deployment scenario. The solution leverages the NI-RF Data Recording API to enable scalable RF data acquisition, SigMF-compliant metadata tagging, and seamless integration with machine learning workflows.&lt;br /&gt;
&lt;br /&gt;
The document outlines three core usage scenarios:&lt;br /&gt;
&lt;br /&gt;
# x86-Based Development Workflow: Using a workstation or server-class x86 machine, paired with high-end USRPs such as the X410 or X310, the system supports wideband spectrum sensing (up to 400&amp;amp;nbsp;MHz instantaneous bandwidth per channel). This configuration is ideal for laboratory development, algorithm training, and high-throughput dataset generation.&lt;br /&gt;
# Jetson-Based Embedded Sensing (Primary Use Case): Using an NVIDIA Jetson platform as the host (e.g., AGX Orin) with a compact B206 SDR as receiver and an X410 as transmitter, the system delivers efficient edge inference with GPU acceleration. Although the B206 limits the instantaneous bandwidth to 56&amp;amp;nbsp;MHz, this configuration emphasizes portability, low power, and real-time embedded operation.&lt;br /&gt;
# User-Defined Dataset Integration: In addition to live spectrum sensing, the framework supports integration and generation of user-defined datasets. This functionality extends the applicability of the system beyond real-time capture, enabling flexible experimentation, reproducibility, and seamless AI/ML dataset preparation. Two complementary capabilities are supported:&lt;br /&gt;
## SigMF Dataset Recording&lt;br /&gt;
##* All captured RF data is stored in the Signal Metadata Format (SigMF).&lt;br /&gt;
##* SigMF pairs raw IQ samples (&amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;) with a corresponding metadata file (&amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt;) in JSON format.&lt;br /&gt;
##* Metadata describes acquisition parameters such as frequency, bandwidth, gain, device type, timestamps, and scenario context.&lt;br /&gt;
##* Being human-readable and portable, SigMF datasets can be used across a wide range of software environments, making them ideal for wireless research, spectrum monitoring, AI/ML training for 6G, and regulatory validation.&lt;br /&gt;
##* Example: A spectrum sensing session at 3.5&amp;amp;nbsp;GHz, 20&amp;amp;nbsp;MHz bandwidth, and 10-second duration will result in a SigMF-compliant dataset ready for further processing or ML-based classification.&lt;br /&gt;
## Continuous Waveform Playback with User-Defined Files&lt;br /&gt;
##* The platform supports continuous transmission and replay of user-defined waveforms in TDMS or MATLAB (.mat) formats.&lt;br /&gt;
##* This allows testing with standard-compliant signals such as 5G NR, LTE, Radar, or Wi-Fi, or custom-designed waveforms.&lt;br /&gt;
##* By replaying predefined waveforms, researchers can benchmark algorithms, validate coexistence scenarios, and reproduce experiments consistently across testbeds.&lt;br /&gt;
##* Example: A MATLAB-generated LTE downlink frame can be continuously transmitted via an X410 while a B206 or X310 records the received signal in SigMF format for classification.&lt;br /&gt;
&lt;br /&gt;
Together, these capabilities ensure that the NI-RF Data Recording API can handle both dataset creation (SigMF-based recording) and waveform-driven experimentation (TDMS/MAT playback), thereby covering the entire pipeline from signal generation to ML-ready dataset production.&lt;br /&gt;
&lt;br /&gt;
By combining NI's reliable SDR hardware with NVIDIA's efficient edge compute platforms and a unified data interface, this solution supports a wide range of spectrum intelligence applications—from interference detection and dynamic spectrum access to embedded RF analytics. The methodology enables scalable deployment from lab to field, supporting real-time insights and long-term data collection in a streamlined, modular pipeline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USRP B206 Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File: USRP-b206_mini_01.jpg|thumb|center|400px|NI USRP B206 Software Defined Radio]]&lt;br /&gt;
&lt;br /&gt;
The USRP B206 is a compact, low-cost SDR developed by NI / Ettus Research. It supports full-duplex operation with one transmit and one receive channel, making it ideal for a variety of wireless communication and sensing applications. The B206 covers a wide RF frequency range from 70&amp;amp;nbsp;MHz to 6&amp;amp;nbsp;GHz and supports up to 56&amp;amp;nbsp;MHz of instantaneous bandwidth. This makes it suitable for applications such as spectrum sensing, dynamic spectrum access, and cognitive radio.&lt;br /&gt;
&lt;br /&gt;
The device connects to a host system via a high-speed USB&amp;amp;nbsp;3.0 interface, which enables data rates sufficient for wideband real-time signal acquisition and transmission. It also supports USB&amp;amp;nbsp;2.0 with reduced performance. The B206 includes a Xilinx Spartan-6 FPGA for onboard signal processing and is powered either through USB or an external DC supply, the latter being preferred for optimal RF performance.&lt;br /&gt;
&lt;br /&gt;
The USRP B206 is compatible with both x86 and ARM-based hosts, including embedded platforms like the NVIDIA Jetson series. This enables portable and energy-efficient deployment of spectrum sensing pipelines at the network edge. It is fully supported by the open-source UHD and integrates with popular SDR development tools such as GNU Radio, MATLAB, and LabVIEW.&lt;br /&gt;
&lt;br /&gt;
Typical use cases for the B206 include real-time spectrum monitoring, wireless signal classification using machine learning, prototyping of 4G/5G systems, and SDR education and training. Its compact size and flexible software support make it an excellent choice for both laboratory research and embedded field deployments.&lt;br /&gt;
&lt;br /&gt;
'''Key Features of the USRP B206:'''&lt;br /&gt;
* RF Capabilities: 1 TX, 1 RX, independently tunable, RF transceiver, 70&amp;amp;nbsp;MHz to 6&amp;amp;nbsp;GHz, up to 56&amp;amp;nbsp;MHz bandwidth&lt;br /&gt;
* Programmable Logic: FPGA: Xilinx Spartan-6 XC6SLX150&lt;br /&gt;
* Software: UHD 4.9 or later, GNU Radio, C/C++ and Python&lt;br /&gt;
* Synchronization: REF (external 10&amp;amp;nbsp;MHz or PPS reference)&lt;br /&gt;
* Digital Interfaces: USB&amp;amp;nbsp;3.0, GPIO (8 I/O lines with 3.3&amp;amp;nbsp;V I/O voltage), and JTAG&lt;br /&gt;
* Power, form factor: 5&amp;amp;nbsp;V&amp;amp;nbsp;DC, 0.9&amp;amp;nbsp;A maximum; Board-only: 84.3&amp;amp;nbsp;mm × 51.0&amp;amp;nbsp;mm × 8.7&amp;amp;nbsp;mm; Enclosed: 84.9&amp;amp;nbsp;mm × 55.7&amp;amp;nbsp;mm × 19.8&amp;amp;nbsp;mm&lt;br /&gt;
&lt;br /&gt;
== NI-RF Data Recording API Overview ==&lt;br /&gt;
&lt;br /&gt;
The '''[https://github.com/ni/ni-rf-data-recording-api/blob/main/README.md NI-RF Data Recording API]''' is an open-source, Python-based framework developed by National Instruments (NI) in collaboration with the Genesys Lab at Northeastern University. It is designed to streamline RF data collection using NI USRP SDRs, with support for structured metadata via the '''[https://github.com/sigmf/SigMF Signal Metadata Format (SigMF)]'''.&lt;br /&gt;
&lt;br /&gt;
=== Purpose and Scope ===&lt;br /&gt;
This API enables efficient recording, labeling, and replay of real-world RF signals. It is particularly suited for generating datasets used in AI/ML workflows, wireless research, and spectrum monitoring. The framework abstracts low-level UHD interactions, allowing users to define RF parameters through JSON or YAML configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Key Features ===&lt;br /&gt;
* Support for both signal transmission and reception using NI USRP hardware.&lt;br /&gt;
* Native recording in SigMF format, capturing both IQ samples and rich metadata.&lt;br /&gt;
* Python-based, modular architecture supporting custom extensions and automation.&lt;br /&gt;
* Multi-SDR support via coordinated configuration files.&lt;br /&gt;
* Sample waveform libraries included (e.g., LTE, NR, radar, Wi-Fi) in TDMS/MAT formats.&lt;br /&gt;
* Utility scripts for standalone use: transmit, receive, replay, or continuous capture.&lt;br /&gt;
&lt;br /&gt;
=== System Requirements ===&lt;br /&gt;
The API has been validated on Ubuntu&amp;amp;nbsp;22.04 systems with the following dependencies:&lt;br /&gt;
* At least one compatible NI USRP device (e.g., B206, X310, X410).&lt;br /&gt;
* Installed UHD drivers with Python bindings.&lt;br /&gt;
* Python&amp;amp;nbsp;3.x and required libraries (e.g., NumPy, PyYAML).&lt;br /&gt;
* Optional Docker environment for containerized deployment.&lt;br /&gt;
&lt;br /&gt;
=== Relevance to Our Use Cases ===&lt;br /&gt;
In this application note, we explore three deployment scenarios of the NI-RF Data Recording API:&lt;br /&gt;
&lt;br /&gt;
# x86-based Spectrum Sensing: Using the API on a desktop or server-class system, the USRP&amp;amp;nbsp;B206 is configured to perform spectrum capture, and the data is saved in SigMF format. This setup is optimal for high-throughput and lab-based development environments.&lt;br /&gt;
# Embedded Jetson Platform: The API is deployed on an NVIDIA Jetson device interfaced with the USRP&amp;amp;nbsp;B206 over USB&amp;amp;nbsp;3.0. This enables compact, power-efficient, and real-time spectrum sensing at the edge. Onboard GPU resources are leveraged for FFT computation and ML inference.&lt;br /&gt;
# User-Defined Dataset Integration: The API provides flexible support for user-defined datasets through two complementary capabilities:&lt;br /&gt;
## Importing Pre-Generated Data: Users can seamlessly import and tag custom IQ recordings (e.g., SigMF-compliant files or previously captured spectrum data) into the repository. This enables integration of external datasets for benchmarking, anomaly detection, or reproducible research.&lt;br /&gt;
## Data Lake Storage for AI/ML Pipelines: All captured and imported datasets can be stored in a structured data lake, significantly simplifying automated dataset selection, management, and preprocessing. This facilitates streamlined workflows for AI/ML model design, training, and validation in spectrum sensing and 6G wireless research.&lt;br /&gt;
&lt;br /&gt;
The NI-RF Data Recording API provides a flexible, hardware-agnostic foundation for both live RF capture and offline dataset handling, making it central to spectrum intelligence and edge-aware signal processing workflows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference Architecture for Spectrum Sensing ==&lt;br /&gt;
&lt;br /&gt;
To support flexible and scalable RF data collection workflows, we propose a dual-mode reference architecture that demonstrates spectrum sensing using NI USRP hardware with two compute platforms: a high-performance x86 host and an embedded NVIDIA Jetson device. Both configurations utilize the NI-RF Data Recording API to capture, store, and manage RF data in SigMF format. The hardware setup supports real-time signal acquisition, tagging, and streaming for downstream machine learning or signal intelligence tasks.&lt;br /&gt;
&lt;br /&gt;
=== x86-Based High-Performance Architecture ===&lt;br /&gt;
&lt;br /&gt;
[[File: x86.png|thumb|center|900px|x86-based spectrum sensing architecture using NI USRP B206 and X410]]&lt;br /&gt;
&lt;br /&gt;
In this high-performance lab-based deployment, a desktop-class x86 host system is used. The USRP&amp;amp;nbsp;X410 (or alternatively the X310) serves as the receiver, connected to the workstation via a 10&amp;amp;nbsp;GbE Ethernet interface to support high-throughput data streaming. The transmitter is also an NI USRP&amp;amp;nbsp;X410, connected through a 10&amp;amp;nbsp;GbE link via a network switch. A 30&amp;amp;nbsp;dB attenuator is inserted between the TX and RX paths to protect the RF front-end from saturation during close-proximity transmission. &lt;br /&gt;
&lt;br /&gt;
This configuration demonstrates the full high-performance capability of the platform, enabling wideband spectrum sensing and scalable data capture.&lt;br /&gt;
&lt;br /&gt;
Host System Specifications:&lt;br /&gt;
* Operating System: Ubuntu&amp;amp;nbsp;22.04  &lt;br /&gt;
* UHD Compatibility: The NI-RF Data Recording API supports UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.2. Most devices such as the X410 or X310 work with older versions, but the B206 requires UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.9.  &lt;br /&gt;
* Processor: Intel&amp;amp;nbsp;Xeon&amp;amp;nbsp;w7-2495X (24&amp;amp;nbsp;cores, 2.5&amp;amp;nbsp;GHz)&lt;br /&gt;
&lt;br /&gt;
This setup is suited for '''high-throughput spectrum recording, algorithm development, and dataset generation''' in a lab environment. It offers large storage capacity, stable power, and CPU-intensive post-processing capabilities.&lt;br /&gt;
&lt;br /&gt;
=== Jetson-Based Embedded Architecture ===&lt;br /&gt;
&lt;br /&gt;
[[File:SS_with_x86.png|thumb|center|900px|Jetson-based spectrum sensing architecture using NI USRP B2x0 and X410]]&lt;br /&gt;
&lt;br /&gt;
In this configuration, an NVIDIA Jetson module serves as the edge processing unit. The Jetson connects to a USRP&amp;amp;nbsp;B2x0 (e.g., B206) over a USB&amp;amp;nbsp;3.0 interface, acting as the spectrum sensor (receiver). A USRP&amp;amp;nbsp;X410 acts as the transmitter, linked via a LAN switch. A 30&amp;amp;nbsp;dB attenuator is used between the TX and RX paths to prevent RF front-end saturation during close-proximity transmission.&lt;br /&gt;
&lt;br /&gt;
The Jetson executes the RF data acquisition pipeline and leverages onboard GPU resources to perform high-speed FFTs, signal classification, and real-time metadata tagging. A display, keyboard, and mouse connect directly for standalone operation.&lt;br /&gt;
&lt;br /&gt;
'Jetson System Specifications:&lt;br /&gt;
* Operating System: Ubuntu&amp;amp;nbsp;22.04 with JetPack&amp;amp;nbsp;6.2.1  &lt;br /&gt;
* UHD Version: 4.9  &lt;br /&gt;
* Processor: NVIDIA&amp;amp;nbsp;Jetson&amp;amp;nbsp;AGX&amp;amp;nbsp;Orin&amp;amp;nbsp;64&amp;amp;nbsp;GB  &lt;br /&gt;
&lt;br /&gt;
This configuration is ideal for low-power, field-deployable sensing nodes where edge inference, minimal latency, and portability are required. The NI-RF Data Recording API runs natively on ARM-based Jetson, ensuring consistent data acquisition across architectures.&lt;br /&gt;
&lt;br /&gt;
=== Common Features Across Architectures ===&lt;br /&gt;
Both architectures support:&lt;br /&gt;
* Real-time IQ sample recording and metadata tagging using NI-RF Data Recording API  &lt;br /&gt;
* Integration with SigMF-compliant datasets  &lt;br /&gt;
* Wideband RF capture across 70&amp;amp;nbsp;MHz–6&amp;amp;nbsp;GHz (with B206)  &lt;br /&gt;
* Configurable gain, center frequency, bandwidth, and LO offsets via JSON/YAML files  &lt;br /&gt;
&lt;br /&gt;
The dual-platform design allows researchers to prototype, validate, and deploy spectrum sensing pipelines in a variety of scenarios—from power-constrained edge sensing to scalable, cloud-connected research environments.&lt;br /&gt;
&lt;br /&gt;
== Bill of Materials ==&lt;br /&gt;
&lt;br /&gt;
This section lists the hardware and software components required to replicate the spectrum sensing setup described in the reference architectures.&lt;br /&gt;
&lt;br /&gt;
=== Jetson-Based Embedded Spectrum Sensing Setup ===&lt;br /&gt;
* '''NI USRP B206 SDR (Receiver)'''&lt;br /&gt;
** Frequency Range: 70&amp;amp;nbsp;MHz – 6&amp;amp;nbsp;GHz  &lt;br /&gt;
** Bandwidth: up to 56&amp;amp;nbsp;MHz  &lt;br /&gt;
** Interface: USB&amp;amp;nbsp;3.0  &lt;br /&gt;
&lt;br /&gt;
* '''NI USRP X410 SDR (Transmitter)'''&lt;br /&gt;
** Frequency Range: up to 7.2&amp;amp;nbsp;GHz  &lt;br /&gt;
** Bandwidth: up to 1&amp;amp;nbsp;GHz per channel  &lt;br /&gt;
** Interface: 10&amp;amp;nbsp;GbE (SFP+)  &lt;br /&gt;
&lt;br /&gt;
* '''NVIDIA Jetson AGX Orin 64&amp;amp;nbsp;GB Developer Kit (Edge Host)'''&lt;br /&gt;
** GPU: 2048-core Ampere GPU  &lt;br /&gt;
** Interfaces: USB&amp;amp;nbsp;3.0, 10&amp;amp;nbsp;Gb Ethernet  &lt;br /&gt;
** OS: Ubuntu&amp;amp;nbsp;22.04 (ARM64) with JetPack&amp;amp;nbsp;6.2.1  &lt;br /&gt;
&lt;br /&gt;
* '''Display and Input Devices'''&lt;br /&gt;
** Monitor (DisplayPort or HDMI)  &lt;br /&gt;
** USB Keyboard and Mouse  &lt;br /&gt;
&lt;br /&gt;
* '''30&amp;amp;nbsp;dB RF Attenuator'''&lt;br /&gt;
** Protects RX frontend during loopback or close-range transmission  &lt;br /&gt;
&lt;br /&gt;
* '''Network Switch (Gigabit)'''&lt;br /&gt;
** Routes LAN traffic between Jetson and X410  &lt;br /&gt;
&lt;br /&gt;
* '''RF Cables and Antennas or Dummy Load'''  &lt;br /&gt;
* '''Power Supply for USRP X410 and Jetson'''  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable (for Jetson–B206 interface)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== x86-Based Spectrum Sensing Setup ===&lt;br /&gt;
* '''NI USRP B206 SDR (Receiver)'''&lt;br /&gt;
* '''NI USRP X410 SDR (Transmitter)'''&lt;br /&gt;
* '''x86 Workstation or Server (Host PC)'''&lt;br /&gt;
** CPU: Intel&amp;amp;nbsp;Xeon&amp;amp;nbsp;w7-2495X, 24&amp;amp;nbsp;cores, 2.5&amp;amp;nbsp;GHz  &lt;br /&gt;
** OS: Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS  &lt;br /&gt;
** UHD: Version&amp;amp;nbsp;4.8 or newer  &lt;br /&gt;
** RAM: Minimum 32&amp;amp;nbsp;GB recommended  &lt;br /&gt;
** Storage: SSD for high-speed IQ data logging  &lt;br /&gt;
&lt;br /&gt;
* '''Display and Input Devices'''&lt;br /&gt;
** Monitor (DisplayPort or HDMI)  &lt;br /&gt;
** USB Keyboard and Mouse  &lt;br /&gt;
&lt;br /&gt;
* '''30&amp;amp;nbsp;dB RF Attenuator'''  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable (PC–B206 interface)'''  &lt;br /&gt;
* '''Ethernet Cables (PC and X410 to switch)'''  &lt;br /&gt;
* '''Network Switch (Gigabit or 10&amp;amp;nbsp;GbE)'''  &lt;br /&gt;
* '''Coaxial Cable (RF connection between TX and RX)'''&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements (Common) ===&lt;br /&gt;
* '''NI-RF Data Recording API'''&lt;br /&gt;
** GitHub: [https://github.com/ni/ni-rf-data-recording-api https://github.com/ni/ni-rf-data-recording-api]  &lt;br /&gt;
** Supports SigMF format, YAML/JSON configuration, UHD interface  &lt;br /&gt;
&lt;br /&gt;
* '''UHD (USRP Hardware Driver)'''&lt;br /&gt;
** Version&amp;amp;nbsp;4.9 recommended  &lt;br /&gt;
** Installed natively  &lt;br /&gt;
&lt;br /&gt;
* '''Python&amp;amp;nbsp;3.x Environment'''&lt;br /&gt;
** Required packages: numpy, pyyaml, sigmf, uhd, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
To implement the proposed spectrum sensing architecture, the following hardware components are required. The selected devices are chosen for their compatibility with the NI-RF Data Recording API, support for UHD drivers, and ability to perform high-speed RF acquisition and processing.&lt;br /&gt;
&lt;br /&gt;
=== NI USRP B206 (Receiver SDR) ===&lt;br /&gt;
The USRP&amp;amp;nbsp;B206 is a low-cost, full-duplex software-defined radio with wide RF coverage and USB&amp;amp;nbsp;3.0 connectivity, making it ideal for spectrum sensing tasks.&lt;br /&gt;
&lt;br /&gt;
* '''Frequency Range:''' 70&amp;amp;nbsp;MHz&amp;amp;nbsp;–&amp;amp;nbsp;6&amp;amp;nbsp;GHz  &lt;br /&gt;
* '''Bandwidth:''' Up to 56&amp;amp;nbsp;MHz  &lt;br /&gt;
* '''Interface:''' USB&amp;amp;nbsp;3.0  &lt;br /&gt;
* '''Form Factor:''' Compact, bus-powered or DC-powered  &lt;br /&gt;
* '''Purchase Link:''' [https://www.ettus.com/all-products/usrp-b200/ https://www.ettus.com/all-products/usrp-b200/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NI USRP X410 (Transmitter SDR) ===&lt;br /&gt;
The USRP&amp;amp;nbsp;X410 is a high-performance, 4-channel SDR capable of wideband signal transmission and reception. It supports 10&amp;amp;nbsp;GbE connectivity and real-time FPGA processing.&lt;br /&gt;
&lt;br /&gt;
* '''Frequency Range:''' Up to 7.2&amp;amp;nbsp;GHz  &lt;br /&gt;
* '''Bandwidth:''' Up to 1&amp;amp;nbsp;GHz per channel  &lt;br /&gt;
* '''Interface:''' 10&amp;amp;nbsp;GbE&amp;amp;nbsp;(SFP+), PCIe&amp;amp;nbsp;(optional)  &lt;br /&gt;
* '''FPGA:''' Xilinx Zynq Ultrascale+ RFSoC  &lt;br /&gt;
* '''Purchase Link:''' [https://www.ettus.com/all-products/usrp-x410/ https://www.ettus.com/all-products/usrp-x410/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NVIDIA Jetson AGX Orin 64&amp;amp;nbsp;GB Developer Kit (Edge Host) ===&lt;br /&gt;
The Jetson&amp;amp;nbsp;AGX&amp;amp;nbsp;Orin series provides a powerful embedded GPU platform for edge AI and RF signal processing.&lt;br /&gt;
&lt;br /&gt;
* '''GPU:''' NVIDIA Ampere architecture  &lt;br /&gt;
* '''RAM:''' 32&amp;amp;nbsp;GB&amp;amp;nbsp;/&amp;amp;nbsp;64&amp;amp;nbsp;GB LPDDR4/5  &lt;br /&gt;
* '''Connectivity:''' USB&amp;amp;nbsp;3.0, Ethernet, GPIO  &lt;br /&gt;
* '''OS Support:''' Ubuntu&amp;amp;nbsp;20.04&amp;amp;nbsp;/&amp;amp;nbsp;22.04&amp;amp;nbsp;(ARM64)  &lt;br /&gt;
* '''Purchase Link:''' [https://store.nvidia.com/jetson/store/ https://store.nvidia.com/jetson/store/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Network Switch (Gigabit or 10&amp;amp;nbsp;GbE) ===&lt;br /&gt;
A managed or unmanaged Ethernet switch is required to route LAN traffic between the Jetson or x86 host and the USRP&amp;amp;nbsp;X410.&lt;br /&gt;
&lt;br /&gt;
* '''Recommended:''' Netgear&amp;amp;nbsp;GS108, Mikrotik&amp;amp;nbsp;CRS305, or Cisco&amp;amp;nbsp;CBS350  &lt;br /&gt;
* '''Typical Ports:''' 8+ (Gigabit or 10&amp;amp;nbsp;GbE&amp;amp;nbsp;SFP+)  &lt;br /&gt;
* '''Example Link:''' [https://www.netgear.com/business/wired/switches/smart/gs108/ https://www.netgear.com/business/wired/switches/smart/gs108/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== High-Performance x86 Host (Optional for Lab Use) ===&lt;br /&gt;
An x86 workstation is recommended for development, high-throughput data collection, or as an alternative to Jetson in a lab environment.&lt;br /&gt;
&lt;br /&gt;
* '''Processor:''' Minimum specification of an 8-core CPU at 3&amp;amp;nbsp;GHz or higher (e.g., Intel&amp;amp;nbsp;Xeon or equivalent). Higher core counts (e.g., 24-core&amp;amp;nbsp;Xeon&amp;amp;nbsp;W7-2495X) can improve throughput and parallel data processing but are not mandatory.  &lt;br /&gt;
* '''RAM:''' 64&amp;amp;nbsp;GB or more  &lt;br /&gt;
* '''Storage:''' NVMe SSD for high-speed data logging  &lt;br /&gt;
* '''Operating System:''' Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS  &lt;br /&gt;
* '''Form Factor:''' Tower workstation or server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RF Accessories ===&lt;br /&gt;
* '''RF Coaxial Cables (SMA)'''  &lt;br /&gt;
* '''30&amp;amp;nbsp;dB Attenuator''' – Protects RX during close TX–RX loopback tests  &lt;br /&gt;
* '''Antennas''' (Wideband or band-specific)  &lt;br /&gt;
* '''Dummy Load''' (for isolated lab TX tests)  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable''' (for USRP&amp;amp;nbsp;B206)  &lt;br /&gt;
* '''Ethernet Cables''' (Cat&amp;amp;nbsp;6 or SFP+ DAC for X410)  &lt;br /&gt;
* '''Power Supplies:'''&lt;br /&gt;
** Jetson: 19&amp;amp;nbsp;V&amp;amp;nbsp;/&amp;amp;nbsp;4.74&amp;amp;nbsp;A adapter (usually included)  &lt;br /&gt;
** X410: External DC or rack supply per specifications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Requirements ==&lt;br /&gt;
&lt;br /&gt;
This section outlines the required software components for enabling spectrum sensing using the NI-RF Data Recording API with USRP&amp;amp;nbsp;B206/X410 and NVIDIA Jetson or x86 hosts. These tools are compatible across both embedded and desktop-class platforms and support real-time signal acquisition and metadata tagging in SigMF format.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu Operating System ===&lt;br /&gt;
* '''Version:''' Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS (Jetson) / Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS (x86 recommended)&lt;br /&gt;
* '''Download Link:''' [https://ubuntu.com/download https://ubuntu.com/download]&lt;br /&gt;
* '''Jetson OS Image:''' JetPack&amp;amp;nbsp;SDK includes Ubuntu and NVIDIA drivers  &lt;br /&gt;
* '''JetPack Link:''' [https://developer.nvidia.com/embedded/jetpack https://developer.nvidia.com/embedded/jetpack]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NI-RF Data Recording API ===&lt;br /&gt;
* '''Description:''' Open-source Python API developed by NI and the Genesys Lab (Northeastern University) for recording and labeling RF data in SigMF format using USRP devices.  &lt;br /&gt;
* '''Features:''' Configurable YAML/JSON setups, multi-SDR coordination, SigMF conversion, supports transmission/reception workflows.  &lt;br /&gt;
* '''Repository:''' [https://github.com/ni/ni-rf-data-recording-api https://github.com/ni/ni-rf-data-recording-api]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UHD – USRP Hardware Driver ===&lt;br /&gt;
* '''Description:''' The official driver and API library for controlling and interfacing with all NI/Ettus USRP SDR hardware. Required for low-level communication between Python and the hardware.  &lt;br /&gt;
* '''Version:''' The NI-RF Data Recording API requires a UHD version that supports the selected USRP device:  &lt;br /&gt;
** For X410 (and other X-Series): UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.2 (first stable release UHD&amp;amp;nbsp;4.4 recommended)  &lt;br /&gt;
** For B206: UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.9 required  &lt;br /&gt;
* '''Repository:''' [https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]  &lt;br /&gt;
* '''Install Guide:''' [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux UHD and GNU&amp;amp;nbsp;Radio Install Guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Environment ===&lt;br /&gt;
* '''Version:''' Python&amp;amp;nbsp;3.10.12 or newer  &lt;br /&gt;
* '''Required Packages:'''  &lt;br /&gt;
** &amp;lt;code&amp;gt;numpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyyaml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sigmf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uhd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scipy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matplotlib&amp;lt;/code&amp;gt;, etc.  &lt;br /&gt;
* '''Package Manager:''' &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;conda&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Recommended Setup:''' Create a Python virtual environment for isolation and reproducibility.  &lt;br /&gt;
* '''Download Link:''' [https://www.python.org/ https://www.python.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SigMF Library (Python) ===&lt;br /&gt;
* '''Description:''' Used for generating and parsing metadata in the Signal Metadata Format (SigMF), enabling dataset interoperability and ML dataset labeling.  &lt;br /&gt;
* '''Supported Version:''' Validated with '''SigMF&amp;amp;nbsp;1.0.0''' (later versions such as&amp;amp;nbsp;1.1.x or&amp;amp;nbsp;1.2.x introduce major changes and have not been validated).  &lt;br /&gt;
* '''Repository:''' [https://github.com/gnuradio/sigmf-numpy https://github.com/gnuradio/sigmf-numpy]  &lt;br /&gt;
* '''Installation Command:''' &amp;lt;code&amp;gt;pip install sigmf==1.0.0&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Reference:''' For more details, see the [https://github.com/ni/ni-rf-data-recording-api/tree/main/docs NI RF Data Recording API Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the UHD Software ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. At the time of this writing, the recommended version is '''UHD&amp;amp;nbsp;4.9'''.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates.  &lt;br /&gt;
* For x86/64 Ubuntu systems with released UHD versions available, you may install via APT Debian packages.  &lt;br /&gt;
* For Jetson (ARM64) systems, UHD must be built from source since no binary packages are provided.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all required dependencies (Ubuntu&amp;amp;nbsp;22.04):&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If your system already has another UHD version installed, remove it first:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt remove libuhd* uhd-host&lt;br /&gt;
sudo rm -rf /usr/lib/uhd /usr/include/uhd /usr/local/lib/uhd /usr/local/include/uhd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install build dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y \&lt;br /&gt;
  cmake g++ libboost-all-dev libusb-1.0-0-dev \&lt;br /&gt;
  libuhd-dev python3 python3-mako python3-numpy \&lt;br /&gt;
  python3-requests python3-ruamel.yaml libfftw3-dev \&lt;br /&gt;
  libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake \&lt;br /&gt;
  qtbase5-dev-tools doxygen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone the UHD repository and check out version '''v4.9.0.0''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
cd uhd&lt;br /&gt;
git checkout v4.9.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build and install UHD:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd host&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
sudo usrp_images_downloader&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify the installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_usrp_probe&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details, see the official UHD GitHub page:  &lt;br /&gt;
[https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]&lt;br /&gt;
&lt;br /&gt;
[[File:fae8d810-08f0-4ae3-ab87-5b6a31eeaa66.png|thumb|400px|center|uhd_usrp_probe output for B206]]&lt;br /&gt;
[[File:5026560b-fc07-4f77-953c-c17f41acfccc.png|thumb|400px|center|uhd_find_devices output for N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Examples of UHD utilities used for USRP probing and device discovery.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post UHD Installation Tasks ===&lt;br /&gt;
# '''Download USRP images'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/uhd_images_downloader&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Add USB udev rule''' (can be limited to specific vendor/device IDs)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/udev/rules.d/99-usb.rules&lt;br /&gt;
# Add this line:&lt;br /&gt;
# SUBSYSTEM==&amp;quot;usb&amp;quot;,MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
sudo udevadm control --reload-rules&lt;br /&gt;
sudo udevadm trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Unplug and replug the USB device if it was already connected.&lt;br /&gt;
&lt;br /&gt;
# '''Enable Python UHD API visibility'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;/usr/local/lib/python3.10/site-packages&amp;quot; | \&lt;br /&gt;
sudo tee /usr/local/lib/python3.10/dist-packages/local-site-packages.pth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UHD Installation Verification ===&lt;br /&gt;
# '''Find connected USRP devices'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Run throughput benchmark on the B2x0 device'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/lib/uhd/examples/benchmark_rate --args &amp;quot;type=b200&amp;quot; --rx_rate 10e6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Run Python throughput benchmark'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3.10 /usr/local/lib/uhd/examples/python/benchmark_rate.py --args &amp;quot;type=b200&amp;quot; --rx_rate 10e6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the USRP X410 Radio ==&lt;br /&gt;
&lt;br /&gt;
For detailed documentation, see the official Ettus manual:  &lt;br /&gt;
[https://files.ettus.com/manual/page_usrp_x4xx.html https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Connecting to the X410 ===&lt;br /&gt;
You can connect to the USRP X410 using either of the following interfaces:&lt;br /&gt;
* Ethernet (RJ45)&lt;br /&gt;
* USB-C JTAG Console&lt;br /&gt;
&lt;br /&gt;
If you cannot connect to the X410 (e.g., because it has a static IP address):&lt;br /&gt;
&lt;br /&gt;
# Connect the USRP to your PC using a USB-C ↔ USB cable.  &lt;br /&gt;
  See the '''Serial connection''' section in the Ettus manual: [https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
# Change the static IP to a DHCP-assigned IP.  &lt;br /&gt;
  See the '''Network interfaces''' section: [https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updating the Filesystem ===&lt;br /&gt;
For full details, refer to the Ettus manual section: [https://files.ettus.com/manual/page_usrp_x4xx.html Updating Filesystems].&lt;br /&gt;
&lt;br /&gt;
The easiest method is to perform the update directly on the X410 using the built-in &amp;lt;code&amp;gt;usrp_update_fs&amp;lt;/code&amp;gt; utility:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Login to the USRP&lt;br /&gt;
ssh root@usrp_ip&lt;br /&gt;
&lt;br /&gt;
# Update filesystem to UHD 4.9&lt;br /&gt;
usrp_update_fs -t UHD-4.9&lt;br /&gt;
&lt;br /&gt;
# Or install the UHD master version&lt;br /&gt;
usrp_update_fs -t master&lt;br /&gt;
&lt;br /&gt;
# Reboot the USRP&lt;br /&gt;
reboot&lt;br /&gt;
&lt;br /&gt;
# If the reboot works and the device is functional, commit the changes&lt;br /&gt;
mender commit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updating the FPGA Image ===&lt;br /&gt;
For details, see: [https://files.ettus.com/manual/page_usrp_x4xx.html Updating the FPGA].&lt;br /&gt;
&lt;br /&gt;
You can verify and benchmark the X410 performance using the UHD example utility:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./benchmark_rate --args=&amp;quot;mgmt_addr=10.89.12.177,addr=192.168.10.2,\&lt;br /&gt;
second_addr=192.168.11.2,clock_source=internal,time_source=internal&amp;quot; \&lt;br /&gt;
--rx_rate 200e6 --channels 0 --rx_channels 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing Spectrum Sensing Example on x86 Architecture ==&lt;br /&gt;
&lt;br /&gt;
This section provides a detailed procedure for installing and running the Spectrum Sensing example on an x86 architecture.  &lt;br /&gt;
The '''spectrum_sensing''' folder within the NI-RF Data Recording API repository provides a ready-to-run demonstration of live RF spectrum sensing using a single receiver (e.g., USRP&amp;amp;nbsp;B206/X410) connected to an x86 host.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setup Instructions ===&lt;br /&gt;
# '''Clone the repository:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ni/ni-rf-data-recording-api.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Clone the YOLOv5 repository:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ultralytics/yolov5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Install dependencies for NI RF Data Recording API:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ni-rf-data-recording-api&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Package Dependencies ===&lt;br /&gt;
The following Python packages are required to run the spectrum sensing pipeline using the NI-RF Data Recording API.  &lt;br /&gt;
&lt;br /&gt;
* '''termcolor''' – Prints colored text in terminal for log readability.  &lt;br /&gt;
* '''numpy&amp;amp;nbsp;(&amp;gt;=1.23.5,&amp;amp;nbsp;&amp;lt;2.0.0)''' – Core numerical library for IQ array operations, FFTs, and signal processing.  &lt;br /&gt;
* '''scipy&amp;amp;nbsp;(&amp;gt;=1.4.1)''' – Used for filtering, spectral analysis, and mathematical routines.  &lt;br /&gt;
* '''matplotlib&amp;amp;nbsp;(&amp;gt;=3.3)''' – Generates spectrum plots, spectrograms, and PSD visualizations.  &lt;br /&gt;
* '''pandas&amp;amp;nbsp;(&amp;gt;=1.1.4)''' – Handles RF metadata and experiment logs.  &lt;br /&gt;
* '''pyyaml&amp;amp;nbsp;(&amp;gt;=5.3.1)''' – Loads YAML configuration files for USRP setup parameters.  &lt;br /&gt;
* '''nptdms''' – Enables reading and writing NI TDMS waveform files.  &lt;br /&gt;
* '''sigmf''' – Implements Signal Metadata Format for storing IQ recordings with metadata.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# '''Install dependencies for the example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Advanced Python Dependencies for Spectrum Sensing and ML Integration ===&lt;br /&gt;
These additional libraries enable advanced visualization, AI/ML inference, and web dashboard integration.&lt;br /&gt;
&lt;br /&gt;
* '''dash''' – Web-based dashboard framework for real-time spectrum visualization.  &lt;br /&gt;
* '''dash-daq''' – Adds instrumentation UI components for live control.  &lt;br /&gt;
* '''dash-bootstrap-components''' – Provides responsive Bootstrap layouts for Dash apps.  &lt;br /&gt;
* '''pillow&amp;amp;nbsp;(&amp;gt;=10.3.0)''' – Handles image saving and processing of spectrograms.  &lt;br /&gt;
* '''torch&amp;amp;nbsp;(&amp;gt;=1.8.0)''' – PyTorch deep learning framework for inference/training.  &lt;br /&gt;
* '''torchvision&amp;amp;nbsp;(&amp;gt;=0.9.0)''' – Vision utilities for preprocessing spectrograms.  &lt;br /&gt;
* '''ultralytics&amp;amp;nbsp;(&amp;gt;=8.2.34)''' – YOLOv8 utilities for signal classification.  &lt;br /&gt;
* '''gitpython&amp;amp;nbsp;(&amp;gt;=3.1.30)''' – Enables automated Git repository handling.  &lt;br /&gt;
* '''opencv-python&amp;amp;nbsp;(&amp;gt;=4.1.1)''' – Performs spectrogram image manipulation.  &lt;br /&gt;
* '''seaborn&amp;amp;nbsp;(&amp;gt;=0.11.0)''' – Provides data visualization and heatmaps.  &lt;br /&gt;
* '''tqdm&amp;amp;nbsp;(&amp;gt;=4.66.3)''' – Adds progress bars during capture or inference.  &lt;br /&gt;
* '''requests&amp;amp;nbsp;(&amp;gt;=2.32.2)''' – Handles model downloads and HTTP requests.  &lt;br /&gt;
* '''setuptools&amp;amp;nbsp;(&amp;gt;=70.0.0,&amp;amp;nbsp;&amp;lt;80.9.0)''' – Ensures consistent Python packaging.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Example ===&lt;br /&gt;
The configuration files are located at:  &lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/config/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They define:&lt;br /&gt;
* RF parameters: center frequency, gain, bandwidth, sample rate  &lt;br /&gt;
* Device type (e.g., B206) and connection interface  &lt;br /&gt;
* Capture duration and number of records  &lt;br /&gt;
* Output directory and naming conventions  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Key Configuration Parameters ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Description !! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;rx_recorded_data_path&amp;quot;&amp;lt;/code&amp;gt; || Path to store captured IQ data || &amp;lt;code&amp;gt;&amp;quot;datasets/records/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;nrecords&amp;quot;&amp;lt;/code&amp;gt; || Number of snapshots to capture || &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;freq&amp;quot;&amp;lt;/code&amp;gt; || Center frequency (Hz) || &amp;lt;code&amp;gt;3.6e9&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;rate&amp;quot;&amp;lt;/code&amp;gt; || IQ sample rate (Sps) || &amp;lt;code&amp;gt;50e6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;bandwidth&amp;quot;&amp;lt;/code&amp;gt; || Analog bandwidth || &amp;lt;code&amp;gt;20e6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;gain&amp;quot;&amp;lt;/code&amp;gt; || RX gain (dB) || &amp;lt;code&amp;gt;40&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;duration&amp;quot;&amp;lt;/code&amp;gt; || Recording duration (s) || &amp;lt;code&amp;gt;0.04&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;rate_source&amp;quot;&amp;lt;/code&amp;gt; || Sample rate mode || &amp;lt;code&amp;gt;&amp;quot;user_defined&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;captured_data_file_name&amp;quot;&amp;lt;/code&amp;gt; || Prefix for SigMF files || &amp;lt;code&amp;gt;&amp;quot;rx-waveform-td-rec-&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;antenna&amp;quot;&amp;lt;/code&amp;gt; || Antenna port || &amp;lt;code&amp;gt;&amp;quot;TX/RX&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;clock_reference&amp;quot;&amp;lt;/code&amp;gt; || Reference clock || &amp;lt;code&amp;gt;&amp;quot;internal&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Execution ===&lt;br /&gt;
(a) Run the UI application:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
python spectrum_sensing.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launching, you’ll see:&lt;br /&gt;
&amp;lt;code&amp;gt;Dash is running on http://127.0.0.1:8050/&amp;lt;/code&amp;gt;  &lt;br /&gt;
Open this link in your browser to access the dashboard.&lt;br /&gt;
&lt;br /&gt;
* Load a configuration file from the dashboard.&lt;br /&gt;
* Click '''Start''' to begin sensing.&lt;br /&gt;
* IQ samples will be captured and saved in SigMF format at:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Dashboard.png|thumb|800px|center|AI-based spectrum sensing dashboard using NI USRP SDRs and NI RF Data Recording API]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' AI-based spectrum sensing system using NI USRP SDRs, the NI RF Data Recording API, and a web-based control dashboard.&lt;br /&gt;
&lt;br /&gt;
=== System Workflow Description ===&lt;br /&gt;
The figure above shows the end-to-end architecture for AI-driven spectrum sensing with NI USRPs.&lt;br /&gt;
&lt;br /&gt;
* '''TX Configuration:''' User selects the waveform to transmit; it can be sent over-the-air or via RF cable.  &lt;br /&gt;
* '''Start/Stop Control:''' Clicking '''Start''' launches the sensing and recording pipeline with live indicators for SDR initialization and capture status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(b) Run the inference script:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
python inference.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The inference script processes IQ recordings stored in:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It converts each dataset into a spectrogram image saved at:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The spectrograms are passed to a pre-trained '''YOLOv5''' model for signal classification.&lt;br /&gt;
&lt;br /&gt;
[[File:inference_running.png|thumb|800px|center|YOLOv5-based live inference detecting a 5G NR signal with 96% confidence]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Real-time inference output showing successful detection of a 5G&amp;amp;nbsp;NR waveform using a pre-trained YOLOv5 model.&lt;br /&gt;
&lt;br /&gt;
=== Live Inference Visualization ===&lt;br /&gt;
After IQ samples are captured and stored, &amp;lt;code&amp;gt;inference.py&amp;lt;/code&amp;gt; generates spectrograms and classifies signals.  &lt;br /&gt;
In the shown example, the YOLOv5 model identifies a 5G&amp;amp;nbsp;NR waveform (&amp;lt;code&amp;gt;5GNR&amp;lt;/code&amp;gt;) with a confidence score of '''0.96'''.  &lt;br /&gt;
Detected signals show high classification accuracy and clear time-frequency boundaries.&lt;br /&gt;
&lt;br /&gt;
== Spectrum Sensing Application with NI USRP and NVIDIA Jetson ==&lt;br /&gt;
&lt;br /&gt;
This section summarizes the official documentation for running the &amp;lt;code&amp;gt;spectrum_sensing&amp;lt;/code&amp;gt; application using NI USRP SDR hardware on NVIDIA Jetson platforms.&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
The application demonstrates real-time spectrum sensing by interfacing a NI USRP SDR (e.g., B206) with an NVIDIA Jetson device over USB&amp;amp;nbsp;3.0. The Jetson hosts the NI RF Data Recording API and executes the entire data acquisition pipeline — including RF configuration, signal capture, visualization, and data formatting into SigMF files.  &lt;br /&gt;
Because Jetson devices are ARM-based, a Jetson-specific PyTorch package is available from NVIDIA, while TorchVision must be built from source.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PyTorch Installation ===&lt;br /&gt;
# Install required dependencies:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install python3-pip libopenblas-base libopenmpi-dev&lt;br /&gt;
sudo pip3 install --upgrade pip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# For Python&amp;amp;nbsp;3.10 and JetPack&amp;amp;nbsp;6.2.1, install PyTorch&amp;amp;nbsp;2.5:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://developer.download.nvidia.com/compute/redist/jp/v61/pytorch/torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl&lt;br /&gt;
pip3 install torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Fix libcusparse-related errors (if any):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/tmp_cusparselt &amp;amp;&amp;amp; cd ~/tmp_cusparselt&lt;br /&gt;
wget https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-aarch64/libcusparse_lt-linux-aarch64-0.7.0.0-archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
tar xf *.tar.xz&lt;br /&gt;
sudo cp -a libcusparse_lt-linux-aarch64-0.7.0.0-archive/include/* /usr/local/cuda/include/&lt;br /&gt;
sudo cp -a libcusparse_lt-linux-aarch64-0.7.0.0-archive/lib/* /usr/local/cuda/lib64/&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
cd ~ &amp;amp;&amp;amp; rm -rf ~/tmp_cusparselt&lt;br /&gt;
&lt;br /&gt;
# Verify installation&lt;br /&gt;
python3 -c &amp;quot;import torch; print(torch.__version__); print(torch.cuda.is_available())&amp;quot;&lt;br /&gt;
# Output should show:&lt;br /&gt;
# 2.5.0a0+872 and True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PyTorch Vision (torchvision) ===&lt;br /&gt;
# Install dependencies:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev \&lt;br /&gt;
libavcodec-dev libavformat-dev libswscale-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Clone the source repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone --branch v0.20.0 https://github.com/pytorch/vision.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Build and install:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd vision&lt;br /&gt;
export BUILD_VERSION=0.20.0&lt;br /&gt;
python3 setup.py build&lt;br /&gt;
python3 setup.py install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Virtual Environment (Optional) ===&lt;br /&gt;
To isolate the working environment from the system:&lt;br /&gt;
# Install &amp;lt;code&amp;gt;venv&amp;lt;/code&amp;gt; support:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python3.10-venv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Create and activate environment:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3.10 -m venv .venv --system-site-packages --prompt demo&lt;br /&gt;
source .venv/bin/activate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Requirements ===&lt;br /&gt;
# Install SigMF:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install sigmf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Install npTDMS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install npTDMS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Colored terminal output:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install colored termcolor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Dash and dashboard components:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install dash dash_daq dash_bootstrap_components&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# YOLOv5 pre-requirements:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install -U &amp;quot;gitpython&amp;gt;=3.1.30&amp;quot; &amp;quot;matplotlib&amp;gt;=3.3&amp;quot; &amp;quot;numpy&amp;gt;=1.23.5&amp;quot; \&lt;br /&gt;
&amp;quot;opencv-python&amp;gt;=4.1.1&amp;quot; &amp;quot;pillow&amp;gt;=10.3.0&amp;quot; psutil &amp;quot;PyYAML&amp;gt;=5.3.1&amp;quot; \&lt;br /&gt;
&amp;quot;requests&amp;gt;=2.32.2&amp;quot; &amp;quot;scipy&amp;gt;=1.4.1&amp;quot; &amp;quot;thop&amp;gt;=0.1.1&amp;quot; &amp;quot;tqdm&amp;gt;=4.66.3&amp;quot; \&lt;br /&gt;
&amp;quot;ultralytics&amp;gt;=8.2.34&amp;quot; &amp;quot;setuptools&amp;gt;=70.0.0&amp;quot; &amp;quot;seaborn&amp;gt;=0.11.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== YOLOv5 Model ===&lt;br /&gt;
The demo application uses the YOLOv5 image detection model from Ultralytics (AGPL-3.0 license).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ultralytics/yolov5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demo Code and Data Recording API ===&lt;br /&gt;
Clone the NI RF Data Recording API repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ni/ni-rf-data-recording-api.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After all dependencies are installed, the Spectrum Sensing use case can be executed on Jetson following the same procedure as described for the x86 system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Waveform Creation and Signal Recording Pipeline ==&lt;br /&gt;
&lt;br /&gt;
This section outlines the process for generating waveforms, capturing RF data using the NI-RF Data Recording API, and producing spectrogram images for machine learning applications.&lt;br /&gt;
&lt;br /&gt;
=== Waveform Repository ===&lt;br /&gt;
The &amp;lt;code&amp;gt;src/waveforms/&amp;lt;/code&amp;gt; directory contains all pre-generated test signals used with the NI RF Data Recording API.  &lt;br /&gt;
It includes four subfolders: '''5G&amp;amp;nbsp;NR''', '''LTE''', '''Wi-Fi''', and '''Radar'''.&lt;br /&gt;
&lt;br /&gt;
Each waveform consists of:&lt;br /&gt;
* '''IQ Data File''' (&amp;lt;code&amp;gt;.tdms&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt;) — contains complex baseband samples.  &lt;br /&gt;
* '''Configuration File''' (&amp;lt;code&amp;gt;.rfws&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.yaml&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;.csv&amp;lt;/code&amp;gt;) — describes waveform parameters such as bandwidth and sampling rate.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* LTE: &amp;lt;code&amp;gt;LTE_TDD_DL_20MHz_....tdms&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;...rfws&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Radar: &amp;lt;code&amp;gt;Radar_Waveform_BW_2M.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;Radar_Waveform_BW_2M.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:waveform_repository.png|thumb|800px|center|Waveform repository flow]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Waveform repository structure showing pre-generated 5G&amp;amp;nbsp;NR, LTE, Wi-Fi, and Radar signals mapped through the Wireless Link Parameter Dictionary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Waveform Sources ===&lt;br /&gt;
* '''RFmx Waveform Creator:''' Used for generating 5G&amp;amp;nbsp;NR and LTE waveforms (&amp;lt;code&amp;gt;.tdms&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.rfws&amp;lt;/code&amp;gt;).  &lt;br /&gt;
* '''IEEE MATLAB Wi-Fi Generator:''' Used for Wi-Fi test signals (&amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.csv&amp;lt;/code&amp;gt;).  &lt;br /&gt;
* '''Simulated Radar Generator (MATLAB):''' Used for radar signals (&amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.yaml&amp;lt;/code&amp;gt;).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Usage in the API ===&lt;br /&gt;
During recording, JSON/YAML configuration files in &amp;lt;code&amp;gt;src/config/&amp;lt;/code&amp;gt; reference these waveform paths.  &lt;br /&gt;
The &amp;lt;code&amp;gt;wireless_link_parameter_map.yaml&amp;lt;/code&amp;gt; dictionary maps waveform configuration fields (e.g., bandwidth, sampling rate, standard) to the SigMF metadata format — ensuring standardized dataset descriptions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Recording IQ Data and Metadata via API ===&lt;br /&gt;
Once waveforms are prepared:&lt;br /&gt;
&lt;br /&gt;
# Edit the configuration file (YAML/JSON) with your TX/RX parameters such as frequency, gain, and waveform paths.  &lt;br /&gt;
# Run the recording:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 main_rf_data_recording_api.py --config path/to/your_config.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# The API maps parameters to SigMF metadata, controls USRP Tx/Rx via UHD, and writes:&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt; (binary IQ samples)&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt; (JSON metadata)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spectrogram Image Generation via Preprocessing ===&lt;br /&gt;
After dataset generation:&lt;br /&gt;
&lt;br /&gt;
* Run preprocessing scripts (e.g., &amp;lt;code&amp;gt;rf_data_pre_processing_plot.py&amp;lt;/code&amp;gt;) to visualize or convert SigMF recordings into time/frequency plots.  &lt;br /&gt;
* Generate and crop spectrograms, partitioning them into training and validation sets for ML workflows.  &lt;br /&gt;
* The structured image datasets form the foundation for AI-based spectrum classification and detection.&lt;br /&gt;
&lt;br /&gt;
This end-to-end pipeline — from waveform generation to SigMF-formatted capture and spectrogram creation — enables reproducible, metadata-rich dataset production for AI-driven spectrum sensing research.&lt;br /&gt;
&lt;br /&gt;
== How to use RF Data Recording API with user defined dataset? ==&lt;br /&gt;
To use the NI RF Data Recording API with a user-defined dataset for training and inference using YOLOv8, follow this multi-step process covering signal generation, data preprocessing, model training, and inference.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== SigMF Data and Metadata Generation ===&lt;br /&gt;
Once the transmission signal is configured, stream IQ samples and record them in '''SigMF''' format by running &amp;lt;code&amp;gt;data_recording.py&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Location of the script:&lt;br /&gt;
: &amp;lt;code&amp;gt;/ni-rf-data-recording-api/examples/spectrum_sensing&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SigMF outputs:&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;: Binary file with raw IQ samples.  &lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt;: JSON metadata (frequency, sample rate, gain, antenna, timestamps, etc.).&lt;br /&gt;
&lt;br /&gt;
The script uses your YAML/JSON control file for parameters (center frequency, sample rate, bandwidth, gain, capture duration, number of records).&lt;br /&gt;
&lt;br /&gt;
* Output directory:&lt;br /&gt;
: &amp;lt;code&amp;gt;/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These SigMF files become the primary dataset for later analysis, visualization, and ML-based classification (e.g., spectrogram-based YOLO).&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Spectrogram Generation and Dataset Preprocessing ===&lt;br /&gt;
Convert SigMF recordings into labeled spectrogram images using &amp;lt;code&amp;gt;pre-processing.py&amp;lt;/code&amp;gt;. It orchestrates:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;spectrogram_creator.py&amp;lt;/code&amp;gt; – Reads &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;, applies STFT, saves spectrogram images (e.g., in &amp;lt;code&amp;gt;datasets/images&amp;lt;/code&amp;gt;).&lt;br /&gt;
# &amp;lt;code&amp;gt;image_cropper.py&amp;lt;/code&amp;gt; – Removes non-signal plot artifacts (axes, labels, borders) to produce clean images for detection models.&lt;br /&gt;
# &amp;lt;code&amp;gt;dataset_partitioner.py&amp;lt;/code&amp;gt; – Splits dataset into train/val (e.g., 80/20) with balanced classes.&lt;br /&gt;
# &amp;lt;code&amp;gt;label_maker.py&amp;lt;/code&amp;gt; – Creates YOLO-compatible label files for each image in the format:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;amp;lt;class_id&amp;amp;gt; &amp;amp;lt;x_center&amp;amp;gt; &amp;amp;lt;y_center&amp;amp;gt; &amp;amp;lt;image_width&amp;amp;gt; &amp;amp;lt;image_height&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Resulting structure:'''&lt;br /&gt;
* Cleaned spectrogram images: &amp;lt;code&amp;gt;datasets/images&amp;lt;/code&amp;gt;  &lt;br /&gt;
* YOLO labels: &amp;lt;code&amp;gt;datasets/labels&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Splits: &amp;lt;code&amp;gt;datasets/train&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;datasets/val&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This pipeline yields a model-ready dataset for accurate training and inference.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Dataset Configuration: &amp;lt;code&amp;gt;data.yaml&amp;lt;/code&amp;gt; for YOLO Training ===&lt;br /&gt;
'''Fields:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;train&amp;lt;/code&amp;gt; – Path to training images  &lt;br /&gt;
* &amp;lt;code&amp;gt;val&amp;lt;/code&amp;gt; – Path to validation images  &lt;br /&gt;
* &amp;lt;code&amp;gt;nc&amp;lt;/code&amp;gt; – Number of classes  &lt;br /&gt;
* &amp;lt;code&amp;gt;names&amp;lt;/code&amp;gt; – List of class names in class-id order&lt;br /&gt;
&lt;br /&gt;
'''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
train: datasets/train/images&lt;br /&gt;
val: datasets/val/images&lt;br /&gt;
&lt;br /&gt;
nc: 3&lt;br /&gt;
names: ['5gnr', 'wifi', 'lte']&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use this file with YOLOv5/YOLOv8 training commands. Store it in the project root or inside the dataset folder.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Model Training Using YOLOv8 (Example) ===&lt;br /&gt;
&lt;br /&gt;
==== Cloning YOLOv8 from Source ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Clone Ultralytics YOLOv8&lt;br /&gt;
git clone https://github.com/ultralytics/ultralytics.git&lt;br /&gt;
cd ultralytics&lt;br /&gt;
&lt;br /&gt;
# (Optional) Virtual environment&lt;br /&gt;
python3 -m venv .venv&lt;br /&gt;
source .venv/bin/activate   # Linux/macOS&lt;br /&gt;
# .venv\Scripts\activate    # Windows PowerShell&lt;br /&gt;
&lt;br /&gt;
# Install in editable mode&lt;br /&gt;
pip install --upgrade pip&lt;br /&gt;
pip install -e .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yolo help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== YOLOv8 Training Command ====&lt;br /&gt;
Train the nano model on your spectrogram dataset:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yolo detect train \&lt;br /&gt;
  model=yolov8n.pt \&lt;br /&gt;
  data=/content/dataset/data.yaml \&lt;br /&gt;
  epochs=50 \&lt;br /&gt;
  imgsz=640 \&lt;br /&gt;
  batch=16 \&lt;br /&gt;
  project=burst_train \&lt;br /&gt;
  name=yolov8n_spectrogram&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter notes:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;model=yolov8n.pt&amp;lt;/code&amp;gt; – Base architecture (nano).  &lt;br /&gt;
* &amp;lt;code&amp;gt;data=...&amp;lt;/code&amp;gt; – Path to &amp;lt;code&amp;gt;data.yaml&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* &amp;lt;code&amp;gt;epochs=50&amp;lt;/code&amp;gt; – Training epochs.  &lt;br /&gt;
* &amp;lt;code&amp;gt;imgsz=640&amp;lt;/code&amp;gt; – Input resolution.  &lt;br /&gt;
* &amp;lt;code&amp;gt;batch=16&amp;lt;/code&amp;gt; – Batch size.  &lt;br /&gt;
* &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; – Output directories for logs/artifacts.&lt;br /&gt;
&lt;br /&gt;
'''Outputs:'''&lt;br /&gt;
: &amp;lt;code&amp;gt;burst_train/yolov8n_spectrogram&amp;lt;/code&amp;gt;  &lt;br /&gt;
(Weights, logs, confusion matrices, PR curves, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The NI RF Data Recording API provides a powerful and flexible framework for real-time spectrum sensing, dataset generation, and AI-driven signal classification across both x86 and embedded platforms such as NVIDIA Jetson.  &lt;br /&gt;
By leveraging standardized formats like SigMF and integrating deep learning models such as YOLOv8, the framework enables a complete end-to-end workflow—from RF signal acquisition and metadata tagging to spectrogram creation, training, and live inference.  &lt;br /&gt;
&lt;br /&gt;
This modular approach allows researchers and engineers to rapidly prototype, evaluate, and deploy intelligent wireless sensing systems that bridge the gap between traditional SDR experimentation and modern AI-based spectrum analytics.  &lt;br /&gt;
The same unified methodology can be extended to multi-band sensing, interference detection, cognitive radio, and 6G spectrum intelligence research, ensuring scalability and reproducibility in both laboratory and field environments.&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	<entry>
		<id>https://kb.ettus.com/index.php?title=AI-Based_Spectrum_Sensing_with_Nvidia_Jetson_and_USRP&amp;diff=6315</id>
		<title>AI-Based Spectrum Sensing with Nvidia Jetson and USRP</title>
		<link rel="alternate" type="text/html" href="https://kb.ettus.com/index.php?title=AI-Based_Spectrum_Sensing_with_Nvidia_Jetson_and_USRP&amp;diff=6315"/>
				<updated>2025-11-05T12:20:37Z</updated>
		
		<summary type="html">&lt;p&gt;NeelPandeya: /* USRP B206 Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Application Note Number and Authors ==&lt;br /&gt;
&lt;br /&gt;
'''AN-811'''&lt;br /&gt;
&lt;br /&gt;
== Authors ==&lt;br /&gt;
&lt;br /&gt;
Bharat Agarwal and Neel Pandeya&lt;br /&gt;
&lt;br /&gt;
== Executive Summary ==&lt;br /&gt;
&lt;br /&gt;
This application note presents a complete framework for real-time spectrum sensing using NI Universal Serial Radio Peripheral (USRP) Software-Defined Radios (SDRs) and NVIDIA Jetson or standard x86 compute platforms. The framework is not limited to a single USRP model—the X410, X310, and B2xx series (e.g., B206) can all be used as transmitters or receivers depending on the deployment scenario. The solution leverages the NI-RF Data Recording API to enable scalable RF data acquisition, SigMF-compliant metadata tagging, and seamless integration with machine learning workflows.&lt;br /&gt;
&lt;br /&gt;
The document outlines three core usage scenarios:&lt;br /&gt;
&lt;br /&gt;
# x86-Based Development Workflow: Using a workstation or server-class x86 machine, paired with high-end USRPs such as the X410 or X310, the system supports wideband spectrum sensing (up to 400&amp;amp;nbsp;MHz instantaneous bandwidth per channel). This configuration is ideal for laboratory development, algorithm training, and high-throughput dataset generation.&lt;br /&gt;
# Jetson-Based Embedded Sensing (Primary Use Case): Using an NVIDIA Jetson platform as the host (e.g., AGX Orin) with a compact B206 SDR as receiver and an X410 as transmitter, the system delivers efficient edge inference with GPU acceleration. Although the B206 limits the instantaneous bandwidth to 56&amp;amp;nbsp;MHz, this configuration emphasizes portability, low power, and real-time embedded operation.&lt;br /&gt;
# User-Defined Dataset Integration: In addition to live spectrum sensing, the framework supports integration and generation of user-defined datasets. This functionality extends the applicability of the system beyond real-time capture, enabling flexible experimentation, reproducibility, and seamless AI/ML dataset preparation. Two complementary capabilities are supported:&lt;br /&gt;
## SigMF Dataset Recording&lt;br /&gt;
##* All captured RF data is stored in the Signal Metadata Format (SigMF).&lt;br /&gt;
##* SigMF pairs raw IQ samples (&amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;) with a corresponding metadata file (&amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt;) in JSON format.&lt;br /&gt;
##* Metadata describes acquisition parameters such as frequency, bandwidth, gain, device type, timestamps, and scenario context.&lt;br /&gt;
##* Being human-readable and portable, SigMF datasets can be used across a wide range of software environments, making them ideal for wireless research, spectrum monitoring, AI/ML training for 6G, and regulatory validation.&lt;br /&gt;
##* Example: A spectrum sensing session at 3.5&amp;amp;nbsp;GHz, 20&amp;amp;nbsp;MHz bandwidth, and 10-second duration will result in a SigMF-compliant dataset ready for further processing or ML-based classification.&lt;br /&gt;
## Continuous Waveform Playback with User-Defined Files&lt;br /&gt;
##* The platform supports continuous transmission and replay of user-defined waveforms in TDMS or MATLAB (.mat) formats.&lt;br /&gt;
##* This allows testing with standard-compliant signals such as 5G NR, LTE, Radar, or Wi-Fi, or custom-designed waveforms.&lt;br /&gt;
##* By replaying predefined waveforms, researchers can benchmark algorithms, validate coexistence scenarios, and reproduce experiments consistently across testbeds.&lt;br /&gt;
##* Example: A MATLAB-generated LTE downlink frame can be continuously transmitted via an X410 while a B206 or X310 records the received signal in SigMF format for classification.&lt;br /&gt;
&lt;br /&gt;
Together, these capabilities ensure that the NI-RF Data Recording API can handle both dataset creation (SigMF-based recording) and waveform-driven experimentation (TDMS/MAT playback), thereby covering the entire pipeline from signal generation to ML-ready dataset production.&lt;br /&gt;
&lt;br /&gt;
By combining NI's reliable SDR hardware with NVIDIA's efficient edge compute platforms and a unified data interface, this solution supports a wide range of spectrum intelligence applications—from interference detection and dynamic spectrum access to embedded RF analytics. The methodology enables scalable deployment from lab to field, supporting real-time insights and long-term data collection in a streamlined, modular pipeline.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USRP B206 Overview ==&lt;br /&gt;
&lt;br /&gt;
[[File: USRP-b206_mini_01.jpg|thumb|center|400px|NI USRP B206 Software Defined Radio]]&lt;br /&gt;
&lt;br /&gt;
The USRP B206 is a compact, low-cost SDR developed by NI / Ettus Research. It supports full-duplex operation with one transmit and one receive channel, making it ideal for a variety of wireless communication and sensing applications. The B206 covers a wide RF frequency range from 70&amp;amp;nbsp;MHz to 6&amp;amp;nbsp;GHz and supports up to 56&amp;amp;nbsp;MHz of instantaneous bandwidth. This makes it suitable for applications such as spectrum sensing, dynamic spectrum access, and cognitive radio.&lt;br /&gt;
&lt;br /&gt;
The device connects to a host system via a high-speed USB&amp;amp;nbsp;3.0 interface, which enables data rates sufficient for wideband real-time signal acquisition and transmission. It also supports USB&amp;amp;nbsp;2.0 with reduced performance. The B206 includes a Xilinx Spartan-6 FPGA for onboard signal processing and is powered either through USB or an external DC supply, the latter being preferred for optimal RF performance.&lt;br /&gt;
&lt;br /&gt;
The USRP B206 is compatible with both x86 and ARM-based hosts, including embedded platforms like the NVIDIA Jetson series. This enables portable and energy-efficient deployment of spectrum sensing pipelines at the network edge. It is fully supported by the open-source UHD and integrates with popular SDR development tools such as GNU Radio, MATLAB, and LabVIEW.&lt;br /&gt;
&lt;br /&gt;
Typical use cases for the B206 include real-time spectrum monitoring, wireless signal classification using machine learning, prototyping of 4G/5G systems, and SDR education and training. Its compact size and flexible software support make it an excellent choice for both laboratory research and embedded field deployments.&lt;br /&gt;
&lt;br /&gt;
'''Key Features of the USRP B206:'''&lt;br /&gt;
* RF Capabilities: 1 TX, 1 RX, independently tunable, RF transceiver, 70&amp;amp;nbsp;MHz to 6&amp;amp;nbsp;GHz, up to 56&amp;amp;nbsp;MHz bandwidth&lt;br /&gt;
* Programmable Logic: FPGA: Xilinx Spartan-6 XC6SLX150&lt;br /&gt;
* Software: UHD 4.9 or later, GNU Radio, C/C++ and Python&lt;br /&gt;
* Synchronization: REF (external 10&amp;amp;nbsp;MHz or PPS reference)&lt;br /&gt;
* Digital Interfaces: USB&amp;amp;nbsp;3.0, GPIO (8 I/O lines with 3.3&amp;amp;nbsp;V I/O voltage), and JTAG&lt;br /&gt;
* Power, form factor: 5&amp;amp;nbsp;V&amp;amp;nbsp;DC, 0.9&amp;amp;nbsp;A maximum; Board-only: 84.3&amp;amp;nbsp;mm × 51.0&amp;amp;nbsp;mm × 8.7&amp;amp;nbsp;mm; Enclosed: 84.9&amp;amp;nbsp;mm × 55.7&amp;amp;nbsp;mm × 19.8&amp;amp;nbsp;mm&lt;br /&gt;
&lt;br /&gt;
== NI-RF Data Recording API Overview ==&lt;br /&gt;
&lt;br /&gt;
The '''[https://github.com/ni/ni-rf-data-recording-api/blob/main/README.md NI-RF Data Recording API]''' is an open-source, Python-based framework developed by National Instruments (NI) in collaboration with the Genesys Lab at Northeastern University. It is designed to streamline RF data collection using NI USRP SDRs, with support for structured metadata via the '''[https://github.com/sigmf/SigMF Signal Metadata Format (SigMF)]'''.&lt;br /&gt;
&lt;br /&gt;
=== Purpose and Scope ===&lt;br /&gt;
This API enables efficient recording, labeling, and replay of real-world RF signals. It is particularly suited for generating datasets used in AI/ML workflows, wireless research, and spectrum monitoring. The framework abstracts low-level UHD interactions, allowing users to define RF parameters through JSON or YAML configuration files.&lt;br /&gt;
&lt;br /&gt;
=== Key Features ===&lt;br /&gt;
* Support for both signal transmission and reception using NI USRP hardware.&lt;br /&gt;
* Native recording in SigMF format, capturing both IQ samples and rich metadata.&lt;br /&gt;
* Python-based, modular architecture supporting custom extensions and automation.&lt;br /&gt;
* Multi-SDR support via coordinated configuration files.&lt;br /&gt;
* Sample waveform libraries included (e.g., LTE, NR, radar, Wi-Fi) in TDMS/MAT formats.&lt;br /&gt;
* Utility scripts for standalone use: transmit, receive, replay, or continuous capture.&lt;br /&gt;
&lt;br /&gt;
=== System Requirements ===&lt;br /&gt;
The API has been validated on Ubuntu&amp;amp;nbsp;22.04 systems with the following dependencies:&lt;br /&gt;
* At least one compatible NI USRP device (e.g., B206, X310, X410).&lt;br /&gt;
* Installed UHD drivers with Python bindings.&lt;br /&gt;
* Python&amp;amp;nbsp;3.x and required libraries (e.g., NumPy, PyYAML).&lt;br /&gt;
* Optional Docker environment for containerized deployment.&lt;br /&gt;
&lt;br /&gt;
=== Relevance to Our Use Cases ===&lt;br /&gt;
In this application note, we explore three deployment scenarios of the NI-RF Data Recording API:&lt;br /&gt;
&lt;br /&gt;
# x86-based Spectrum Sensing: Using the API on a desktop or server-class system, the USRP&amp;amp;nbsp;B206 is configured to perform spectrum capture, and the data is saved in SigMF format. This setup is optimal for high-throughput and lab-based development environments.&lt;br /&gt;
# Embedded Jetson Platform: The API is deployed on an NVIDIA Jetson device interfaced with the USRP&amp;amp;nbsp;B206 over USB&amp;amp;nbsp;3.0. This enables compact, power-efficient, and real-time spectrum sensing at the edge. Onboard GPU resources are leveraged for FFT computation and ML inference.&lt;br /&gt;
# User-Defined Dataset Integration: The API provides flexible support for user-defined datasets through two complementary capabilities:&lt;br /&gt;
## Importing Pre-Generated Data: Users can seamlessly import and tag custom IQ recordings (e.g., SigMF-compliant files or previously captured spectrum data) into the repository. This enables integration of external datasets for benchmarking, anomaly detection, or reproducible research.&lt;br /&gt;
## Data Lake Storage for AI/ML Pipelines: All captured and imported datasets can be stored in a structured data lake, significantly simplifying automated dataset selection, management, and preprocessing. This facilitates streamlined workflows for AI/ML model design, training, and validation in spectrum sensing and 6G wireless research.&lt;br /&gt;
&lt;br /&gt;
The NI-RF Data Recording API provides a flexible, hardware-agnostic foundation for both live RF capture and offline dataset handling, making it central to spectrum intelligence and edge-aware signal processing workflows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reference Architecture for Spectrum Sensing ==&lt;br /&gt;
&lt;br /&gt;
To support flexible and scalable RF data collection workflows, we propose a dual-mode reference architecture that demonstrates spectrum sensing using NI USRP hardware with two compute platforms: a high-performance x86 host and an embedded NVIDIA Jetson device. Both configurations utilize the NI-RF Data Recording API to capture, store, and manage RF data in SigMF format. The hardware setup supports real-time signal acquisition, tagging, and streaming for downstream machine learning or signal intelligence tasks.&lt;br /&gt;
&lt;br /&gt;
=== x86-Based High-Performance Architecture ===&lt;br /&gt;
&lt;br /&gt;
[[File: x86.png|thumb|center|900px|x86-based spectrum sensing architecture using NI USRP B206 and X410]]&lt;br /&gt;
&lt;br /&gt;
In this high-performance lab-based deployment, a desktop-class x86 host system is used. The USRP&amp;amp;nbsp;X410 (or alternatively the X310) serves as the receiver, connected to the workstation via a 10&amp;amp;nbsp;GbE Ethernet interface to support high-throughput data streaming. The transmitter is also an NI USRP&amp;amp;nbsp;X410, connected through a 10&amp;amp;nbsp;GbE link via a network switch. A 30&amp;amp;nbsp;dB attenuator is inserted between the TX and RX paths to protect the RF front-end from saturation during close-proximity transmission. &lt;br /&gt;
&lt;br /&gt;
This configuration demonstrates the full high-performance capability of the platform, enabling wideband spectrum sensing and scalable data capture.&lt;br /&gt;
&lt;br /&gt;
Host System Specifications:&lt;br /&gt;
* Operating System: Ubuntu&amp;amp;nbsp;22.04  &lt;br /&gt;
* UHD Compatibility: The NI-RF Data Recording API supports UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.2. Most devices such as the X410 or X310 work with older versions, but the B206 requires UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.9.  &lt;br /&gt;
* Processor: Intel&amp;amp;nbsp;Xeon&amp;amp;nbsp;w7-2495X (24&amp;amp;nbsp;cores, 2.5&amp;amp;nbsp;GHz)&lt;br /&gt;
&lt;br /&gt;
This setup is suited for '''high-throughput spectrum recording, algorithm development, and dataset generation''' in a lab environment. It offers large storage capacity, stable power, and CPU-intensive post-processing capabilities.&lt;br /&gt;
&lt;br /&gt;
=== Jetson-Based Embedded Architecture ===&lt;br /&gt;
&lt;br /&gt;
[[File:SS_with_x86.png|thumb|center|900px|Jetson-based spectrum sensing architecture using NI USRP B2x0 and X410]]&lt;br /&gt;
&lt;br /&gt;
In this configuration, an NVIDIA Jetson module serves as the edge processing unit. The Jetson connects to a USRP&amp;amp;nbsp;B2x0 (e.g., B206) over a USB&amp;amp;nbsp;3.0 interface, acting as the spectrum sensor (receiver). A USRP&amp;amp;nbsp;X410 acts as the transmitter, linked via a LAN switch. A 30&amp;amp;nbsp;dB attenuator is used between the TX and RX paths to prevent RF front-end saturation during close-proximity transmission.&lt;br /&gt;
&lt;br /&gt;
The Jetson executes the RF data acquisition pipeline and leverages onboard GPU resources to perform high-speed FFTs, signal classification, and real-time metadata tagging. A display, keyboard, and mouse connect directly for standalone operation.&lt;br /&gt;
&lt;br /&gt;
'Jetson System Specifications:&lt;br /&gt;
* Operating System: Ubuntu&amp;amp;nbsp;22.04 with JetPack&amp;amp;nbsp;6.2.1  &lt;br /&gt;
* UHD Version: 4.9  &lt;br /&gt;
* Processor: NVIDIA&amp;amp;nbsp;Jetson&amp;amp;nbsp;AGX&amp;amp;nbsp;Orin&amp;amp;nbsp;64&amp;amp;nbsp;GB  &lt;br /&gt;
&lt;br /&gt;
This configuration is ideal for low-power, field-deployable sensing nodes where edge inference, minimal latency, and portability are required. The NI-RF Data Recording API runs natively on ARM-based Jetson, ensuring consistent data acquisition across architectures.&lt;br /&gt;
&lt;br /&gt;
=== Common Features Across Architectures ===&lt;br /&gt;
Both architectures support:&lt;br /&gt;
* Real-time IQ sample recording and metadata tagging using NI-RF Data Recording API  &lt;br /&gt;
* Integration with SigMF-compliant datasets  &lt;br /&gt;
* Wideband RF capture across 70&amp;amp;nbsp;MHz–6&amp;amp;nbsp;GHz (with B206)  &lt;br /&gt;
* Configurable gain, center frequency, bandwidth, and LO offsets via JSON/YAML files  &lt;br /&gt;
&lt;br /&gt;
The dual-platform design allows researchers to prototype, validate, and deploy spectrum sensing pipelines in a variety of scenarios—from power-constrained edge sensing to scalable, cloud-connected research environments.&lt;br /&gt;
&lt;br /&gt;
== Bill of Materials ==&lt;br /&gt;
&lt;br /&gt;
This section lists the hardware and software components required to replicate the spectrum sensing setup described in the reference architectures.&lt;br /&gt;
&lt;br /&gt;
=== Jetson-Based Embedded Spectrum Sensing Setup ===&lt;br /&gt;
* '''NI USRP B206 SDR (Receiver)'''&lt;br /&gt;
** Frequency Range: 70&amp;amp;nbsp;MHz – 6&amp;amp;nbsp;GHz  &lt;br /&gt;
** Bandwidth: up to 56&amp;amp;nbsp;MHz  &lt;br /&gt;
** Interface: USB&amp;amp;nbsp;3.0  &lt;br /&gt;
&lt;br /&gt;
* '''NI USRP X410 SDR (Transmitter)'''&lt;br /&gt;
** Frequency Range: up to 7.2&amp;amp;nbsp;GHz  &lt;br /&gt;
** Bandwidth: up to 1&amp;amp;nbsp;GHz per channel  &lt;br /&gt;
** Interface: 10&amp;amp;nbsp;GbE (SFP+)  &lt;br /&gt;
&lt;br /&gt;
* '''NVIDIA Jetson AGX Orin 64&amp;amp;nbsp;GB Developer Kit (Edge Host)'''&lt;br /&gt;
** GPU: 2048-core Ampere GPU  &lt;br /&gt;
** Interfaces: USB&amp;amp;nbsp;3.0, 10&amp;amp;nbsp;Gb Ethernet  &lt;br /&gt;
** OS: Ubuntu&amp;amp;nbsp;22.04 (ARM64) with JetPack&amp;amp;nbsp;6.2.1  &lt;br /&gt;
&lt;br /&gt;
* '''Display and Input Devices'''&lt;br /&gt;
** Monitor (DisplayPort or HDMI)  &lt;br /&gt;
** USB Keyboard and Mouse  &lt;br /&gt;
&lt;br /&gt;
* '''30&amp;amp;nbsp;dB RF Attenuator'''&lt;br /&gt;
** Protects RX frontend during loopback or close-range transmission  &lt;br /&gt;
&lt;br /&gt;
* '''Network Switch (Gigabit)'''&lt;br /&gt;
** Routes LAN traffic between Jetson and X410  &lt;br /&gt;
&lt;br /&gt;
* '''RF Cables and Antennas or Dummy Load'''  &lt;br /&gt;
* '''Power Supply for USRP X410 and Jetson'''  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable (for Jetson–B206 interface)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== x86-Based Spectrum Sensing Setup ===&lt;br /&gt;
* '''NI USRP B206 SDR (Receiver)'''&lt;br /&gt;
* '''NI USRP X410 SDR (Transmitter)'''&lt;br /&gt;
* '''x86 Workstation or Server (Host PC)'''&lt;br /&gt;
** CPU: Intel&amp;amp;nbsp;Xeon&amp;amp;nbsp;w7-2495X, 24&amp;amp;nbsp;cores, 2.5&amp;amp;nbsp;GHz  &lt;br /&gt;
** OS: Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS  &lt;br /&gt;
** UHD: Version&amp;amp;nbsp;4.8 or newer  &lt;br /&gt;
** RAM: Minimum 32&amp;amp;nbsp;GB recommended  &lt;br /&gt;
** Storage: SSD for high-speed IQ data logging  &lt;br /&gt;
&lt;br /&gt;
* '''Display and Input Devices'''&lt;br /&gt;
** Monitor (DisplayPort or HDMI)  &lt;br /&gt;
** USB Keyboard and Mouse  &lt;br /&gt;
&lt;br /&gt;
* '''30&amp;amp;nbsp;dB RF Attenuator'''  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable (PC–B206 interface)'''  &lt;br /&gt;
* '''Ethernet Cables (PC and X410 to switch)'''  &lt;br /&gt;
* '''Network Switch (Gigabit or 10&amp;amp;nbsp;GbE)'''  &lt;br /&gt;
* '''Coaxial Cable (RF connection between TX and RX)'''&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
=== Software Requirements (Common) ===&lt;br /&gt;
* '''NI-RF Data Recording API'''&lt;br /&gt;
** GitHub: [https://github.com/ni/ni-rf-data-recording-api https://github.com/ni/ni-rf-data-recording-api]  &lt;br /&gt;
** Supports SigMF format, YAML/JSON configuration, UHD interface  &lt;br /&gt;
&lt;br /&gt;
* '''UHD (USRP Hardware Driver)'''&lt;br /&gt;
** Version&amp;amp;nbsp;4.9 recommended  &lt;br /&gt;
** Installed natively  &lt;br /&gt;
&lt;br /&gt;
* '''Python&amp;amp;nbsp;3.x Environment'''&lt;br /&gt;
** Required packages: numpy, pyyaml, sigmf, uhd, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Hardware Requirements ==&lt;br /&gt;
&lt;br /&gt;
To implement the proposed spectrum sensing architecture, the following hardware components are required. The selected devices are chosen for their compatibility with the NI-RF Data Recording API, support for UHD drivers, and ability to perform high-speed RF acquisition and processing.&lt;br /&gt;
&lt;br /&gt;
=== NI USRP B206 (Receiver SDR) ===&lt;br /&gt;
The USRP&amp;amp;nbsp;B206 is a low-cost, full-duplex software-defined radio with wide RF coverage and USB&amp;amp;nbsp;3.0 connectivity, making it ideal for spectrum sensing tasks.&lt;br /&gt;
&lt;br /&gt;
* '''Frequency Range:''' 70&amp;amp;nbsp;MHz&amp;amp;nbsp;–&amp;amp;nbsp;6&amp;amp;nbsp;GHz  &lt;br /&gt;
* '''Bandwidth:''' Up to 56&amp;amp;nbsp;MHz  &lt;br /&gt;
* '''Interface:''' USB&amp;amp;nbsp;3.0  &lt;br /&gt;
* '''Form Factor:''' Compact, bus-powered or DC-powered  &lt;br /&gt;
* '''Purchase Link:''' [https://www.ettus.com/all-products/usrp-b200/ https://www.ettus.com/all-products/usrp-b200/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NI USRP X410 (Transmitter SDR) ===&lt;br /&gt;
The USRP&amp;amp;nbsp;X410 is a high-performance, 4-channel SDR capable of wideband signal transmission and reception. It supports 10&amp;amp;nbsp;GbE connectivity and real-time FPGA processing.&lt;br /&gt;
&lt;br /&gt;
* '''Frequency Range:''' Up to 7.2&amp;amp;nbsp;GHz  &lt;br /&gt;
* '''Bandwidth:''' Up to 1&amp;amp;nbsp;GHz per channel  &lt;br /&gt;
* '''Interface:''' 10&amp;amp;nbsp;GbE&amp;amp;nbsp;(SFP+), PCIe&amp;amp;nbsp;(optional)  &lt;br /&gt;
* '''FPGA:''' Xilinx Zynq Ultrascale+ RFSoC  &lt;br /&gt;
* '''Purchase Link:''' [https://www.ettus.com/all-products/usrp-x410/ https://www.ettus.com/all-products/usrp-x410/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NVIDIA Jetson AGX Orin 64&amp;amp;nbsp;GB Developer Kit (Edge Host) ===&lt;br /&gt;
The Jetson&amp;amp;nbsp;AGX&amp;amp;nbsp;Orin series provides a powerful embedded GPU platform for edge AI and RF signal processing.&lt;br /&gt;
&lt;br /&gt;
* '''GPU:''' NVIDIA Ampere architecture  &lt;br /&gt;
* '''RAM:''' 32&amp;amp;nbsp;GB&amp;amp;nbsp;/&amp;amp;nbsp;64&amp;amp;nbsp;GB LPDDR4/5  &lt;br /&gt;
* '''Connectivity:''' USB&amp;amp;nbsp;3.0, Ethernet, GPIO  &lt;br /&gt;
* '''OS Support:''' Ubuntu&amp;amp;nbsp;20.04&amp;amp;nbsp;/&amp;amp;nbsp;22.04&amp;amp;nbsp;(ARM64)  &lt;br /&gt;
* '''Purchase Link:''' [https://store.nvidia.com/jetson/store/ https://store.nvidia.com/jetson/store/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Network Switch (Gigabit or 10&amp;amp;nbsp;GbE) ===&lt;br /&gt;
A managed or unmanaged Ethernet switch is required to route LAN traffic between the Jetson or x86 host and the USRP&amp;amp;nbsp;X410.&lt;br /&gt;
&lt;br /&gt;
* '''Recommended:''' Netgear&amp;amp;nbsp;GS108, Mikrotik&amp;amp;nbsp;CRS305, or Cisco&amp;amp;nbsp;CBS350  &lt;br /&gt;
* '''Typical Ports:''' 8+ (Gigabit or 10&amp;amp;nbsp;GbE&amp;amp;nbsp;SFP+)  &lt;br /&gt;
* '''Example Link:''' [https://www.netgear.com/business/wired/switches/smart/gs108/ https://www.netgear.com/business/wired/switches/smart/gs108/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== High-Performance x86 Host (Optional for Lab Use) ===&lt;br /&gt;
An x86 workstation is recommended for development, high-throughput data collection, or as an alternative to Jetson in a lab environment.&lt;br /&gt;
&lt;br /&gt;
* '''Processor:''' Minimum specification of an 8-core CPU at 3&amp;amp;nbsp;GHz or higher (e.g., Intel&amp;amp;nbsp;Xeon or equivalent). Higher core counts (e.g., 24-core&amp;amp;nbsp;Xeon&amp;amp;nbsp;W7-2495X) can improve throughput and parallel data processing but are not mandatory.  &lt;br /&gt;
* '''RAM:''' 64&amp;amp;nbsp;GB or more  &lt;br /&gt;
* '''Storage:''' NVMe SSD for high-speed data logging  &lt;br /&gt;
* '''Operating System:''' Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS  &lt;br /&gt;
* '''Form Factor:''' Tower workstation or server&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RF Accessories ===&lt;br /&gt;
* '''RF Coaxial Cables (SMA)'''  &lt;br /&gt;
* '''30&amp;amp;nbsp;dB Attenuator''' – Protects RX during close TX–RX loopback tests  &lt;br /&gt;
* '''Antennas''' (Wideband or band-specific)  &lt;br /&gt;
* '''Dummy Load''' (for isolated lab TX tests)  &lt;br /&gt;
* '''USB&amp;amp;nbsp;3.0 Cable''' (for USRP&amp;amp;nbsp;B206)  &lt;br /&gt;
* '''Ethernet Cables''' (Cat&amp;amp;nbsp;6 or SFP+ DAC for X410)  &lt;br /&gt;
* '''Power Supplies:'''&lt;br /&gt;
** Jetson: 19&amp;amp;nbsp;V&amp;amp;nbsp;/&amp;amp;nbsp;4.74&amp;amp;nbsp;A adapter (usually included)  &lt;br /&gt;
** X410: External DC or rack supply per specifications&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Software Requirements ==&lt;br /&gt;
&lt;br /&gt;
This section outlines the required software components for enabling spectrum sensing using the NI-RF Data Recording API with USRP&amp;amp;nbsp;B206/X410 and NVIDIA Jetson or x86 hosts. These tools are compatible across both embedded and desktop-class platforms and support real-time signal acquisition and metadata tagging in SigMF format.&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu Operating System ===&lt;br /&gt;
* '''Version:''' Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS (Jetson) / Ubuntu&amp;amp;nbsp;22.04&amp;amp;nbsp;LTS (x86 recommended)&lt;br /&gt;
* '''Download Link:''' [https://ubuntu.com/download https://ubuntu.com/download]&lt;br /&gt;
* '''Jetson OS Image:''' JetPack&amp;amp;nbsp;SDK includes Ubuntu and NVIDIA drivers  &lt;br /&gt;
* '''JetPack Link:''' [https://developer.nvidia.com/embedded/jetpack https://developer.nvidia.com/embedded/jetpack]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== NI-RF Data Recording API ===&lt;br /&gt;
* '''Description:''' Open-source Python API developed by NI and the Genesys Lab (Northeastern University) for recording and labeling RF data in SigMF format using USRP devices.  &lt;br /&gt;
* '''Features:''' Configurable YAML/JSON setups, multi-SDR coordination, SigMF conversion, supports transmission/reception workflows.  &lt;br /&gt;
* '''Repository:''' [https://github.com/ni/ni-rf-data-recording-api https://github.com/ni/ni-rf-data-recording-api]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UHD – USRP Hardware Driver ===&lt;br /&gt;
* '''Description:''' The official driver and API library for controlling and interfacing with all NI/Ettus USRP SDR hardware. Required for low-level communication between Python and the hardware.  &lt;br /&gt;
* '''Version:''' The NI-RF Data Recording API requires a UHD version that supports the selected USRP device:  &lt;br /&gt;
** For X410 (and other X-Series): UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.2 (first stable release UHD&amp;amp;nbsp;4.4 recommended)  &lt;br /&gt;
** For B206: UHD&amp;amp;nbsp;≥&amp;amp;nbsp;4.9 required  &lt;br /&gt;
* '''Repository:''' [https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]  &lt;br /&gt;
* '''Install Guide:''' [https://kb.ettus.com/Building_and_Installing_the_USRP_Open-Source_Toolchain_(UHD_and_GNU_Radio)_on_Linux UHD and GNU&amp;amp;nbsp;Radio Install Guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Environment ===&lt;br /&gt;
* '''Version:''' Python&amp;amp;nbsp;3.10.12 or newer  &lt;br /&gt;
* '''Required Packages:'''  &lt;br /&gt;
** &amp;lt;code&amp;gt;numpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pyyaml&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;sigmf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uhd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scipy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;matplotlib&amp;lt;/code&amp;gt;, etc.  &lt;br /&gt;
* '''Package Manager:''' &amp;lt;code&amp;gt;pip&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;conda&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Recommended Setup:''' Create a Python virtual environment for isolation and reproducibility.  &lt;br /&gt;
* '''Download Link:''' [https://www.python.org/ https://www.python.org/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SigMF Library (Python) ===&lt;br /&gt;
* '''Description:''' Used for generating and parsing metadata in the Signal Metadata Format (SigMF), enabling dataset interoperability and ML dataset labeling.  &lt;br /&gt;
* '''Supported Version:''' Validated with '''SigMF&amp;amp;nbsp;1.0.0''' (later versions such as&amp;amp;nbsp;1.1.x or&amp;amp;nbsp;1.2.x introduce major changes and have not been validated).  &lt;br /&gt;
* '''Repository:''' [https://github.com/gnuradio/sigmf-numpy https://github.com/gnuradio/sigmf-numpy]  &lt;br /&gt;
* '''Installation Command:''' &amp;lt;code&amp;gt;pip install sigmf==1.0.0&amp;lt;/code&amp;gt;  &lt;br /&gt;
* '''Reference:''' For more details, see the [https://github.com/ni/ni-rf-data-recording-api/tree/main/docs NI RF Data Recording API Getting Started Guide].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the UHD Software ==&lt;br /&gt;
&lt;br /&gt;
This section explains how to build and install the USRP Hardware Driver (UHD) from source code. At the time of this writing, the recommended version is '''UHD&amp;amp;nbsp;4.9'''.&lt;br /&gt;
&lt;br /&gt;
* It is strongly recommended to build UHD from source rather than installing from binary packages to ensure compatibility and access to the latest updates.  &lt;br /&gt;
* For x86/64 Ubuntu systems with released UHD versions available, you may install via APT Debian packages.  &lt;br /&gt;
* For Jetson (ARM64) systems, UHD must be built from source since no binary packages are provided.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
Before building UHD, install all required dependencies (Ubuntu&amp;amp;nbsp;22.04):&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If your system already has another UHD version installed, remove it first:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt remove libuhd* uhd-host&lt;br /&gt;
sudo rm -rf /usr/lib/uhd /usr/include/uhd /usr/local/lib/uhd /usr/local/include/uhd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install build dependencies:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y \&lt;br /&gt;
  cmake g++ libboost-all-dev libusb-1.0-0-dev \&lt;br /&gt;
  libuhd-dev python3 python3-mako python3-numpy \&lt;br /&gt;
  python3-requests python3-ruamel.yaml libfftw3-dev \&lt;br /&gt;
  libqt5opengl5-dev qtbase5-dev qtchooser qt5-qmake \&lt;br /&gt;
  qtbase5-dev-tools doxygen&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone the UHD repository and check out version '''v4.9.0.0''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/EttusResearch/uhd.git&lt;br /&gt;
cd uhd&lt;br /&gt;
git checkout v4.9.0.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Build and install UHD:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd host&lt;br /&gt;
mkdir build &amp;amp;&amp;amp; cd build&lt;br /&gt;
cmake ..&lt;br /&gt;
make -j$(nproc)&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
export LD_LIBRARY_PATH=/usr/local/lib&lt;br /&gt;
sudo usrp_images_downloader&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify the installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_usrp_probe&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For more details, see the official UHD GitHub page:  &lt;br /&gt;
[https://github.com/EttusResearch/uhd https://github.com/EttusResearch/uhd]&lt;br /&gt;
&lt;br /&gt;
[[File:fae8d810-08f0-4ae3-ab87-5b6a31eeaa66.png|thumb|400px|center|uhd_usrp_probe output for B206]]&lt;br /&gt;
[[File:5026560b-fc07-4f77-953c-c17f41acfccc.png|thumb|400px|center|uhd_find_devices output for N310 and X410]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Examples of UHD utilities used for USRP probing and device discovery.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Post UHD Installation Tasks ===&lt;br /&gt;
# '''Download USRP images'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo /usr/local/bin/uhd_images_downloader&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Add USB udev rule''' (can be limited to specific vendor/device IDs)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo nano /etc/udev/rules.d/99-usb.rules&lt;br /&gt;
# Add this line:&lt;br /&gt;
# SUBSYSTEM==&amp;quot;usb&amp;quot;,MODE=&amp;quot;0666&amp;quot;&lt;br /&gt;
sudo udevadm control --reload-rules&lt;br /&gt;
sudo udevadm trigger&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Unplug and replug the USB device if it was already connected.&lt;br /&gt;
&lt;br /&gt;
# '''Enable Python UHD API visibility'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;/usr/local/lib/python3.10/site-packages&amp;quot; | \&lt;br /&gt;
sudo tee /usr/local/lib/python3.10/dist-packages/local-site-packages.pth&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== UHD Installation Verification ===&lt;br /&gt;
# '''Find connected USRP devices'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uhd_find_devices&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Run throughput benchmark on the B2x0 device'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
/usr/local/lib/uhd/examples/benchmark_rate --args &amp;quot;type=b200&amp;quot; --rx_rate 10e6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Run Python throughput benchmark'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3.10 /usr/local/lib/uhd/examples/python/benchmark_rate.py --args &amp;quot;type=b200&amp;quot; --rx_rate 10e6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing and Configuring the USRP X410 Radio ==&lt;br /&gt;
&lt;br /&gt;
For detailed documentation, see the official Ettus manual:  &lt;br /&gt;
[https://files.ettus.com/manual/page_usrp_x4xx.html https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Connecting to the X410 ===&lt;br /&gt;
You can connect to the USRP X410 using either of the following interfaces:&lt;br /&gt;
* Ethernet (RJ45)&lt;br /&gt;
* USB-C JTAG Console&lt;br /&gt;
&lt;br /&gt;
If you cannot connect to the X410 (e.g., because it has a static IP address):&lt;br /&gt;
&lt;br /&gt;
# Connect the USRP to your PC using a USB-C ↔ USB cable.  &lt;br /&gt;
  See the '''Serial connection''' section in the Ettus manual: [https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
# Change the static IP to a DHCP-assigned IP.  &lt;br /&gt;
  See the '''Network interfaces''' section: [https://files.ettus.com/manual/page_usrp_x4xx.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updating the Filesystem ===&lt;br /&gt;
For full details, refer to the Ettus manual section: [https://files.ettus.com/manual/page_usrp_x4xx.html Updating Filesystems].&lt;br /&gt;
&lt;br /&gt;
The easiest method is to perform the update directly on the X410 using the built-in &amp;lt;code&amp;gt;usrp_update_fs&amp;lt;/code&amp;gt; utility:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Login to the USRP&lt;br /&gt;
ssh root@usrp_ip&lt;br /&gt;
&lt;br /&gt;
# Update filesystem to UHD 4.9&lt;br /&gt;
usrp_update_fs -t UHD-4.9&lt;br /&gt;
&lt;br /&gt;
# Or install the UHD master version&lt;br /&gt;
usrp_update_fs -t master&lt;br /&gt;
&lt;br /&gt;
# Reboot the USRP&lt;br /&gt;
reboot&lt;br /&gt;
&lt;br /&gt;
# If the reboot works and the device is functional, commit the changes&lt;br /&gt;
mender commit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updating the FPGA Image ===&lt;br /&gt;
For details, see: [https://files.ettus.com/manual/page_usrp_x4xx.html Updating the FPGA].&lt;br /&gt;
&lt;br /&gt;
You can verify and benchmark the X410 performance using the UHD example utility:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./benchmark_rate --args=&amp;quot;mgmt_addr=10.89.12.177,addr=192.168.10.2,\&lt;br /&gt;
second_addr=192.168.11.2,clock_source=internal,time_source=internal&amp;quot; \&lt;br /&gt;
--rx_rate 200e6 --channels 0 --rx_channels 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing Spectrum Sensing Example on x86 Architecture ==&lt;br /&gt;
&lt;br /&gt;
This section provides a detailed procedure for installing and running the Spectrum Sensing example on an x86 architecture.  &lt;br /&gt;
The '''spectrum_sensing''' folder within the NI-RF Data Recording API repository provides a ready-to-run demonstration of live RF spectrum sensing using a single receiver (e.g., USRP&amp;amp;nbsp;B206/X410) connected to an x86 host.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setup Instructions ===&lt;br /&gt;
# '''Clone the repository:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ni/ni-rf-data-recording-api.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Clone the YOLOv5 repository:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ultralytics/yolov5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''Install dependencies for NI RF Data Recording API:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ni-rf-data-recording-api&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Package Dependencies ===&lt;br /&gt;
The following Python packages are required to run the spectrum sensing pipeline using the NI-RF Data Recording API.  &lt;br /&gt;
&lt;br /&gt;
* '''termcolor''' – Prints colored text in terminal for log readability.  &lt;br /&gt;
* '''numpy&amp;amp;nbsp;(&amp;gt;=1.23.5,&amp;amp;nbsp;&amp;lt;2.0.0)''' – Core numerical library for IQ array operations, FFTs, and signal processing.  &lt;br /&gt;
* '''scipy&amp;amp;nbsp;(&amp;gt;=1.4.1)''' – Used for filtering, spectral analysis, and mathematical routines.  &lt;br /&gt;
* '''matplotlib&amp;amp;nbsp;(&amp;gt;=3.3)''' – Generates spectrum plots, spectrograms, and PSD visualizations.  &lt;br /&gt;
* '''pandas&amp;amp;nbsp;(&amp;gt;=1.1.4)''' – Handles RF metadata and experiment logs.  &lt;br /&gt;
* '''pyyaml&amp;amp;nbsp;(&amp;gt;=5.3.1)''' – Loads YAML configuration files for USRP setup parameters.  &lt;br /&gt;
* '''nptdms''' – Enables reading and writing NI TDMS waveform files.  &lt;br /&gt;
* '''sigmf''' – Implements Signal Metadata Format for storing IQ recordings with metadata.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# '''Install dependencies for the example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
pip install -r requirements.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Advanced Python Dependencies for Spectrum Sensing and ML Integration ===&lt;br /&gt;
These additional libraries enable advanced visualization, AI/ML inference, and web dashboard integration.&lt;br /&gt;
&lt;br /&gt;
* '''dash''' – Web-based dashboard framework for real-time spectrum visualization.  &lt;br /&gt;
* '''dash-daq''' – Adds instrumentation UI components for live control.  &lt;br /&gt;
* '''dash-bootstrap-components''' – Provides responsive Bootstrap layouts for Dash apps.  &lt;br /&gt;
* '''pillow&amp;amp;nbsp;(&amp;gt;=10.3.0)''' – Handles image saving and processing of spectrograms.  &lt;br /&gt;
* '''torch&amp;amp;nbsp;(&amp;gt;=1.8.0)''' – PyTorch deep learning framework for inference/training.  &lt;br /&gt;
* '''torchvision&amp;amp;nbsp;(&amp;gt;=0.9.0)''' – Vision utilities for preprocessing spectrograms.  &lt;br /&gt;
* '''ultralytics&amp;amp;nbsp;(&amp;gt;=8.2.34)''' – YOLOv8 utilities for signal classification.  &lt;br /&gt;
* '''gitpython&amp;amp;nbsp;(&amp;gt;=3.1.30)''' – Enables automated Git repository handling.  &lt;br /&gt;
* '''opencv-python&amp;amp;nbsp;(&amp;gt;=4.1.1)''' – Performs spectrogram image manipulation.  &lt;br /&gt;
* '''seaborn&amp;amp;nbsp;(&amp;gt;=0.11.0)''' – Provides data visualization and heatmaps.  &lt;br /&gt;
* '''tqdm&amp;amp;nbsp;(&amp;gt;=4.66.3)''' – Adds progress bars during capture or inference.  &lt;br /&gt;
* '''requests&amp;amp;nbsp;(&amp;gt;=2.32.2)''' – Handles model downloads and HTTP requests.  &lt;br /&gt;
* '''setuptools&amp;amp;nbsp;(&amp;gt;=70.0.0,&amp;amp;nbsp;&amp;lt;80.9.0)''' – Ensures consistent Python packaging.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Configuring the Example ===&lt;br /&gt;
The configuration files are located at:  &lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/config/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They define:&lt;br /&gt;
* RF parameters: center frequency, gain, bandwidth, sample rate  &lt;br /&gt;
* Device type (e.g., B206) and connection interface  &lt;br /&gt;
* Capture duration and number of records  &lt;br /&gt;
* Output directory and naming conventions  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Key Configuration Parameters ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Description !! Example&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;rx_recorded_data_path&amp;quot;&amp;lt;/code&amp;gt; || Path to store captured IQ data || &amp;lt;code&amp;gt;&amp;quot;datasets/records/&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;nrecords&amp;quot;&amp;lt;/code&amp;gt; || Number of snapshots to capture || &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;freq&amp;quot;&amp;lt;/code&amp;gt; || Center frequency (Hz) || &amp;lt;code&amp;gt;3.6e9&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;rate&amp;quot;&amp;lt;/code&amp;gt; || IQ sample rate (Sps) || &amp;lt;code&amp;gt;50e6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;bandwidth&amp;quot;&amp;lt;/code&amp;gt; || Analog bandwidth || &amp;lt;code&amp;gt;20e6&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;gain&amp;quot;&amp;lt;/code&amp;gt; || RX gain (dB) || &amp;lt;code&amp;gt;40&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;duration&amp;quot;&amp;lt;/code&amp;gt; || Recording duration (s) || &amp;lt;code&amp;gt;0.04&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;rate_source&amp;quot;&amp;lt;/code&amp;gt; || Sample rate mode || &amp;lt;code&amp;gt;&amp;quot;user_defined&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;captured_data_file_name&amp;quot;&amp;lt;/code&amp;gt; || Prefix for SigMF files || &amp;lt;code&amp;gt;&amp;quot;rx-waveform-td-rec-&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;antenna&amp;quot;&amp;lt;/code&amp;gt; || Antenna port || &amp;lt;code&amp;gt;&amp;quot;TX/RX&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;quot;clock_reference&amp;quot;&amp;lt;/code&amp;gt; || Reference clock || &amp;lt;code&amp;gt;&amp;quot;internal&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Execution ===&lt;br /&gt;
(a) Run the UI application:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
python spectrum_sensing.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After launching, you’ll see:&lt;br /&gt;
&amp;lt;code&amp;gt;Dash is running on http://127.0.0.1:8050/&amp;lt;/code&amp;gt;  &lt;br /&gt;
Open this link in your browser to access the dashboard.&lt;br /&gt;
&lt;br /&gt;
* Load a configuration file from the dashboard.&lt;br /&gt;
* Click '''Start''' to begin sensing.&lt;br /&gt;
* IQ samples will be captured and saved in SigMF format at:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Dashboard.png|thumb|800px|center|AI-based spectrum sensing dashboard using NI USRP SDRs and NI RF Data Recording API]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' AI-based spectrum sensing system using NI USRP SDRs, the NI RF Data Recording API, and a web-based control dashboard.&lt;br /&gt;
&lt;br /&gt;
=== System Workflow Description ===&lt;br /&gt;
The figure above shows the end-to-end architecture for AI-driven spectrum sensing with NI USRPs.&lt;br /&gt;
&lt;br /&gt;
* '''TX Configuration:''' User selects the waveform to transmit; it can be sent over-the-air or via RF cable.  &lt;br /&gt;
* '''Start/Stop Control:''' Clicking '''Start''' launches the sensing and recording pipeline with live indicators for SDR initialization and capture status.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(b) Run the inference script:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd ~/ni-rf-data-recording-api/examples/spectrum_sensing&lt;br /&gt;
python inference.py&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The inference script processes IQ recordings stored in:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It converts each dataset into a spectrogram image saved at:&lt;br /&gt;
&amp;lt;code&amp;gt;~/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/images&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The spectrograms are passed to a pre-trained '''YOLOv5''' model for signal classification.&lt;br /&gt;
&lt;br /&gt;
[[File:inference_running.png|thumb|800px|center|YOLOv5-based live inference detecting a 5G NR signal with 96% confidence]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Real-time inference output showing successful detection of a 5G&amp;amp;nbsp;NR waveform using a pre-trained YOLOv5 model.&lt;br /&gt;
&lt;br /&gt;
=== Live Inference Visualization ===&lt;br /&gt;
After IQ samples are captured and stored, &amp;lt;code&amp;gt;inference.py&amp;lt;/code&amp;gt; generates spectrograms and classifies signals.  &lt;br /&gt;
In the shown example, the YOLOv5 model identifies a 5G&amp;amp;nbsp;NR waveform (&amp;lt;code&amp;gt;5GNR&amp;lt;/code&amp;gt;) with a confidence score of '''0.96'''.  &lt;br /&gt;
Detected signals show high classification accuracy and clear time-frequency boundaries.&lt;br /&gt;
&lt;br /&gt;
== Spectrum Sensing Application with NI USRP and NVIDIA Jetson ==&lt;br /&gt;
&lt;br /&gt;
This section summarizes the official documentation for running the &amp;lt;code&amp;gt;spectrum_sensing&amp;lt;/code&amp;gt; application using NI USRP SDR hardware on NVIDIA Jetson platforms.&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
The application demonstrates real-time spectrum sensing by interfacing a NI USRP SDR (e.g., B206) with an NVIDIA Jetson device over USB&amp;amp;nbsp;3.0. The Jetson hosts the NI RF Data Recording API and executes the entire data acquisition pipeline — including RF configuration, signal capture, visualization, and data formatting into SigMF files.  &lt;br /&gt;
Because Jetson devices are ARM-based, a Jetson-specific PyTorch package is available from NVIDIA, while TorchVision must be built from source.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PyTorch Installation ===&lt;br /&gt;
# Install required dependencies:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt install python3-pip libopenblas-base libopenmpi-dev&lt;br /&gt;
sudo pip3 install --upgrade pip&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# For Python&amp;amp;nbsp;3.10 and JetPack&amp;amp;nbsp;6.2.1, install PyTorch&amp;amp;nbsp;2.5:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://developer.download.nvidia.com/compute/redist/jp/v61/pytorch/torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl&lt;br /&gt;
pip3 install torch-2.5.0a0+872d972e41.nv24.08.17622132-cp310-cp310-linux_aarch64.whl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Fix libcusparse-related errors (if any):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p ~/tmp_cusparselt &amp;amp;&amp;amp; cd ~/tmp_cusparselt&lt;br /&gt;
wget https://developer.download.nvidia.com/compute/cusparselt/redist/libcusparse_lt/linux-aarch64/libcusparse_lt-linux-aarch64-0.7.0.0-archive.tar.xz&lt;br /&gt;
&lt;br /&gt;
tar xf *.tar.xz&lt;br /&gt;
sudo cp -a libcusparse_lt-linux-aarch64-0.7.0.0-archive/include/* /usr/local/cuda/include/&lt;br /&gt;
sudo cp -a libcusparse_lt-linux-aarch64-0.7.0.0-archive/lib/* /usr/local/cuda/lib64/&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
cd ~ &amp;amp;&amp;amp; rm -rf ~/tmp_cusparselt&lt;br /&gt;
&lt;br /&gt;
# Verify installation&lt;br /&gt;
python3 -c &amp;quot;import torch; print(torch.__version__); print(torch.cuda.is_available())&amp;quot;&lt;br /&gt;
# Output should show:&lt;br /&gt;
# 2.5.0a0+872 and True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== PyTorch Vision (torchvision) ===&lt;br /&gt;
# Install dependencies:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libopenblas-dev \&lt;br /&gt;
libavcodec-dev libavformat-dev libswscale-dev&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Clone the source repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone --branch v0.20.0 https://github.com/pytorch/vision.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Build and install:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd vision&lt;br /&gt;
export BUILD_VERSION=0.20.0&lt;br /&gt;
python3 setup.py build&lt;br /&gt;
python3 setup.py install&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Virtual Environment (Optional) ===&lt;br /&gt;
To isolate the working environment from the system:&lt;br /&gt;
# Install &amp;lt;code&amp;gt;venv&amp;lt;/code&amp;gt; support:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt-get install python3.10-venv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Create and activate environment:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3.10 -m venv .venv --system-site-packages --prompt demo&lt;br /&gt;
source .venv/bin/activate&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Python Requirements ===&lt;br /&gt;
# Install SigMF:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install sigmf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Install npTDMS:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install npTDMS&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Colored terminal output:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install colored termcolor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Dash and dashboard components:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install dash dash_daq dash_bootstrap_components&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# YOLOv5 pre-requirements:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
pip install -U &amp;quot;gitpython&amp;gt;=3.1.30&amp;quot; &amp;quot;matplotlib&amp;gt;=3.3&amp;quot; &amp;quot;numpy&amp;gt;=1.23.5&amp;quot; \&lt;br /&gt;
&amp;quot;opencv-python&amp;gt;=4.1.1&amp;quot; &amp;quot;pillow&amp;gt;=10.3.0&amp;quot; psutil &amp;quot;PyYAML&amp;gt;=5.3.1&amp;quot; \&lt;br /&gt;
&amp;quot;requests&amp;gt;=2.32.2&amp;quot; &amp;quot;scipy&amp;gt;=1.4.1&amp;quot; &amp;quot;thop&amp;gt;=0.1.1&amp;quot; &amp;quot;tqdm&amp;gt;=4.66.3&amp;quot; \&lt;br /&gt;
&amp;quot;ultralytics&amp;gt;=8.2.34&amp;quot; &amp;quot;setuptools&amp;gt;=70.0.0&amp;quot; &amp;quot;seaborn&amp;gt;=0.11.0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== YOLOv5 Model ===&lt;br /&gt;
The demo application uses the YOLOv5 image detection model from Ultralytics (AGPL-3.0 license).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ultralytics/yolov5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Demo Code and Data Recording API ===&lt;br /&gt;
Clone the NI RF Data Recording API repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/ni/ni-rf-data-recording-api.git&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After all dependencies are installed, the Spectrum Sensing use case can be executed on Jetson following the same procedure as described for the x86 system.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Waveform Creation and Signal Recording Pipeline ==&lt;br /&gt;
&lt;br /&gt;
This section outlines the process for generating waveforms, capturing RF data using the NI-RF Data Recording API, and producing spectrogram images for machine learning applications.&lt;br /&gt;
&lt;br /&gt;
=== Waveform Repository ===&lt;br /&gt;
The &amp;lt;code&amp;gt;src/waveforms/&amp;lt;/code&amp;gt; directory contains all pre-generated test signals used with the NI RF Data Recording API.  &lt;br /&gt;
It includes four subfolders: '''5G&amp;amp;nbsp;NR''', '''LTE''', '''Wi-Fi''', and '''Radar'''.&lt;br /&gt;
&lt;br /&gt;
Each waveform consists of:&lt;br /&gt;
* '''IQ Data File''' (&amp;lt;code&amp;gt;.tdms&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt;) — contains complex baseband samples.  &lt;br /&gt;
* '''Configuration File''' (&amp;lt;code&amp;gt;.rfws&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.yaml&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;.csv&amp;lt;/code&amp;gt;) — describes waveform parameters such as bandwidth and sampling rate.&lt;br /&gt;
&lt;br /&gt;
'''Examples:'''&lt;br /&gt;
* LTE: &amp;lt;code&amp;gt;LTE_TDD_DL_20MHz_....tdms&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;...rfws&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Radar: &amp;lt;code&amp;gt;Radar_Waveform_BW_2M.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;Radar_Waveform_BW_2M.yaml&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File: waveform_repository.png|thumb|800px|center|Waveform repository flow]]&lt;br /&gt;
&lt;br /&gt;
'''Figure:''' Waveform repository structure showing pre-generated 5G&amp;amp;nbsp;NR, LTE, Wi-Fi, and Radar signals mapped through the Wireless Link Parameter Dictionary.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Waveform Sources ===&lt;br /&gt;
* '''RFmx Waveform Creator:''' Used for generating 5G&amp;amp;nbsp;NR and LTE waveforms (&amp;lt;code&amp;gt;.tdms&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.rfws&amp;lt;/code&amp;gt;).  &lt;br /&gt;
* '''IEEE MATLAB Wi-Fi Generator:''' Used for Wi-Fi test signals (&amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.csv&amp;lt;/code&amp;gt;).  &lt;br /&gt;
* '''Simulated Radar Generator (MATLAB):''' Used for radar signals (&amp;lt;code&amp;gt;.mat&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;.yaml&amp;lt;/code&amp;gt;).  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Usage in the API ===&lt;br /&gt;
During recording, JSON/YAML configuration files in &amp;lt;code&amp;gt;src/config/&amp;lt;/code&amp;gt; reference these waveform paths.  &lt;br /&gt;
The &amp;lt;code&amp;gt;wireless_link_parameter_map.yaml&amp;lt;/code&amp;gt; dictionary maps waveform configuration fields (e.g., bandwidth, sampling rate, standard) to the SigMF metadata format — ensuring standardized dataset descriptions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Recording IQ Data and Metadata via API ===&lt;br /&gt;
Once waveforms are prepared:&lt;br /&gt;
&lt;br /&gt;
# Edit the configuration file (YAML/JSON) with your TX/RX parameters such as frequency, gain, and waveform paths.  &lt;br /&gt;
# Run the recording:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
python3 main_rf_data_recording_api.py --config path/to/your_config.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# The API maps parameters to SigMF metadata, controls USRP Tx/Rx via UHD, and writes:&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt; (binary IQ samples)&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt; (JSON metadata)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Spectrogram Image Generation via Preprocessing ===&lt;br /&gt;
After dataset generation:&lt;br /&gt;
&lt;br /&gt;
* Run preprocessing scripts (e.g., &amp;lt;code&amp;gt;rf_data_pre_processing_plot.py&amp;lt;/code&amp;gt;) to visualize or convert SigMF recordings into time/frequency plots.  &lt;br /&gt;
* Generate and crop spectrograms, partitioning them into training and validation sets for ML workflows.  &lt;br /&gt;
* The structured image datasets form the foundation for AI-based spectrum classification and detection.&lt;br /&gt;
&lt;br /&gt;
This end-to-end pipeline — from waveform generation to SigMF-formatted capture and spectrogram creation — enables reproducible, metadata-rich dataset production for AI-driven spectrum sensing research.&lt;br /&gt;
&lt;br /&gt;
== How to use RF Data Recording API with user defined dataset? ==&lt;br /&gt;
To use the NI RF Data Recording API with a user-defined dataset for training and inference using YOLOv8, follow this multi-step process covering signal generation, data preprocessing, model training, and inference.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== SigMF Data and Metadata Generation ===&lt;br /&gt;
Once the transmission signal is configured, stream IQ samples and record them in '''SigMF''' format by running &amp;lt;code&amp;gt;data_recording.py&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Location of the script:&lt;br /&gt;
: &amp;lt;code&amp;gt;/ni-rf-data-recording-api/examples/spectrum_sensing&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SigMF outputs:&lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;: Binary file with raw IQ samples.  &lt;br /&gt;
** &amp;lt;code&amp;gt;.sigmf-meta&amp;lt;/code&amp;gt;: JSON metadata (frequency, sample rate, gain, antenna, timestamps, etc.).&lt;br /&gt;
&lt;br /&gt;
The script uses your YAML/JSON control file for parameters (center frequency, sample rate, bandwidth, gain, capture duration, number of records).&lt;br /&gt;
&lt;br /&gt;
* Output directory:&lt;br /&gt;
: &amp;lt;code&amp;gt;/ni-rf-data-recording-api/examples/spectrum_sensing/datasets/records&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These SigMF files become the primary dataset for later analysis, visualization, and ML-based classification (e.g., spectrogram-based YOLO).&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Spectrogram Generation and Dataset Preprocessing ===&lt;br /&gt;
Convert SigMF recordings into labeled spectrogram images using &amp;lt;code&amp;gt;pre-processing.py&amp;lt;/code&amp;gt;. It orchestrates:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;spectrogram_creator.py&amp;lt;/code&amp;gt; – Reads &amp;lt;code&amp;gt;.sigmf-data&amp;lt;/code&amp;gt;, applies STFT, saves spectrogram images (e.g., in &amp;lt;code&amp;gt;datasets/images&amp;lt;/code&amp;gt;).&lt;br /&gt;
# &amp;lt;code&amp;gt;image_cropper.py&amp;lt;/code&amp;gt; – Removes non-signal plot artifacts (axes, labels, borders) to produce clean images for detection models.&lt;br /&gt;
# &amp;lt;code&amp;gt;dataset_partitioner.py&amp;lt;/code&amp;gt; – Splits dataset into train/val (e.g., 80/20) with balanced classes.&lt;br /&gt;
# &amp;lt;code&amp;gt;label_maker.py&amp;lt;/code&amp;gt; – Creates YOLO-compatible label files for each image in the format:&lt;br /&gt;
: &amp;lt;code&amp;gt;&amp;amp;lt;class_id&amp;amp;gt; &amp;amp;lt;x_center&amp;amp;gt; &amp;amp;lt;y_center&amp;amp;gt; &amp;amp;lt;image_width&amp;amp;gt; &amp;amp;lt;image_height&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Resulting structure:'''&lt;br /&gt;
* Cleaned spectrogram images: &amp;lt;code&amp;gt;datasets/images&amp;lt;/code&amp;gt;  &lt;br /&gt;
* YOLO labels: &amp;lt;code&amp;gt;datasets/labels&amp;lt;/code&amp;gt;  &lt;br /&gt;
* Splits: &amp;lt;code&amp;gt;datasets/train&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;datasets/val&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This pipeline yields a model-ready dataset for accurate training and inference.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Dataset Configuration: &amp;lt;code&amp;gt;data.yaml&amp;lt;/code&amp;gt; for YOLO Training ===&lt;br /&gt;
'''Fields:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;train&amp;lt;/code&amp;gt; – Path to training images  &lt;br /&gt;
* &amp;lt;code&amp;gt;val&amp;lt;/code&amp;gt; – Path to validation images  &lt;br /&gt;
* &amp;lt;code&amp;gt;nc&amp;lt;/code&amp;gt; – Number of classes  &lt;br /&gt;
* &amp;lt;code&amp;gt;names&amp;lt;/code&amp;gt; – List of class names in class-id order&lt;br /&gt;
&lt;br /&gt;
'''Example:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
train: datasets/train/images&lt;br /&gt;
val: datasets/val/images&lt;br /&gt;
&lt;br /&gt;
nc: 3&lt;br /&gt;
names: ['5gnr', 'wifi', 'lte']&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use this file with YOLOv5/YOLOv8 training commands. Store it in the project root or inside the dataset folder.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
=== Model Training Using YOLOv8 (Example) ===&lt;br /&gt;
&lt;br /&gt;
==== Cloning YOLOv8 from Source ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Clone Ultralytics YOLOv8&lt;br /&gt;
git clone https://github.com/ultralytics/ultralytics.git&lt;br /&gt;
cd ultralytics&lt;br /&gt;
&lt;br /&gt;
# (Optional) Virtual environment&lt;br /&gt;
python3 -m venv .venv&lt;br /&gt;
source .venv/bin/activate   # Linux/macOS&lt;br /&gt;
# .venv\Scripts\activate    # Windows PowerShell&lt;br /&gt;
&lt;br /&gt;
# Install in editable mode&lt;br /&gt;
pip install --upgrade pip&lt;br /&gt;
pip install -e .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yolo help&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== YOLOv8 Training Command ====&lt;br /&gt;
Train the nano model on your spectrogram dataset:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yolo detect train \&lt;br /&gt;
  model=yolov8n.pt \&lt;br /&gt;
  data=/content/dataset/data.yaml \&lt;br /&gt;
  epochs=50 \&lt;br /&gt;
  imgsz=640 \&lt;br /&gt;
  batch=16 \&lt;br /&gt;
  project=burst_train \&lt;br /&gt;
  name=yolov8n_spectrogram&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Parameter notes:'''&lt;br /&gt;
* &amp;lt;code&amp;gt;model=yolov8n.pt&amp;lt;/code&amp;gt; – Base architecture (nano).  &lt;br /&gt;
* &amp;lt;code&amp;gt;data=...&amp;lt;/code&amp;gt; – Path to &amp;lt;code&amp;gt;data.yaml&amp;lt;/code&amp;gt;.  &lt;br /&gt;
* &amp;lt;code&amp;gt;epochs=50&amp;lt;/code&amp;gt; – Training epochs.  &lt;br /&gt;
* &amp;lt;code&amp;gt;imgsz=640&amp;lt;/code&amp;gt; – Input resolution.  &lt;br /&gt;
* &amp;lt;code&amp;gt;batch=16&amp;lt;/code&amp;gt; – Batch size.  &lt;br /&gt;
* &amp;lt;code&amp;gt;project&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; – Output directories for logs/artifacts.&lt;br /&gt;
&lt;br /&gt;
'''Outputs:'''&lt;br /&gt;
: &amp;lt;code&amp;gt;burst_train/yolov8n_spectrogram&amp;lt;/code&amp;gt;  &lt;br /&gt;
(Weights, logs, confusion matrices, PR curves, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
The NI RF Data Recording API provides a powerful and flexible framework for real-time spectrum sensing, dataset generation, and AI-driven signal classification across both x86 and embedded platforms such as NVIDIA Jetson.  &lt;br /&gt;
By leveraging standardized formats like SigMF and integrating deep learning models such as YOLOv8, the framework enables a complete end-to-end workflow—from RF signal acquisition and metadata tagging to spectrogram creation, training, and live inference.  &lt;br /&gt;
&lt;br /&gt;
This modular approach allows researchers and engineers to rapidly prototype, evaluate, and deploy intelligent wireless sensing systems that bridge the gap between traditional SDR experimentation and modern AI-based spectrum analytics.  &lt;br /&gt;
The same unified methodology can be extended to multi-band sensing, interference detection, cognitive radio, and 6G spectrum intelligence research, ensuring scalability and reproducibility in both laboratory and field environments.&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Notes]]&lt;/div&gt;</summary>
		<author><name>NeelPandeya</name></author>	</entry>

	</feed>