Fixes to L2NFAPI_NOS1 dataplane traffic forwarding
This commit fixes a bug that makes the dataplane traffic of all the emulated UEs to go through the interface of the first UE (oaitun_ue1). The fix uses the last octet of the IP assigned to each UE to map it to its UE_id, which is then used to get its RNTI and the correct PDCP queue. For the emulator to work properly, the routing tables of the emulated UEs must also be set. This patch introduces a script (setup_routes.sh) in cmake_targets/tools that configures the routing tables. This script must be run at the UE host machine once the UEs have successfully attached, passing the number of emulated UEs as the argument. For example, in the case of 16 emulated UEs, one must run "./setup_routes.sh 16".
This commit is contained in:
Executable
+13
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
for i in $(seq 1 $1);
|
||||
do
|
||||
let table=1000+$i
|
||||
echo "sudo ip route add 10.0.1.0/24 dev oaitun_ue$i table $table"
|
||||
sudo ip route add 10.0.1.0/24 dev oaitun_ue$i table $table
|
||||
echo "sudo ip route add default via 10.0.1.1 dev oaitun_ue$i table $table"
|
||||
sudo ip route add default via 10.0.1.1 dev oaitun_ue$i table $table
|
||||
let octet=$i+1
|
||||
echo "sudo ip rule add from 10.0.1.$octet table $table"
|
||||
sudo ip rule add from 10.0.1.$octet table $table
|
||||
done
|
||||
@@ -1081,7 +1081,13 @@ pdcp_data_ind(
|
||||
pdcpHead->inst = 1;
|
||||
}
|
||||
} // nfapi_mode
|
||||
}
|
||||
} else {
|
||||
if (UE_NAS_USE_TUN) {
|
||||
pdcpHead->inst = ctxt_pP->module_id;
|
||||
} else if (ENB_NAS_USE_TUN) {
|
||||
pdcpHead->inst = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
pdcpHead->rb_id = rb_id + (ctxt_pP->module_id * LTE_maxDRB);
|
||||
pdcpHead->inst = ctxt_pP->module_id;
|
||||
|
||||
@@ -43,6 +43,7 @@ extern int otg_enabled;
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <netinet/ip.h>
|
||||
#define rtf_put write
|
||||
#define rtf_get read
|
||||
|
||||
@@ -222,7 +223,11 @@ int pdcp_fifo_read_input_sdus_fromtun (const protocol_ctxt_t *const ctxt_pP) {
|
||||
key = PDCP_COLL_KEY_DEFAULT_DRB_VALUE(ctxt.module_id, ctxt.rnti, ctxt.enb_flag);
|
||||
h_rc = hashtable_get(pdcp_coll_p, key, (void **)&pdcp_p);
|
||||
} else { // => ENB_NAS_USE_TUN
|
||||
ctxt.rnti=pdcp_eNB_UE_instance_to_rnti[0];
|
||||
/* Get the IP from a packet */
|
||||
struct ip *ip_pack = (struct ip *) nl_rx_buf;
|
||||
/* Use last octet of destination IP to get index of UE */
|
||||
int ue_indx = ((ip_pack->ip_dst.s_addr >> 24) - 2) % MAX_MOBILES_PER_ENB;
|
||||
ctxt.rnti=pdcp_eNB_UE_instance_to_rnti[ue_indx];
|
||||
ctxt.enb_flag=ENB_FLAG_YES;
|
||||
ctxt.module_id=0;
|
||||
key = PDCP_COLL_KEY_VALUE(ctxt.module_id, ctxt.rnti, ctxt.enb_flag, rab_id, SRB_FLAG_NO);
|
||||
|
||||
Reference in New Issue
Block a user