How to use device-to-device communication (D2D, 4G)¶
⚠️ ATTENTION ⚠️
D2D is currently unfinished, the following documentation steps are likely not enough to make it work.
Scenario 1 : Off-network UE2UE link¶
SynchREF UE (UE1)
graph LR
UE1[UE1
eth0: 10.10.10.1] --- UE2[UE2
eno1: 10.10.10.2]
Example of /etc/network/interfaces configuration for UE1¶
auto eth0
iface eth0 inet static
address 10.10.10.1
netmask 255.255.255.0
gateway 10.10.10.1
Prepare the environment:¶
git clone https://gitlab.eurecom.fr/matzakos/LTE-D2D.git
cd LTE-D2D
git checkout master
This branch contains all the current development for DDPS, including: - UE MAC <-> UE MAC for Scenario 1 (off-network communication) - eNB MAC <-> UE MAC using NFAPI Transport (on-network communication) - RRC Extensions to support on-network cases
NFAPI configuration (required even for Scenario 1 target)¶
git clone https://github.com/cisco/open-nFAPI.git
cd open-nfapi
patch -p1 --dry-run < $OPENAIR_HOME/open-nfapi.oai.patch
patch -p1 < $OPENAIR_HOME/open-nfapi.oai.patch
OAI build/execute¶
export NFAPI_DIR=XXX (place where NFAPI was installed)
cd cmake_targets
./build_oai --UE --ninja #If necessary, use ./build_oai -I --UE to install required packages
cd ran_build/build/
UE1¶
sudo ifconfig oip0 10.0.0.1
sudo iptables -A POSTROUTING -t mangle -o oip0 -d 224.0.0.3 -j MARK --set-mark 3
¶
sudo ifconfig oip0 10.0.0.1
sudo iptables -A POSTROUTING -t mangle -o oip0 -d 224.0.0.3 -j MARK --set-mark 3
NOTE
If necessary, add a default gateway:
sudo route add default gw 10.10.10.1 eth0
UE2¶
sudo ifconfig oip0 10.0.0.2
sudo iptables -A POSTROUTING -t mangle -o oip0 -d 224.0.0.3 -j MARK --set-mark 3
¶
sudo ifconfig oip0 10.0.0.2
sudo iptables -A POSTROUTING -t mangle -o oip0 -d 224.0.0.3 -j MARK --set-mark 3
NOTE
If necessary, add a default gateway:
sudo route add default gw 10.10.10.1 eno1
UE1 and UE2: Get and build vencore_app from d2d-l3-stub (branch: l3_stub)¶
gcc -I . vencore_app.c -o vencore_app -lpthread
TEST ONE-TO-MANY¶
Run UE1 then UE2, for example:¶
- UE1:
sudo ./lte-softmodem-stub -U --emul-iface eth0 - UE2:
sudo ./lte-softmodem-stub -U --emul-iface eno1
Test with Ping¶
- Sender - UE1:
ping -I oip0 224.0.0.3 - Receiver - UE2: using wireshark
Test with Iperf¶
-
Sender - UE1:
iperf -c 224.0.0.3 -u -b 0.1M --bind 10.0.0.1 -t 100 -
Receiver - UE2:
sudo ./mcreceive 224.0.0.3 5001
Filter the incoming packets according to GroupL2Id: receiver (one-to-many) can discard the packets if it doesn’t belong to this group. For the moment, both sender and receiver use the same set of Ids (hardcoded)
-
UE1 (sender):
sudo ./lte-softmodem-stub -U --emul-iface eth0 ./vencore_app #send the sourceL2Id, groupL2Id to OAI ping -I oip0 224.0.0.3 -
UE2(receiver)
sudo ./lte-softmodem-stub -U --emul-iface eno1 #we can see the incomming packets from OAI log, however, cannot see from Wireshark -> they are discarded at MAC layer ./vencore_app #we can see the packets appearing in Wireshark
TEST PC5-S (UE1 -sender, UE2 - receiver) and PC5-U for ONE-TO-ONE scenario¶
Configure UE1/UE2¶
Configure ports and routing table for UE1 and UE2
UE1:
sudo ifconfig oip0 10.0.0.1
sudo iptables -A POSTROUTING -t mangle -o oip0 -d 10.0.0.2 -j MARK --set-mark 3
sudo route add default gw 10.10.10.1 eth0
sudo ifconfig oip0 10.0.0.2
sudo iptables -A POSTROUTING -t mangle -o oip0 -d 10.0.0.1 -j MARK --set-mark 3
sudo route add default gw 10.10.10.1 eno1
Step 1:¶
Run the traffic emulated over Ethernet on UE1 using lte-softmodem-stub to test the behaviour without RF board.
UE1:
sudo ./lte-softmodem-stub -U --emul-iface eth0
Step 2:¶
Run the traffic emulated over Ethernet on UE2 and set it as listening to incoming messages from PC5-S
UE2:
sudo ./lte-softmodem-stub -U --emul-iface eno1
./vencore_app -r #listen to incomming message from PC5-S
Step 3:¶
Send a message from UE1 to UE2
UE1:
./vencore_app -s #send a message via PC5-S (e.g., DirectCommunicationRequest)
Generate unicast traffic¶
UE1:
ping -I oip0 10.0.0.2
TEST PC5-D¶
Step 1:¶
Run the traffic emulated over Ethernet on UE1 and send a discovery message via PC5-D
UE1:
sudo ./lte-softmodem-stub -U --emul-iface eth0
./vencore_app -d #send a PC5-Discovery-Announcement via PC5D
Step 2:¶
Run the traffic emulated over Ethernet on UE2 and send a discovery message via PC5-D
UE2:
sudo ./lte-softmodem-stub -U --emul-iface eno1
./vencore_app -d #send a PC5-Discovery-Announcement via PC5D