This repository contains the Multi-UE Proxy to allow UEs to communicate with a single eNB (LTE mode), or both an eNB and gNB (NSA mode), or a single gNB (SA/NR mode) using the customized OpenAirInterface (OAI) software. The OAI code is located at https://gitlab.eurecom.fr/oai/openairinterface5g. The UEs communicate to the eNB via the bypass PHY layer. Various multi-UE scenarios can be tested without the overhead of a PHY layer.
The LTE mode functional description of this multi-UE proxy is shown in the following image:
The NSA mode functional description of this multi-UE proxy is shown in the following image:
The SA mode functional description of this multi-UE proxy is shown in the following image:
The multi-UE proxy includes the following:
- Socket communciation from/to UE(s)
- Socket communication from/to eNB
- Socket communciation from/to nrUE(s)
- Socket communication from/to gNB
- LTE Proxy mode and NSA Proxy mode
- Uplink/downlink packet queueing
- nFAPI compatibility
- Logging mechanism
- Test scripts
Build and install the EpiSys version of the OAI repository.
- Open a terminal and clone openairinterface5g repo.
- git checkout develop
- Open a terminal and clone oai-lte-multi-ue-proxy repo.
- git checkout master
- If you run the proxy in loopback mode, add the following loopback interface for the VNF in the gNB.
sudo ifconfig lo: 127.0.0.2 netmask 255.0.0.0 up
cd .../openairinterface5g
source oaienv
cd cmake_targets
./build_oai --UE --eNB --nrUE --gNB --log-minimal
--log-minimal is important for proxy_testscript.py to evaluate the results
cd .../oai-lte-multi-ue-proxy
make
./proxy_testscript.py --num-ues 1 --mode=lte
./proxy_testscript.py --num-ues 1 --mode=nsa
./proxy_testscript.py --num-ues 1 --mode=nr
See ./proxy_testscript.py --help
for more information.
The launch order is important, as follows.
- Open a terminal and launch eNB
cd .../openairinterface5g
source oaienv
cd cmake_targets
sudo -E ./ran_build/build/lte-softmodem -O ../ci-scripts/conf_files/episci/proxy_rcc.band7.tm1.nfapi.conf --noS1 --nsa | tee eNB.log 2>&1
- Open a terminal and launch gNB
cd .../openairinterface5g
source oaienv
cd cmake_targets
sudo -E ./ran_build/build/nr-softmodem -O ../ci-scripts/conf_files/episci/proxy_rcc.band78.tm1.106PRB.nfapi.conf --nfapi 2 --noS1 --nsa | tee gNB.log 2>&1
- Open a terminal and launch proxy
NUMBER_OF_UES is the total number of UEs.
cd .../oai-lte-multi-ue-proxy
number_of_ues=1
sudo -E ./build/proxy $number_of_ues --nsa enb_ipaddr gnb_ipaddr proxy_ipaddr ue_ipaddr
If you do not specify the parameters ending with ipaddr, the default IP addresses are the following. enb_ipaddr = 127.0.0.1 gnb_ipaddr = 127.0.0.2 proxy_ipaddr = 127.0.0.1 ue_ipaddr = 127.0.0.1
- Open a terminal and launch nrUE
nrUE NODE_ID starts from 2 from the first nrUE. If you run one more nrUE, the next NODE_ID = 3 in additional terminal.
cd .../openairinterface5g
source oaienv
cd cmake_targets
node_id=2
sudo -E ./ran_build/build/nr-uesoftmodem -O ../ci-scripts/conf_files/episci/proxy_nr-ue.nfapi.conf --nokrnmod 1 --noS1 --nfapi 5 --node-number $node_id --nsa | tee nrue_$node_id.log 2>&1
- Open a terminal and launch UE
The UE node_id starts at 2.
cd .../openairinterface5g
source oaienv
cd cmake_targets
node_id=2
sudo -E ./ran_build/build/lte-uesoftmodem -O ../ci-scripts/conf_files/episci/proxy_ue.nfapi.conf --L2-emul 5 --nokrnmod 1 --noS1 --num-ues 1 --node-number $node_id --nsa | tee ue_$node_id.log 2>&1
- Checking the log results
After running the programs for 30 seconds or more, stop the processes using Ctrl-C. Open the log files and check the following logs to verify the run results.
- gNB.log : search for "CFRA procedure succeeded" log message for each UE.
- eNB.log : search for "Sent rrcReconfigurationComplete to gNB".
- nrue_1.log : search for "Found RAR with the intended RAPID".
- ue_1.log : search for "Sent RRC_CONFIG_COMPLETE_REQ to the NR UE".
The following is an example of how to search for a particular log in the generated log file.
cat gNB.log | grep -n 'CFRA procedure succeeded'
For more information, refer to the analyze_log section of the proxy_testscript.py script.