Scenario 1 : Off-network UE2UE link
SynchREF UE (UE1)

UE1(eth0 - 10.10.10.1)--------UE2(eno1 - 10.10.10.2)

Here's an 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  #branch: master
This branch contains all the current development for DDPS
 - UE MAC<-> UE MAC for Scenario 1
 - eNB MAC<->UE MAC (NFAPI Transport)
 - RRC Extensions for “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
Validate that there are no errors
 - 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
 (if necessary, use ./build_oai -I --UE to install required packages)
 - cd lte_build_oai/build/
 - cp ../../../targets/bin/.ue* .
 - cp ../../../targets/bin/.usim* .
 - sudo insmod ../../../targets/bin/ue_ip.ko

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
 - (if necessary) 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
 - (if necessary) 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 incomming 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
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
UE2:
 - 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:
- UE1: sudo ./lte-softmodem-stub -U --emul-iface eth0
step 2:
- UE2: sudo ./lte-softmodem-stub -U --emul-iface eno1
- UE2: ./vencore_app -r #listen to incomming message from PC5-S 
step 3: 
- 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:
- UE1: sudo ./lte-softmodem-stub -U --emul-iface eth0
- UE1: ./vencore_app -d #send a PC5-Discovery-Announcement via PC5D
step 2:
- UE2: sudo ./lte-softmodem-stub -U --emul-iface eno1
- UE2: ./vencore_app -d #send a PC5-Discovery-Announcement via PC5D