Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
oai
openairinterface5G
Commits
709e5974
Commit
709e5974
authored
Feb 19, 2018
by
Panos Matzakos
Browse files
Merge branch 'master' of gitlab.eurecom.fr:matzakos/LTE-D2D
Merge with latest changes of LTE-D2D/master
parents
8b28e71b
314bf57f
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
d2d_emulator_setup.txt
View file @
709e5974
Scenario 1 : Off-network UE2UE link
SynchREF UE (UE1)
UE1(eth0 - 10.10.10.1)--------UE2(e
th0
- 10.10.10.2)
UE1(eth0 - 10.10.10.1)--------UE2(e
no1
- 10.10.10.2)
Here's an example of /etc/network/interfaces configuration for UE1
auto eth0
...
...
@@ -36,58 +36,72 @@ OAI build/execute
UE1:
- sudo ifconfig oip0 10.0.0.1
- sudo iptables -A POSTROUTING -t mangle -o oip0 -d 224.0.0.
1
-j MARK --set-mark 3
- 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 oip
1
10.0.0.2
- sudo iptables -A POSTROUTING -t mangle -o oip
1
-d 224.0.0.
1
-j MARK --set-mark 3
- (if necessary) sudo route add default gw 10.10.10.1 e
th0
- sudo ifconfig oip
0
10.0.0.2
- sudo iptables -A POSTROUTING -t mangle -o oip
0
-d 224.0.0.
3
-j MARK --set-mark 3
- (if necessary) sudo route add default gw 10.10.10.1 e
no1
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
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.
1
- Sender - UE1: ping -I oip0 224.0.0.
3
- Receiver - UE2: using wireshark
Test with Iperf
- Sender - UE1: iperf -c 224.0.0.
1
-u -b 0.1M --bind 10.0.0.1 -t 100
- Receiver - UE2: sudo ./mcreceive 224.0.0.
1
5001
- 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
- sudo ./lte-softmodem-stub -U --emul
-
iface eth0
- ./vencore_app #send the sourceL2Id, groupL2Id to OAI
- ping -I oip0 224.0.0.
1
- ping -I oip0 224.0.0.
3
UE2(receiver)
- sudo ./lte-softmodem-stub -U --emul
_
iface eno1
- 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)
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
- UE1: sudo ./lte-softmodem-stub -U --emul
-
iface eth0
step 2:
- UE2: sudo ./lte-softmodem-stub -U --emul
_
iface eno1
- 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: 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: sudo ./lte-softmodem-stub -U --emul
-
iface eno1
- UE2: ./vencore_app -d #send a PC5-Discovery-Announcement via PC5D
openair1/SIMULATION/ETH_TRANSPORT/multicast_link.c
View file @
709e5974
...
...
@@ -113,7 +113,7 @@ multicast_link_init(void)
if
(
multicast_if
!=
NULL
)
{
if
(
setsockopt
(
group_list
[
group
].
socket
,
SOL_SOCKET
,
SO_BINDTODEVICE
,
multicast_if
,
4
)
<
0
)
{
multicast_if
,
strlen
(
multicast_if
)
)
<
0
)
{
LOG_E
(
EMU
,
"[MULTICAST] ERROR : setsockopt:SO_BINDTODEVICE on interface %s, exiting ...
\n
"
,
multicast_if
);
...
...
openair2/LAYER2/MAC/config.c
View file @
709e5974
...
...
@@ -1249,6 +1249,8 @@ rrc_mac_config_req_ue(
//for D2D
#if defined(Rel10) || defined(Rel14)
int j = 0;
int k = 0;
switch (config_action) {
case CONFIG_ACTION_ADD:
if (sourceL2Id){
...
...
@@ -1257,14 +1259,32 @@ rrc_mac_config_req_ue(
}
if (destinationL2Id) {
LOG_I(MAC,"[UE %d] Configure destination L2Id 0x%08x\n", Mod_idP, *destinationL2Id );
int j = 0;
int i = 0;
for (i=0; i< MAX_NUM_DEST; i++) {
if ((UE_mac_inst[Mod_idP].destinationList[i] == 0) && (j == 0)) j = i+1;
if (UE_mac_inst[Mod_idP].destinationList[i] == *destinationL2Id) break; //destination already exists!
for (k=0; k< MAX_NUM_DEST; k++) {
if ((UE_mac_inst[Mod_idP].destinationList[k] == 0) && (j == 0)) j = k+1;
if (UE_mac_inst[Mod_idP].destinationList[k] == *destinationL2Id) break; //destination already exists!
}
if ((k == MAX_NUM_DEST) && (j > 0)) {
UE_mac_inst[Mod_idP].destinationList[j-1] = *destinationL2Id;
// UE_mac_inst[Mod_idP].numCommFlows++;
}
for (k=0; k< MAX_NUM_DEST; k++) {
LOG_I(MAC,"[UE %d] destination %d L2Id 0x%08x\n", Mod_idP,k,UE_mac_inst[Mod_idP].destinationList[k] );
}
}
//store list of LCIDs for SL
if (logicalChannelIdentity >0 ){
j = 0;
for (k=0; k< MAX_NUM_LCID; k++) {
if ((UE_mac_inst[Mod_idP].SL_LCID[k] == 0) && (j == 0)) j = k+1;
if (UE_mac_inst[Mod_idP].SL_LCID[k] == logicalChannelIdentity) break; //LCID already exists!
}
if ((k == MAX_NUM_LCID) && (j > 0)) {
UE_mac_inst[Mod_idP].SL_LCID[j-1] = logicalChannelIdentity;
UE_mac_inst[Mod_idP].numCommFlows++;
}
for (k=0; k< MAX_NUM_LCID; k++) {
LOG_I(MAC,"[UE %d] logical channel %d channel id %d\n", Mod_idP,k,UE_mac_inst[Mod_idP].SL_LCID[k] );
}
if ((i == MAX_NUM_DEST) && (j > 0)) UE_mac_inst[Mod_idP].destinationList[j-1] = *destinationL2Id;
UE_mac_inst[Mod_idP].numCommFlows++;
}
break;
case CONFIG_ACTION_REMOVE:
...
...
openair2/LAYER2/MAC/defs.h
View file @
709e5974
...
...
@@ -1355,6 +1355,7 @@ typedef struct {
//List of destinations
uint32_t
destinationList
[
MAX_NUM_DEST
];
uint8_t
numCommFlows
;
uint32_t
SL_LCID
[
MAX_NUM_LCID
];
#endif
/// pointer to TDD Configuration (NULL for FDD)
...
...
openair2/LAYER2/MAC/ue_procedures.c
View file @
709e5974
...
...
@@ -848,12 +848,17 @@ void ue_send_sl_sdu(module_id_t module_idP,
//filter incoming packet based on destination address
destinationL2Id
=
(
longh
->
DST07
<<
16
)
|
(
longh
->
DST815
<<
8
)
|
(
longh
->
DST1623
);
LOG_I
(
MAC
,
"[DestinationL2Id: 0x%08x]
\n
"
,
destinationL2Id
);
//in case of 1-n communication, verify that UE belongs to that group
int
i
=
0
;
for
(
i
=
0
;
i
<
MAX_NUM_DEST
;
i
++
)
if
(
UE_mac_inst
[
module_idP
].
destinationList
[
i
]
==
destinationL2Id
)
break
;
//match the destinationL2Id with UE L2Id or groupL2ID
if
(
!
((
destinationL2Id
==
UE_mac_inst
[
module_idP
].
sourceL2Id
)
|
(
destinationL2Id
==
UE_mac_inst
[
module_idP
].
groupL2Id
))){
if
(
!
((
destinationL2Id
==
UE_mac_inst
[
module_idP
].
sourceL2Id
)
|
(
i
<
MAX_NUM_DEST
))){
LOG_I
(
MAC
,
"[Destination Id is neither matched with Source Id nor with Group Id, drop the packet!!!
\n
"
);
return
;
}
if
(
longh
->
F
==
1
)
{
rlc_sdu_len
=
((
longh
->
L_MSB
<<
8
)
&
0x7F00
)
|
(
longh
->
L_LSB
&
0xFF
);
rlc_sdu
=
sdu
+
sizeof
(
SLSCH_SUBHEADER_24_Bit_DST_LONG
);
...
...
@@ -3225,7 +3230,7 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_
UE_MAC_INST
*
ue
=
&
UE_mac_inst
[
module_idP
];
int
rvtab
[
4
]
=
{
0
,
2
,
3
,
1
};
int
sdu_length
;
uint8_t
sl_lcids
[
2
]
=
{
3
,
10
};
//list of lcids for SL - hardcoded
//
uint8_t sl_lcids[2] = {3, 10}; //list of lcids for SL - hardcoded
int
i
=
0
;
// Note: this is hard-coded for now for the default SL configuration (4 SF PSCCH, 36 SF PSSCH)
...
...
@@ -3235,19 +3240,21 @@ SLSCH_t *ue_get_slsch(module_id_t module_idP,int CC_id,frame_t frameP,sub_frame_
if
((
absSF
%
40
)
==
0
)
{
// fill PSCCH data later in first subframe of SL period
ue
->
sltx_active
=
0
;
for
(
i
=
0
;
i
<
2
;
i
++
){
for
(
int
j
=
0
;
j
<
ue
->
numCommFlows
;
j
++
){
if
((
ue
->
sourceL2Id
>
0
)
&&
(
ue
->
destinationList
[
j
]
>
0
)
){
rlc_status
=
mac_rlc_status_ind
(
module_idP
,
0x1234
,
0
,
frameP
,
subframeP
,
ENB_FLAG_NO
,
MBMS_FLAG_NO
,
sl_lcids
[
i
],
0xFFFF
,
ue
->
sourceL2Id
,
ue
->
destinationList
[
j
]);
if
(
rlc_status
.
bytes_in_buffer
>
2
){
LOG_I
(
MAC
,
"SFN.SF %d.%d: Scheduling for %d bytes in Sidelink buffer
\n
"
,
frameP
,
subframeP
,
rlc_status
.
bytes_in_buffer
);
// Fill in group id for off-network communications
ue
->
sltx_active
=
1
;
//store LCID, destinationL2Id
ue
->
slsch_lcid
=
sl_lcids
[
i
];
ue
->
destinationL2Id
=
ue
->
destinationList
[
j
];
break
;
for
(
i
=
0
;
i
<
MAX_NUM_LCID
;
i
++
){
if
(
ue
->
SL_LCID
[
i
]
>
0
)
{
for
(
int
j
=
0
;
j
<
ue
->
numCommFlows
;
j
++
){
if
((
ue
->
sourceL2Id
>
0
)
&&
(
ue
->
destinationList
[
j
]
>
0
)
){
rlc_status
=
mac_rlc_status_ind
(
module_idP
,
0x1234
,
0
,
frameP
,
subframeP
,
ENB_FLAG_NO
,
MBMS_FLAG_NO
,
ue
->
SL_LCID
[
i
],
0xFFFF
,
ue
->
sourceL2Id
,
ue
->
destinationList
[
j
]);
if
(
rlc_status
.
bytes_in_buffer
>
2
){
LOG_I
(
MAC
,
"SFN.SF %d.%d: Scheduling for %d bytes in Sidelink buffer
\n
"
,
frameP
,
subframeP
,
rlc_status
.
bytes_in_buffer
);
// Fill in group id for off-network communications
ue
->
sltx_active
=
1
;
//store LCID, destinationL2Id
ue
->
slsch_lcid
=
ue
->
SL_LCID
[
i
];
ue
->
destinationL2Id
=
ue
->
destinationList
[
j
];
break
;
}
}
}
}
...
...
openair2/LAYER2/PDCP_v10.1.0/pdcp.h
View file @
709e5974
...
...
@@ -419,7 +419,7 @@ struct pdcp_netlink_element_s {
//TTN for D2D (PC5S)
#ifdef Rel14
#define PDCP_SOCKET_PORT_NO 9999 //temporary value
#define PC5_SIGNALLING_PAYLOAD_SIZE
5
//should be updated with a correct value
#define PC5_SIGNALLING_PAYLOAD_SIZE
100
//should be updated with a correct value
int
pdcp_pc5_sockfd
;
struct
sockaddr_in
prose_ctrl_addr
;
struct
sockaddr_in
prose_pdcp_addr
;
...
...
@@ -433,7 +433,7 @@ typedef struct {
ip_traffic_type_t
traffic_type
;
uint32_t
sourceL2Id
;
uint32_t
destinationL2Id
;
}
__attribute__
((
__packed__
))
p
dcp_data
_header_t
;
}
__attribute__
((
__packed__
))
p
c5s
_header_t
;
//new PC5S-message
typedef
struct
{
...
...
@@ -442,7 +442,7 @@ typedef struct {
//example of PC5-S messages
typedef
struct
{
p
dcp_data
_header_t
p
dcp_data
_header
;
p
c5s
_header_t
p
c5s
_header
;
union
{
uint8_t
status
;
PC5SignallingMessage
pc5_signalling_message
;
...
...
openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
View file @
709e5974
...
...
@@ -209,12 +209,12 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t* const ctxt_pP)
#ifdef PDCP_DEBUG
sl_pc5s_msg_recv
=
calloc
(
1
,
sizeof
(
sidelink_pc5s_element
));
memcpy
((
void
*
)
sl_pc5s_msg_recv
,
(
void
*
)(
sdu_p
->
data
+
sizeof
(
pdcp_data_ind_header_t
)),
sizeof
(
sidelink_pc5s_element
));
LOG_D
(
PDCP
,
"Received PC5S message, header traffic_type: %d)
\n
"
,
sl_pc5s_msg_recv
->
p
dcp_data
_header
.
traffic_type
);
LOG_D
(
PDCP
,
"Received PC5S message, header rb_id: %d)
\n
"
,
sl_pc5s_msg_recv
->
p
dcp_data
_header
.
rb_id
);
LOG_D
(
PDCP
,
"Received PC5S message, header data_size: %d)
\n
"
,
sl_pc5s_msg_recv
->
p
dcp_data
_header
.
data_size
);
LOG_D
(
PDCP
,
"Received PC5S message, header inst: %d)
\n
"
,
sl_pc5s_msg_recv
->
p
dcp_data
_header
.
inst
);
LOG_D
(
PDCP
,
"Received PC5-S message, sourceL2Id: 0x%08x
\n
)
\n
"
,
sl_pc5s_msg_recv
->
p
dcp_data
_header
.
sourceL2Id
);
LOG_D
(
PDCP
,
"Received PC5-S message, destinationL1Id: 0x%08x
\n
)
\n
"
,
sl_pc5s_msg_recv
->
p
dcp_data
_header
.
destinationL2Id
);
LOG_D
(
PDCP
,
"Received PC5S message, header traffic_type: %d)
\n
"
,
sl_pc5s_msg_recv
->
p
c5s
_header
.
traffic_type
);
LOG_D
(
PDCP
,
"Received PC5S message, header rb_id: %d)
\n
"
,
sl_pc5s_msg_recv
->
p
c5s
_header
.
rb_id
);
LOG_D
(
PDCP
,
"Received PC5S message, header data_size: %d)
\n
"
,
sl_pc5s_msg_recv
->
p
c5s
_header
.
data_size
);
LOG_D
(
PDCP
,
"Received PC5S message, header inst: %d)
\n
"
,
sl_pc5s_msg_recv
->
p
c5s
_header
.
inst
);
LOG_D
(
PDCP
,
"Received PC5-S message, sourceL2Id: 0x%08x
\n
)
\n
"
,
sl_pc5s_msg_recv
->
p
c5s
_header
.
sourceL2Id
);
LOG_D
(
PDCP
,
"Received PC5-S message, destinationL1Id: 0x%08x
\n
)
\n
"
,
sl_pc5s_msg_recv
->
p
c5s
_header
.
destinationL2Id
);
free
(
sl_pc5s_msg_recv
);
#endif
memset
(
send_buf
,
0
,
BUFSIZE
);
...
...
@@ -430,7 +430,7 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
uint32_t
sourceL2Id
;
uint32_t
groupL2Id
;
module_id_t
module_id
=
0
;
p
dcp_data
_header_t
*
p
dcp_data
_header
;
p
c5s
_header_t
*
p
c5s
_header
;
#endif
# if defined(PDCP_USE_NETLINK_QUEUES)
...
...
@@ -575,15 +575,15 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
// exit(EXIT_FAILURE);
// }
if
(
bytes_received
>
0
)
{
p
dcp_data
_header
=
calloc
(
1
,
sizeof
(
p
dcp_data
_header_t
));
memcpy
((
void
*
)
p
dcp_data
_header
,
(
void
*
)
receive_buf
,
sizeof
(
p
dcp_data
_header_t
));
p
c5s
_header
=
calloc
(
1
,
sizeof
(
p
c5s
_header_t
));
memcpy
((
void
*
)
p
c5s
_header
,
(
void
*
)
receive_buf
,
sizeof
(
p
c5s
_header_t
));
if
(
p
dcp_data
_header
->
traffic_type
==
TRAFFIC_PC5S_SESSION_INIT
){
if
(
p
c5s
_header
->
traffic_type
==
TRAFFIC_PC5S_SESSION_INIT
){
//send reply to ProSe app
LOG_D
(
PDCP
,
"Received a request to open PDCP socket and establish a new PDCP session ... send response to ProSe App
\n
"
);
memset
(
send_buf
,
0
,
BUFSIZE
);
sl_pc5s_msg_send
=
calloc
(
1
,
sizeof
(
sidelink_pc5s_element
));
sl_pc5s_msg_send
->
p
dcp_data
_header
.
traffic_type
=
TRAFFIC_PC5S_SESSION_INIT
;
sl_pc5s_msg_send
->
p
c5s
_header
.
traffic_type
=
TRAFFIC_PC5S_SESSION_INIT
;
sl_pc5s_msg_send
->
pc5sPrimitive
.
status
=
1
;
memcpy
((
void
*
)
send_buf
,
(
void
*
)
sl_pc5s_msg_send
,
sizeof
(
sidelink_pc5s_element
));
...
...
@@ -593,56 +593,56 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
LOG_E
(
PDCP
,
"ERROR: Failed to send to ProSe App
\n
"
);
exit
(
EXIT_FAILURE
);
}
}
else
if
(
p
dcp_data
_header
->
traffic_type
==
TRAFFIC_PC5S_SIGNALLING
)
{
//if containing PC5-S message -> send to other UE
}
else
if
(
p
c5s
_header
->
traffic_type
==
TRAFFIC_PC5S_SIGNALLING
)
{
//if containing PC5-S message -> send to other UE
LOG_D
(
PDCP
,
"Received PC5-S message ... send to the other UE
\n
"
);
#ifdef PDCP_DEBUG
LOG_D
(
PDCP
,
"Received PC5-S message, traffic_type: %d)
\n
"
,
p
dcp_data
_header
->
traffic_type
);
LOG_D
(
PDCP
,
"Received PC5-S message, rbid: %d)
\n
"
,
p
dcp_data
_header
->
rb_id
);
LOG_D
(
PDCP
,
"Received PC5-S message, data_size: %d)
\n
"
,
p
dcp_data
_header
->
data_size
);
LOG_D
(
PDCP
,
"Received PC5-S message, inst: %d)
\n
"
,
p
dcp_data
_header
->
inst
);
LOG_D
(
PDCP
,
"Received PC5-S message,sourceL2Id: 0x%08x
\n
)
\n
"
,
p
dcp_data
_header
->
sourceL2Id
);
LOG_D
(
PDCP
,
"Received PC5-S message,destinationL1Id: 0x%08x
\n
)
\n
"
,
p
dcp_data
_header
->
destinationL2Id
);
LOG_D
(
PDCP
,
"Received PC5-S message, traffic_type: %d)
\n
"
,
p
c5s
_header
->
traffic_type
);
LOG_D
(
PDCP
,
"Received PC5-S message, rbid: %d)
\n
"
,
p
c5s
_header
->
rb_id
);
LOG_D
(
PDCP
,
"Received PC5-S message, data_size: %d)
\n
"
,
p
c5s
_header
->
data_size
);
LOG_D
(
PDCP
,
"Received PC5-S message, inst: %d)
\n
"
,
p
c5s
_header
->
inst
);
LOG_D
(
PDCP
,
"Received PC5-S message,sourceL2Id: 0x%08x
\n
)
\n
"
,
p
c5s
_header
->
sourceL2Id
);
LOG_D
(
PDCP
,
"Received PC5-S message,destinationL1Id: 0x%08x
\n
)
\n
"
,
p
c5s
_header
->
destinationL2Id
);
#endif
#ifdef OAI_EMU
// overwrite function input parameters, because only one netlink socket for all instances
if
(
p
dcp_data
_header
->
inst
<
oai_emulation
.
info
.
nb_enb_local
)
{
if
(
p
c5s
_header
->
inst
<
oai_emulation
.
info
.
nb_enb_local
)
{
ctxt
.
frame
=
ctxt_cpy
.
frame
;
ctxt
.
enb_flag
=
ENB_FLAG_YES
;
ctxt
.
module_id
=
p
dcp_data
_header
.
inst
+
oai_emulation
.
info
.
first_enb_local
;
ctxt
.
rnti
=
oai_emulation
.
info
.
eNB_ue_module_id_to_rnti
[
ctxt
.
module_id
][
p
dcp_data
_header
->
rb_id
/
maxDRB
+
oai_emulation
.
info
.
first_ue_local
];
rab_id
=
p
dcp_data
_header
->
rb_id
%
maxDRB
;
ctxt
.
module_id
=
p
c5s
_header
.
inst
+
oai_emulation
.
info
.
first_enb_local
;
ctxt
.
rnti
=
oai_emulation
.
info
.
eNB_ue_module_id_to_rnti
[
ctxt
.
module_id
][
p
c5s
_header
->
rb_id
/
maxDRB
+
oai_emulation
.
info
.
first_ue_local
];
rab_id
=
p
c5s
_header
->
rb_id
%
maxDRB
;
}
else
{
ctxt
.
frame
=
ctxt_cpy
.
frame
;
ctxt
.
enb_flag
=
ENB_FLAG_NO
;
ctxt
.
module_id
=
p
dcp_data
_header
->
inst
-
oai_emulation
.
info
.
nb_enb_local
+
oai_emulation
.
info
.
first_ue_local
;
ctxt
.
module_id
=
p
c5s
_header
->
inst
-
oai_emulation
.
info
.
nb_enb_local
+
oai_emulation
.
info
.
first_ue_local
;
ctxt
.
rnti
=
pdcp_UE_UE_module_id_to_rnti
[
ctxt
.
module_id
];
rab_id
=
p
dcp_data
_header
->
rb_id
%
maxDRB
;
rab_id
=
p
c5s
_header
->
rb_id
%
maxDRB
;
}
CHECK_CTXT_ARGS
(
&
ctxt
);
AssertFatal
(
rab_id
<
maxDRB
,
"RB id is too high (%u/%d)!
\n
"
,
rab_id
,
maxDRB
);
/*LGpdcp_read_header.inst = (p
dcp_data
_header.inst >= oai_emulation.info.nb_enb_local) ? \
p
dcp_data
_header.inst - oai_emulation.info.nb_enb_local+ NB_eNB_INST + oai_emulation.info.first_ue_local :
p
dcp_data
_header.inst + oai_emulation.info.first_enb_local;*/
/*LGpdcp_read_header.inst = (p
c5s
_header.inst >= oai_emulation.info.nb_enb_local) ? \
p
c5s
_header.inst - oai_emulation.info.nb_enb_local+ NB_eNB_INST + oai_emulation.info.first_ue_local :
p
c5s
_header.inst + oai_emulation.info.first_enb_local;*/
#else // OAI_EMU
/* TODO: do we have to reset to 0 or not? not for a scenario with 1 UE at least */
// p
dcp_data
_header.inst = 0;
// p
c5s
_header.inst = 0;
//#warning "TO DO CORRCT VALUES FOR ue mod id, enb mod id"
ctxt
.
frame
=
ctxt_cpy
.
frame
;
ctxt
.
enb_flag
=
ctxt_cpy
.
enb_flag
;
LOG_I
(
PDCP
,
"[PDCP] p
dcp_data
_header->rb_id = %d
\n
"
,
p
dcp_data
_header
->
rb_id
);
LOG_I
(
PDCP
,
"[PDCP] p
c5s
_header->rb_id = %d
\n
"
,
p
c5s
_header
->
rb_id
);
if
(
ctxt_cpy
.
enb_flag
)
{
ctxt
.
module_id
=
0
;
rab_id
=
p
dcp_data
_header
->
rb_id
%
maxDRB
;
rab_id
=
p
c5s
_header
->
rb_id
%
maxDRB
;
ctxt
.
rnti
=
pdcp_eNB_UE_instance_to_rnti
[
pdcp_eNB_UE_instance_to_rnti_index
];
}
else
{
ctxt
.
module_id
=
0
;
rab_id
=
p
dcp_data
_header
->
rb_id
%
maxDRB
;
rab_id
=
p
c5s
_header
->
rb_id
%
maxDRB
;
ctxt
.
rnti
=
pdcp_UE_UE_module_id_to_rnti
[
ctxt
.
module_id
];
}
#endif
...
...
@@ -672,15 +672,15 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
#ifdef PDCP_DEBUG
LOG_I
(
PDCP
,
"[FRAME %5u][UE][NETLINK][IP->PDCP] INST %d: Received socket with length %d on Rab %d
\n
"
,
ctxt
.
frame
,
p
dcp_data
_header
->
inst
,
p
c5s
_header
->
inst
,
bytes_received
,
p
dcp_data
_header
->
rb_id
);
p
c5s
_header
->
rb_id
);
LOG_I
(
PDCP
,
"[FRAME %5u][UE][IP][INSTANCE %u][RB %u][--- PDCP_DATA_REQ / %d Bytes --->][PDCP][MOD %u][UE %u][RB %u]
\n
"
,
ctxt
.
frame
,
p
dcp_data
_header
->
inst
,
p
dcp_data
_header
->
rb_id
,
p
dcp_data
_header
->
data_size
,
p
c5s
_header
->
inst
,
p
c5s
_header
->
rb_id
,
p
c5s
_header
->
data_size
,
ctxt
.
module_id
,
ctxt
.
rnti
,
rab_id
);
...
...
@@ -692,10 +692,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
0
,
MSC_AS_TIME_FMT
" DATA-REQ inst %u rb %u rab %u size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
p
dcp_data
_header
.
inst
,
p
dcp_data
_header
.
rb_id
,
p
c5s
_header
.
inst
,
p
c5s
_header
.
rb_id
,
rab_id
,
p
dcp_data
_header
.
data_size
);
p
c5s
_header
.
data_size
);
pdcp_data_req
(
&
ctxt
,
...
...
@@ -703,12 +703,12 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
rab_id
,
RLC_MUI_UNDEFINED
,
RLC_SDU_CONFIRM_NO
,
p
dcp_data
_header
->
data_size
,
p
c5s
_header
->
data_size
,
(
unsigned
char
*
)
receive_buf
,
PDCP_TRANSMISSION_MODE_DATA
#ifdef Rel14
,
&
p
dcp_data
_header
->
sourceL2Id
,
&
p
dcp_data
_header
->
destinationL2Id
,
&
p
c5s
_header
->
sourceL2Id
,
&
p
c5s
_header
->
destinationL2Id
#endif
);
}
else
{
...
...
@@ -719,16 +719,16 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
0
,
MSC_AS_TIME_FMT
" DATA-REQ inst %u rb %u rab %u size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
p
dcp_data
_header
.
inst
,
p
dcp_data
_header
.
rb_id
,
p
c5s
_header
.
inst
,
p
c5s
_header
.
rb_id
,
rab_id
,
p
dcp_data
_header
.
data_size
);
p
c5s
_header
.
data_size
);
LOG_D
(
PDCP
,
"[FRAME %5u][UE][IP][INSTANCE %u][RB %u][--- PDCP_DATA_REQ / %d Bytes ---X][PDCP][MOD %u][UE %u][RB %u] NON INSTANCIATED INSTANCE key 0x%"
PRIx64
", DROPPED
\n
"
,
ctxt
.
frame
,
p
dcp_data
_header
->
inst
,
p
dcp_data
_header
->
rb_id
,
p
dcp_data
_header
->
data_size
,
p
c5s
_header
->
inst
,
p
c5s
_header
->
rb_id
,
p
c5s
_header
->
data_size
,
ctxt
.
module_id
,
ctxt
.
rnti
,
rab_id
,
...
...
@@ -738,9 +738,9 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
LOG_D
(
PDCP
,
"Forcing send on DEFAULT_RAB_ID
\n
"
);
LOG_D
(
PDCP
,
"[FRAME %5u][eNB][IP][INSTANCE %u][RB %u][--- PDCP_DATA_REQ / %d Bytes --->][PDCP][MOD %u][UE %u][RB DEFAULT_RAB_ID %u]
\n
"
,
ctxt
.
frame
,
p
dcp_data
_header
->
inst
,
p
dcp_data
_header
->
rb_id
,
p
dcp_data
_header
->
data_size
,
p
c5s
_header
->
inst
,
p
c5s
_header
->
rb_id
,
p
c5s
_header
->
data_size
,
ctxt
.
module_id
,
ctxt
.
rnti
,
DEFAULT_RAB_ID
);
...
...
@@ -750,10 +750,10 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
NULL
,
0
,
MSC_AS_TIME_FMT
" DATA-REQ inst %u rb %u default rab %u size %u"
,
MSC_AS_TIME_ARGS
(
ctxt_pP
),
p
dcp_data
_header
->
inst
,
p
dcp_data
_header
->
rb_id
,
p
c5s
_header
->
inst
,
p
c5s
_header
->
rb_id
,
DEFAULT_RAB_ID
,
p
dcp_data
_header
->
data_size
);
p
c5s
_header
->
data_size
);
pdcp_data_req
(
&
ctxt
,
...
...
@@ -761,12 +761,12 @@ int pdcp_fifo_read_input_sdus (const protocol_ctxt_t* const ctxt_pP)
DEFAULT_RAB_ID
,
RLC_MUI_UNDEFINED
,
RLC_SDU_CONFIRM_NO
,
p
dcp_data
_header
->
data_size
,
p
c5s
_header
->
data_size
,
(
unsigned
char
*
)
receive_buf
,
PDCP_TRANSMISSION_MODE_DATA
#ifdef Rel14
,
&
p
dcp_data
_header
->
sourceL2Id
,
&
p
dcp_data
_header
->
destinationL2Id
,
&
p
c5s
_header
->
sourceL2Id
,
&
p
c5s
_header
->
destinationL2Id
#endif
);
}
...
...
openair2/LAYER2/RLC/rlc.c
View file @
709e5974
...
...
@@ -395,7 +395,7 @@ rlc_op_status_t rlc_data_req (const protocol_ctxt_t* const ctxt_pP,
rlc_mode
=
rlc_union_p
->
mode
;
}
else
{
rlc_mode
=
RLC_MODE_NONE
;
AssertFatal
(
0
,
"RLC not configured key %ju
\n
"
,
key
);
//
AssertFatal (0 , "RLC not configured key %ju\n", key);
}
if
(
MBMS_flagP
==
0
)
{
...
...
openair2/RRC/LITE/defs.h
View file @
709e5974
...
...
@@ -101,7 +101,6 @@ typedef enum {
}
Group_Communication_Status_t
;
struct
GroupCommunicationEstablishReq
{
uint8_t
type
;
//0 - rx, 1 - tx
uint32_t
sourceL2Id
;
uint32_t
groupL2Id
;
uint32_t
groupIpAddress
;
...
...
@@ -127,11 +126,12 @@ struct PC5SEstablishReq{
};
struct
PC5SEstablishRsp
{
uint32_t
s
ourceL2Id
;
uint32_t
destinationL2Id
;
uint
8
_t
s
tatus
;
uint32_t
s
lrbid_lcid28
;
uint32_t
slrbid_lcid29
;
uint
32
_t
s
lrbid_lcid30
;
};
//PC5_DISCOVERY MESSAGE
typedef
struct
{
unsigned
char
payload
[
PC5_DISCOVERY_PAYLOAD_SIZE
];
...
...
@@ -143,7 +143,7 @@ struct sidelink_ctrl_element {
unsigned
short
type
;
union
{
struct
GroupCommunicationEstablishReq
group_comm_establish_req
;
struct
DirectCommunicationEstablishReq
direct_comm_estblish_req
;
struct
DirectCommunicationEstablishReq
direct_comm_est
a
blish_req
;
Group_Communication_Status_t
group_comm_release_rsp
;
//struct DirectCommunicationReleaseReq direct_comm_release_req;
SL_UE_STATE_t
ue_state
;
...
...
openair2/RRC/LITE/rrc_UE.c
View file @
709e5974
This diff is collapsed.
Click to expand it.
Cedric Roux
@cedric.roux
mentioned in commit
f254107b
·
May 09, 2018
mentioned in commit
f254107b
mentioned in commit f254107b24f80adbb532581c9b96471f60a3de88
Toggle commit list
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment