Commit 99f1eee1 authored by Yangxiong Peng's avatar Yangxiong Peng Committed by jperaldi

Add support of LTTNG traces/plugins for RLC/PDCP/MAC packet for 4G/5G

1. Support RLC/PDCP packet for 4G/5G
2. Support for MAC patcket for 4G/5G
3. Format decoded msg to remove ETH/IP/UDP from output
parent e38e62b1
......@@ -499,6 +499,28 @@ int32_t write_file_matlab(const char *fname, const char *vname, void *data, int
LOG_SS_MAC_PKT(PKT, _string, sfn, sf, mac_pack_info, buf, len); \
} } while(0)
# define LOG_RLC_P(lvl, _string, sfn, sf, rlc_pack_info, buf, len) do { \
if(g_log->log_component[PKT].level >= lvl) { \
LOG_SS_RLC_PKT(PKT, _string, sfn, sf, rlc_pack_info, buf, len); \
} } while(0)
# define LOG_PDCP_P(lvl, _string, sfn, sf, pdcp_pack_info, buf, len) do { \
if(g_log->log_component[PKT].level >= lvl) { \
LOG_SS_PDCP_PKT(PKT, _string, sfn, sf, pdcp_pack_info, buf, len); \
} } while(0)
# define LOG_LTE_PDCP_PDU(lvl, _string, sfn, sf, pdcp_pack_info, buf, len) do { \
if(g_log->log_component[PKT].level >= lvl) { \
LOG_SS_LTE_PDCP_PKT(PKT, _string, sfn, sf, pdcp_pack_info, buf, len); \
} } while(0)
# define LOG_LTE_RLC_P(lvl, _string, sfn, sf, rlc_pack_info, buf, len) do { \
if(g_log->log_component[PKT].level >= lvl) { \
LOG_SS_LTE_RLC_PKT(PKT, _string, sfn, sf, rlc_pack_info, buf, len); \
} } while(0)
/* avoid warnings for variables only used in LOG macro's but set outside debug section */
#define GCC_NOTUSED __attribute__((unused))
#define LOG_USEDINLOG_VAR(A,B) GCC_NOTUSED A B
......
......@@ -70,4 +70,34 @@
__func__, __LINE__, mac_pack_info, \
_string, buf, len); \
} while(0)
#define LOG_SS_RLC_PKT(component, _string, sfn, sf, rlc_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_NR_RLC_PKT, \
"SS-NR-RLC-PDU", -1, sfn, sf, \
__func__, __LINE__, rlc_pack_info, \
_string, buf, len); \
} while(0)
#define LOG_SS_PDCP_PKT(component, _string, sfn, sf, pdcp_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_NR_PDCP_PKT, \
"SS-NR-PDCP-PDU", -1, sfn, sf, \
__func__, __LINE__, pdcp_pack_info, \
_string, buf, len); \
} while(0)
#define LOG_SS_LTE_PDCP_PKT(component, _string, sfn, sf, pdcp_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_LTE_PDCP_PKT, \
"SS-LTE-PDCP-PDU", -1, sfn, sf, \
__func__, __LINE__, pdcp_pack_info, \
_string, buf, len); \
} while(0)
#define LOG_SS_LTE_RLC_PKT(component, _string, sfn, sf, rlc_pack_info, buf, len) do { \
tracepoint(SSeNB, SS_LTE_RLC_PKT, \
"SS-LTE-RLC-PDU", -1, sfn, sf, \
__func__, __LINE__, rlc_pack_info, \
_string, buf, len); \
} while(0)
#endif /** __SS_LOG_H__ */
......@@ -196,6 +196,268 @@ TRACEPOINT_EVENT(
)
)
#if !defined(_SS_NR_RLC_PKT_T)
typedef struct nr_rlc_pkt_info_s {
uint8_t rlcMode;
uint8_t direction;
uint8_t sequenceNumberLength;
uint8_t bearerType;
uint8_t bearerId;
uint16_t ueid;
uint16_t pduLength;
} nr_rlc_pkt_info_t;
#define _SS_NR_RLC_PKT_T
#endif
TRACEPOINT_EVENT(
SSeNB,
SS_NR_RLC_PKT,
TP_ARGS(
const char*, component,
int, event_id,
int, sfn,
int, slot,
const char*, funcName,
int, lineNo,
nr_rlc_pkt_info_t, rlc_pkt,
const char*, log_string,
uint8_t *, array_arg,
unsigned int, length
),
TP_FIELDS(
ctf_string(MODNAME, component)
ctf_integer(int32_t, EVENTID, event_id)
ctf_integer(int32_t, SFN, sfn)
ctf_integer(int32_t, SLOT, slot)
ctf_string(FUNCTION, funcName)
ctf_integer(int32_t, LINE, lineNo)
ctf_integer(int8_t, RLCMODE, rlc_pkt.rlcMode)
ctf_integer(int8_t, DIRECTION, rlc_pkt.direction)
ctf_integer(int8_t, SN_LENGTH, rlc_pkt.sequenceNumberLength)
ctf_integer(int8_t, BEARER_TYPE, rlc_pkt.bearerType)
ctf_integer(int8_t, BEARER_ID, rlc_pkt.bearerId)
ctf_integer(int16_t, UEID, rlc_pkt.ueid)
ctf_integer(int16_t, PDU_LENGTH, rlc_pkt.pduLength)
ctf_string(Event, log_string)
ctf_sequence_hex(uint8_t, Buffer, array_arg, unsigned int, length)
)
)
#if !defined(_SS_NR_PDCP_PKT_T)
typedef enum NRBearerTypeE
{
Bearer_UNDEFINED_e = 0,
Bearer_DCCH_e=1,
Bearer_BCCH_BCH_e=2,
Bearer_BCCH_DL_SCH_e=3,
Bearer_CCCH_e=4,
Bearer_PCCH_e=5,
} NRBearerTypeE;
#define PDCP_NR_SN_LENGTH_12_BITS 12
#define PDCP_NR_SN_LENGTH_18_BITS 18
#define PDCP_NR_UL_SDAP_HEADER_PRESENT 0x01
#define PDCP_NR_DL_SDAP_HEADER_PRESENT 0x02
enum pdcp_nr_plane_e
{
NR_PLANE_UNDEFINED_E = 0,
NR_SIGNALING_PLANE_E = 1,
NR_USER_PLANE_E = 2
};
#define MAX_CID 15
#define ROHC_PROFILE_UNCOMPRESSED 0
#define ROHC_PROFILE_RTP 1
#define ROHC_PROFILE_UDP 2
#define ROHC_PROFILE_IP 4
#define ROHC_PROFILE_UNKNOWN 0xFFFF
typedef struct rohc_info
{
bool rohc_compression;
uint8_t rohc_ip_version;
} rohc_info;
typedef struct nr_pdcp_pkt_info_s {
uint8_t direction;
uint16_t ueid;
NRBearerTypeE bearerType;
uint8_t bearerId;
enum pdcp_nr_plane_e plane;
uint8_t seqnum_length;
bool maci_present;
bool ciphering_disabled;
uint8_t sdap_header;
//rohc_info rohc;
uint8_t is_retx;
uint16_t pdu_length;
} nr_pdcp_pkt_info_t;
typedef enum
{
bch_TRANSPORT=1,
dlsch_TRANSPORT=2
} BCCHTransportType_e;
enum pdcp_plane_lte
{
CONTROL_PLANE_E= 1,
DATA_PLANE_E = 2
};
typedef struct pdcp_info
{
uint8_t direction;
uint16_t ueid;
NRBearerTypeE channelType;
uint16_t channelId;
enum pdcp_plane_lte plane; //1 control plane 2 user plane
uint8_t seqnum_length;
uint8_t is_retx;
BCCHTransportType_e BCCHTransport;
bool no_header_pdu;
uint16_t pdu_length;
} pdcp_info_t;
//TODO: PDCP_NR_ROHC_COMPRESSION_TAG to be set to 0 always for now.
#define _SS_NR_PDCP_PKT_T
#endif
TRACEPOINT_EVENT(
SSeNB,
SS_NR_PDCP_PKT,
TP_ARGS(
const char*, component,
int, event_id,
int, sfn,
int, slot,
const char*, funcName,
int, lineNo,
nr_pdcp_pkt_info_t, pdcp_pkt,
const char*, log_string,
uint8_t *, array_arg,
unsigned int, length
),
TP_FIELDS(
ctf_string(MODNAME, component)
ctf_integer(int32_t, EVENTID, event_id)
ctf_integer(int32_t, SFN, sfn)
ctf_integer(int32_t, SLOT, slot)
ctf_string(FUNCTION, funcName)
ctf_integer(int32_t, LINE, lineNo)
ctf_integer(int8_t, DIRECTION, pdcp_pkt.direction)
ctf_integer(int16_t, UEID, pdcp_pkt.ueid)
ctf_integer(int8_t, BEARER_TYPE, pdcp_pkt.bearerType)
ctf_integer(int8_t, BEARER_ID, pdcp_pkt.bearerId)
ctf_integer(int8_t, PLANE, pdcp_pkt.plane)
ctf_integer(int8_t, SN_LENGTH, pdcp_pkt.seqnum_length)
ctf_integer(bool, CIPHER_DISABLED, pdcp_pkt.ciphering_disabled)
ctf_integer(bool, MACI_DISABLED, pdcp_pkt.maci_present)
ctf_integer(int8_t, SDAP_PR, pdcp_pkt.sdap_header)
ctf_integer(int8_t, RETX, pdcp_pkt.is_retx)
ctf_integer(int16_t, PDU_LEN, pdcp_pkt.pdu_length)
ctf_string(Event, log_string)
ctf_sequence_hex(uint8_t, Buffer, array_arg, unsigned int, length)
)
)
TRACEPOINT_EVENT(
SSeNB,
SS_LTE_PDCP_PKT,
TP_ARGS(
const char*, component,
int, event_id,
int, sfn,
int, slot,
const char*, funcName,
int, lineNo,
pdcp_info_t, pdcp_pkt,
const char*, log_string,
uint8_t *, array_arg,
unsigned int, length
),
TP_FIELDS(
ctf_string(MODNAME, component)
ctf_integer(int32_t, EVENTID, event_id)
ctf_integer(int32_t, SFN, sfn)
ctf_integer(int32_t, SLOT, slot)
ctf_string(FUNCTION, funcName)
ctf_integer(int32_t, LINE, lineNo)
ctf_integer(uint8_t, DIRECTION, pdcp_pkt.direction)
ctf_integer(uint16_t, UEID, pdcp_pkt.ueid)
ctf_integer(uint8_t, BEARER_TYPE, pdcp_pkt.channelType)
ctf_integer(uint16_t, BEARER_ID, pdcp_pkt.channelId)
ctf_integer(uint8_t, PLANE, pdcp_pkt.plane)
ctf_integer(uint8_t, SN_LENGTH, pdcp_pkt.seqnum_length)
ctf_integer(uint8_t, RETX, pdcp_pkt.is_retx)
ctf_integer(uint8_t, BCCH_TRANSPORT, pdcp_pkt.BCCHTransport)
ctf_integer(uint8_t, PDU_HEADER_PRESENT, pdcp_pkt.no_header_pdu)
ctf_integer(uint16_t, PDU_LEN, pdcp_pkt.pdu_length)
ctf_string(Event, log_string)
ctf_sequence_hex(uint8_t, Buffer, array_arg, unsigned int, length)
)
)
#if !defined(_SS_LTE_RLC_PKT_T)
typedef struct lte_rlc_pkt_info
{
uint8_t rlcMode;
uint8_t direction;
uint8_t priority;
uint8_t sequenceNumberLength;
uint16_t ueid;
uint16_t channelType;
uint16_t channelId; /* for SRB: 1=SRB1, 2=SRB2, 3=SRB1bis; for DRB: DRB ID */
uint16_t pduLength;
bool extendedLiField;
} lte_rlc_pkt_info_t;
#define _SS_LTE_RLC_PKT_T
#endif
TRACEPOINT_EVENT(
SSeNB,
SS_LTE_RLC_PKT,
TP_ARGS(
const char*, component,
int, event_id,
int, sfn,
int, sf,
const char*, funcName,
int, lineNo,
lte_rlc_pkt_info_t, rlc_pkt,
const char*, log_string,
uint8_t *, array_arg,
unsigned int, length
),
TP_FIELDS(
ctf_string(MODNAME, component)
ctf_integer(uint32_t, EVENTID, event_id)
ctf_integer(uint32_t, SFN, sfn)
ctf_integer(uint32_t, SF, sf)
ctf_string(FUNCTION, funcName)
ctf_integer(uint32_t, LINE, lineNo)
ctf_integer(uint8_t, RLCMODE, rlc_pkt.rlcMode)
ctf_integer(uint8_t, DIRECTION, rlc_pkt.direction)
ctf_integer(uint8_t, PRIORITY, rlc_pkt.priority)
ctf_integer(uint8_t, SN_LENGTH, rlc_pkt.sequenceNumberLength)
ctf_integer(uint16_t, UEID, rlc_pkt.ueid)
ctf_integer(uint8_t, CHANNEL_TYPE, rlc_pkt.channelType)
ctf_integer(uint8_t, CHANNEL_ID, rlc_pkt.channelId)
ctf_integer(uint16_t, PDU_LENGTH, rlc_pkt.pduLength)
ctf_integer(uint8_t, EXTENDEDLIFIELD, rlc_pkt.extendedLiField)
ctf_string(Event, log_string)
ctf_sequence_hex(uint8_t, Buffer, array_arg, unsigned int, length)
)
)
#endif /* _SS_TP_H */
#include <lttng/tracepoint-event.h>
......@@ -900,6 +900,15 @@ generate_Msg4(module_id_t module_idP,
ra->msg4_rrc_sdu_length,
UE_id, 3, UE_RNTI (module_idP, UE_id),
mac->frame, mac->subframe, 0, 0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = 3;
mac_pkt.rnti = UE_RNTI (module_idP, UE_id);
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", mac->frame, mac->subframe, mac_pkt, (uint8_t *)mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0], (int)ra->msg4_rrc_sdu_length);
} // Msg4 frame/subframe
} // rach_resource_type > 0
else {
......@@ -1096,6 +1105,14 @@ generate_Msg4(module_id_t module_idP,
UE_RNTI(module_idP, UE_id), mac->frame,
mac->subframe, 0, 0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_C_RNTI;
mac_pkt.rnti = UE_RNTI (module_idP, UE_id);
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", mac->frame, mac->subframe, mac_pkt, (uint8_t *)mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0], (int)rrc_sdu_length);
if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR) {
set_dl_ue_select_msg4(CC_idP, 4, UE_id, ra->rnti);
}
......@@ -1709,7 +1726,14 @@ generate_macCeRrcConnectionSetup(module_id_t module_idP,
rrc_sdu_length, UE_id, WS_C_RNTI,
UE_RNTI(module_idP, UE_id), mac->frame,
mac->subframe, 0, 0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_C_RNTI;
mac_pkt.rnti = UE_RNTI (module_idP, UE_id);
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", mac->frame, mac->subframe, mac_pkt, (uint8_t *)mac->UE_info.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0], (int)rrc_sdu_length);
}
}
else
......
......@@ -280,6 +280,14 @@ schedule_SIB1_MBMS(module_id_t module_idP,
&cc->BCCH_BR_pdu[0].payload[0],
bcch_sdu_length,
0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_SI_RNTI;
mac_pkt.rnti = 0xffff;
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", eNB->frame, eNB->subframe, mac_pkt, (uint8_t *)&cc->BCCH_BR_pdu[0].payload[0], (int)bcch_sdu_length);
if (cc->tdd_Config != NULL) { //TDD
LOG_D(MAC,
......@@ -505,6 +513,14 @@ schedule_SIB1_BR(module_id_t module_idP,
bcch_sdu_length,
0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_SI_RNTI;
mac_pkt.rnti = 0xffff;
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", eNB->frame, eNB->subframe, mac_pkt, (uint8_t *)&cc->BCCH_BR_pdu[0].payload[0], (int)bcch_sdu_length);
if (cc->tdd_Config != NULL) { //TDD
LOG_D(MAC,
"[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
......@@ -689,6 +705,14 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
0xffff, eNB->frame, eNB->subframe, 0,
0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_SI_RNTI;
mac_pkt.rnti = 0xffff;
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", eNB->frame, eNB->subframe, mac_pkt, (uint8_t *)&cc->BCCH_BR_pdu[i+1].payload[0], (int)bcch_sdu_length);
if (cc->tdd_Config != NULL) { //TDD
LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n",
frameP, i, CC_id, bcch_sdu_length);
......@@ -1215,6 +1239,14 @@ schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
0xffff,
WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_SI_RNTI;
mac_pkt.rnti = 0xffff;
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", eNB->frame, eNB->subframe, mac_pkt, (uint8_t *)&cc->BCCH_pdu.payload[0], (int)bcch_sdu_length);
if (cc->tdd_Config != NULL) { //TDD
LOG_D(MAC,
"[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
......
......@@ -1022,6 +1022,14 @@ schedule_ue_spec(module_id_t module_idP,
dlsch_pdu->payload[0][offset + sdu_length_total + j] = 0;
}
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_C_RNTI;
mac_pkt.rnti = UE_RNTI(module_idP,UE_id);
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", eNB->frame, eNB->subframe, mac_pkt, (uint8_t *)dlsch_pdu->payload[0], (int)TBS);
trace_pdu(DIRECTION_DOWNLINK,
(uint8_t *) dlsch_pdu->payload[0],
TBS,
......@@ -1687,6 +1695,14 @@ schedule_ue_spec_br(module_id_t module_idP,
UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset + sdu_length_total + j] = (char)(taus()&0xff);
}
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_C_RNTI;
mac_pkt.rnti = UE_RNTI(module_idP,UE_id);
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", mac->frame, mac->subframe, mac_pkt, (uint8_t *)UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0], (int)TBS);
trace_pdu(DIRECTION_DOWNLINK,
(uint8_t *)UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0],
TBS,
......@@ -1899,6 +1915,15 @@ schedule_ue_spec_br(module_id_t module_idP,
subframeP,
0,
0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = 3;
mac_pkt.rnti = rnti;
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", frameP, subframeP, mac_pkt, (uint8_t *)mac->UE_info.DLSCH_pdu[CC_id][0][(unsigned char) UE_id].payload[0], (int)TX_req->pdu_length);
} // end else if ((subframeP == 7) && (round_DL < 8))
} // end loop on UE_id
}
......@@ -2434,6 +2459,14 @@ schedule_PCH(module_id_t module_idP,
continue;
}
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = PCCH;
mac_pkt.rnti = P_RNTI;
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_PCCH_PDU", eNB->frame, eNB->subframe, mac_pkt, (uint8_t *)&eNB->common_channels[CC_id].PCCH_pdu.payload[0], (int)pcch_sdu_length);
trace_pdu(DIRECTION_DOWNLINK,
&eNB->common_channels[CC_id].PCCH_pdu.payload[0],
pcch_sdu_length,
......
......@@ -1937,6 +1937,13 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset+sdu_length_total+j] = (char)(taus()&0xff);
}
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_DOWNLINK;
mac_pkt.rnti_type = WS_C_RNTI;
mac_pkt.rnti = UE_RNTI(module_idP,UE_id);
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_DL_PDU", eNB->frame, eNB->subframe, mac_pkt, (uint8_t *)UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0], (int)TBS);
trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_info->DLSCH_pdu[CC_id][0][UE_id].payload[0],
TBS, module_idP, WS_C_RNTI, UE_RNTI(module_idP, UE_id),
eNB->frame, eNB->subframe,0,0);
......
......@@ -141,6 +141,15 @@ rx_sdu(const module_id_t enb_mod_idP,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1);
trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP, 0, 0);
mac_pkt_info_t mac_pkt;
mac_pkt.direction = DIRECTION_UPLINK;
mac_pkt.rnti_type = WS_C_RNTI;
mac_pkt.rnti = current_rnti;
mac_pkt.harq_pid = 0;
mac_pkt.preamble = -1; /* TODO */
LOG_MAC_P(OAILOG_INFO, "LTE_MAC_UL_PDU", frameP, subframeP, mac_pkt, (uint8_t *)sduP, (int)sdu_lenP);
if (UE_id != -1) {
UE_scheduling_control = &UE_info->UE_sched_ctrl[UE_id];
UE_template_ptr = &UE_info->UE_template[CC_idP][UE_id];
......
......@@ -82,7 +82,8 @@ hash_table_t *pdcp_coll_p = NULL;
static int mbms_socket = -1;
#endif
extern NRBearerTypeE lchannelType;
extern BCCHTransportType_e bcchTransportType;
uint32_t Pdcp_stats_tx_window_ms[MAX_eNB][MAX_MOBILES_PER_ENB];
uint32_t Pdcp_stats_tx_bytes[MAX_eNB][MAX_MOBILES_PER_ENB][NB_RB_MAX];
uint32_t Pdcp_stats_tx_bytes_w[MAX_eNB][MAX_MOBILES_PER_ENB][NB_RB_MAX];
......@@ -269,11 +270,34 @@ boolean_t pdcp_data_req(
uint16_t pdcp_uid=0;
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_REQ,VCD_FUNCTION_IN);
CHECK_CTXT_ARGS(ctxt_pP);
pdcp_info_t pdcp_pkt;
#if T_TRACER
if (ctxt_pP->enb_flag != ENB_FLAG_NO)
T(T_ENB_PDCP_DL, T_INT(ctxt_pP->module_id), T_INT(ctxt_pP->rnti), T_INT(rb_idP), T_INT(sdu_buffer_sizeP));
// TRACE DL PDCP PDUs (Control/Data) here
#if 0
nr_pdcp_pkt_info_t pdcp_pkt;
pdcp_pkt.direction = DOWNLINK_DIRECTION;
pdcp_pkt.ueid = 0;
pdcp_pkt.bearerType = rb_idP; //FIXME
pdcp_pkt.bearerId = rb_idP;
pdcp_pkt.plane = (srb_flagP) ? 1: 2;
pdcp_pkt.seqnum_length = ;
pdcp_pkt.maci_present;
pdcp_pkt.ciphering_disabled;
pdcp_pkt.sdap_header;
pdcp_pkt.rohc;
pdcp_pkt.is_retx;
pdcp_pkt.pdu_length;
LOG_PDCP_P();
#endif
#endif
if (sdu_buffer_sizeP == 0) {
......@@ -331,6 +355,23 @@ boolean_t pdcp_data_req(
LOG_UI(PDCP, "Before rlc_data_req 1, srb_flagP: %d, rb_idP: %ld \n", srb_flagP, rb_idP);
}
/*PDCP Tracepoint marker : DL TM Mode PDU */
pdcp_pkt.direction = 1; /* Assuming DL is 1 */
pdcp_pkt.ueid = pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid];
pdcp_pkt.channelType = lchannelType;
pdcp_pkt.channelId = rb_idP - 1;
pdcp_pkt.BCCHTransport = bcchTransportType;
pdcp_pkt.no_header_pdu= false;
pdcp_pkt.plane= CONTROL_PLANE_E;
pdcp_pkt.seqnum_length =0 ;
pdcp_pkt.is_retx = 0;
pdcp_pkt.pdu_length =sdu_buffer_sizeP;
if (pdcp_pkt.channelType != Bearer_UNDEFINED_e && pdcp_pkt.BCCHTransport != NR_PLANE_UNDEFINED_E)
LOG_LTE_PDCP_PDU(OAILOG_INFO, "DL_LTE_PDCP_PDU", -1, -1, (pdcp_pkt), (unsigned char *)sdu_buffer_pP, sdu_buffer_sizeP);
lchannelType = Bearer_UNDEFINED_e;
bcchTransportType = NR_PLANE_UNDEFINED_E;
memset(&pdcp_pkt, 0, sizeof (pdcp_pkt));
rlc_status = pdcp_params.send_rlc_data_req_func(ctxt_pP, srb_flagP, NODE_IS_CU(RC.rrc[ctxt_pP->module_id]->node_type)?MBMS_FLAG_NO:MBMS_FLAG_YES, rb_idP, muiP,
confirmP, sdu_buffer_sizeP, pdcp_pdu_p,NULL,NULL);
} else {
......@@ -518,10 +559,28 @@ boolean_t pdcp_data_req(
LOG_E(PDCP, "Can't be DU, bad node type %d \n", RC.rrc[ctxt_pP->module_id]->node_type);
ret=FALSE;
} else {
/* PDCP Tracepoint marker: DL DRB PDU */
pdcp_pkt.direction = 1; /* Assuming DL is 1 */
pdcp_pkt.ueid = pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid];
pdcp_pkt.channelType = lchannelType;
pdcp_pkt.channelId = rb_idP - 1;
pdcp_pkt.BCCHTransport = bcchTransportType;
pdcp_pkt.no_header_pdu= true;
pdcp_pkt.plane= DATA_PLANE_E;
pdcp_pkt.seqnum_length = pdcp_p->seq_num_size;
pdcp_pkt.is_retx = false;
pdcp_pkt.pdu_length = pdcp_pdu_size;
if (pdcp_pkt.channelType != Bearer_UNDEFINED_e && pdcp_pkt.BCCHTransport != NR_PLANE_UNDEFINED_E)
LOG_LTE_PDCP_PDU(OAILOG_INFO, "DL_LTE_PDCP_PDU", -1, -1, (pdcp_pkt), (unsigned char *)sdu_buffer_pP, sdu_buffer_sizeP);
lchannelType = Bearer_UNDEFINED_e;
bcchTransportType = NR_PLANE_UNDEFINED_E;
memset(&pdcp_pkt, 0, sizeof (pdcp_pkt));
rlc_status = pdcp_params.send_rlc_data_req_func(ctxt_pP, srb_flagP, MBMS_FLAG_NO, rb_idP, muiP,
confirmP, pdcp_pdu_size, pdcp_pdu_p,sourceL2Id,
destinationL2Id);
ret=FALSE;
confirmP, pdcp_pdu_size, pdcp_pdu_p,sourceL2Id,
destinationL2Id);
ret=FALSE;
switch (rlc_status) {
case RLC_OP_STATUS_OK:
LOG_D(PDCP, "Data sending request over RLC succeeded!\n");
......@@ -565,6 +624,23 @@ boolean_t pdcp_data_req(
LOG_I(PDCP, "Send F1AP_DL_RRC_MESSAGE with ITTI\n");
ret=TRUE;
} else {
/*PDCP Tracepoint marker: DL SRB PDU */
pdcp_pkt.direction = 1; /* Assuming DL is 1 */
pdcp_pkt.ueid = pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid];
pdcp_pkt.channelType = lchannelType;
pdcp_pkt.BCCHTransport = bcchTransportType;
pdcp_pkt.no_header_pdu= false;
pdcp_pkt.plane= CONTROL_PLANE_E;
pdcp_pkt.seqnum_length = pdcp_p->seq_num_size;
pdcp_pkt.is_retx = false;
pdcp_pkt.pdu_length = pdcp_pdu_size;
if (pdcp_pkt.channelType != Bearer_UNDEFINED_e && pdcp_pkt.BCCHTransport != NR_PLANE_UNDEFINED_E)
LOG_LTE_PDCP_PDU(OAILOG_INFO, "DL_LTE_PDCP_PDU", -1, -1, (pdcp_pkt), (unsigned char *)sdu_buffer_pP, sdu_buffer_sizeP);
lchannelType = Bearer_UNDEFINED_e;
bcchTransportType = NR_PLANE_UNDEFINED_E;
memset(&pdcp_pkt, 0, sizeof (pdcp_pkt));
rlc_status = rlc_data_req(ctxt_pP
, srb_flagP
, MBMS_FLAG_NO
......@@ -671,6 +747,9 @@ pdcp_data_ind(
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDCP_DATA_IND,VCD_FUNCTION_IN);
LOG_DUMPMSG(PDCP,DEBUG_PDCP,(char *)sdu_buffer_pP->data,sdu_buffer_sizeP,
"[MSG] PDCP UL %s PDU on rb_id %ld\n", (srb_flagP)? "CONTROL" : "DATA", rb_idP);
LOG_D(PDCP, "ctxt->rnti:%d\n", ctxt_pP->rnti);
pdcp_info_t pdcp_pkt;
memset(&pdcp_pkt, 0, sizeof (pdcp_pkt));
if (MBMS_flagP) {
AssertError (rb_idP < NB_RB_MBMS_MAX, return FALSE,
......@@ -729,6 +808,31 @@ pdcp_data_ind(
return FALSE;
}
pdcp_pkt.direction = 2;
pdcp_pkt.ueid = pdcp_enb[ctxt_pP->module_id].rnti[pdcp_uid];
if (srb_flagP == 1) {
if (rb_id < 1 || rb_id > 2)
LOG_W(PDCP, "invalid rb_id \n");
else {
(rb_id == 1)?(pdcp_pkt.channelType = 4):(pdcp_pkt.channelType= 1);
(rb_id == 1)?(pdcp_pkt.channelId= 0):(pdcp_pkt.channelId = 1);
pdcp_pkt.plane = CONTROL_PLANE_E;
}
} else {
if (rb_id < 1 || rb_id > 5);
else {
pdcp_pkt.channelType = Bearer_DCCH_e;
pdcp_pkt.channelType = 1;
pdcp_pkt.channelId = rb_id -1;
pdcp_pkt.plane = DATA_PLANE_E;
}
}
pdcp_pkt.seqnum_length = pdcp_p->seq_num_size;
pdcp_pkt.is_retx = false;
pdcp_pkt.pdu_length = sdu_buffer_sizeP;
LOG_LTE_PDCP_PDU(OAILOG_INFO, "UL_LTE_PDCP_PDU", -1, -1, (pdcp_pkt), (unsigned char *)sdu_buffer_pP->data, sdu_buffer_sizeP);
if (ctxt_pP->enb_flag) {
start_meas(&eNB_pdcp_stats[ctxt_pP->module_id].data_ind);
} else {
......@@ -812,6 +916,8 @@ pdcp_data_ind(
#endif
// Trace UL PDCP PDU here (Control/Data)
// SRB1/2: control-plane data
if (srb_flagP) {
/* process as described in 36.323 5.1.2.2 */
......
......@@ -258,6 +258,8 @@ void mac_rlc_data_ind (
#endif // DEBUG_MAC_INTERFACE
#if T_TRACER
//Trace UL RLC PDU Here
if (enb_flagP)
T(T_ENB_RLC_MAC_UL, T_INT(module_idP), T_INT(rntiP), T_INT(channel_idP), T_INT(tb_sizeP));
......
......@@ -252,6 +252,11 @@ static void do_pdcp_data_ind(
exit(1);
}
/** TRACE PDCP PDU */
nr_pdcp_pkt_info_t pdcp_pkt;
pdcp_pkt.direction = 0; //PDCP_NR_DIRECTION_UPLINK
pdcp_pkt.ueid = rnti;
if (ctxt_pP->enb_flag)
T(T_ENB_PDCP_UL, T_INT(ctxt_pP->module_id), T_INT(rnti),
T_INT(rb_id), T_INT(sdu_buffer_size));
......@@ -262,17 +267,32 @@ static void do_pdcp_data_ind(
if (srb_flagP == 1) {
if (rb_id < 1 || rb_id > 2)
rb = NULL;
else
else {
rb = ue->srb[rb_id - 1];
(rb_id == 1)?(pdcp_pkt.bearerType = 4):(pdcp_pkt.bearerType = 1);
(rb_id == 1)?(pdcp_pkt.bearerId = 0):(pdcp_pkt.bearerId = 1);
pdcp_pkt.plane = 1;
}
} else {
if (rb_id < 1 || rb_id > 5)
rb = NULL;
else
else {
rb = ue->drb[rb_id - 1];
pdcp_pkt.bearerType = 8;
pdcp_pkt.bearerId = rb_id -1;
pdcp_pkt.plane = 2;
}
}
if (rb != NULL) {
pdcp_pkt.seqnum_length = rb->sn_size;
pdcp_pkt.maci_present = (rb->has_integrity)?1:0;
pdcp_pkt.ciphering_disabled = (rb->has_ciphering)?1:0;
pdcp_pkt.sdap_header = (rb->has_sdapULheader)?1:0;
pdcp_pkt.is_retx = 0;
pdcp_pkt.pdu_length = sdu_buffer_size;
rb->recv_pdu(rb, (char *)sdu_buffer->data, sdu_buffer_size);
LOG_PDCP_P(OAILOG_INFO, "UL_PDCP_PDU", -1, -1, (pdcp_pkt), (unsigned char *)sdu_buffer->data, sdu_buffer_size);
} else {
LOG_E(PDCP, "%s:%d:%s: fatal: no RB found (rb_id %ld, srb_flag %d)\n",
__FILE__, __LINE__, __FUNCTION__, rb_id, srb_flagP);
......@@ -1322,6 +1342,26 @@ static boolean_t pdcp_data_req_srb(
exit(1);
}
/** TRACE PDCP PDU */
if (NULL != ue && NULL != rb) {
nr_pdcp_pkt_info_t pdcp_pkt;
pdcp_pkt.direction = 1; //PDCP_NR_DIRECTION_DOWNLINK
pdcp_pkt.ueid = ue->rnti;
pdcp_pkt.bearerType = 8; //TODO
pdcp_pkt.bearerId = rb_id - 1;
pdcp_pkt.plane = (rb_id == 1)?4:1;
pdcp_pkt.seqnum_length = rb->sn_size;
pdcp_pkt.maci_present = (rb->has_integrity)?1:0;
pdcp_pkt.ciphering_disabled = (rb->has_ciphering)?1:0;
pdcp_pkt.sdap_header = (rb->has_sdapULheader)?1:0;
pdcp_pkt.is_retx = 0;
pdcp_pkt.pdu_length = sdu_buffer_size;
LOG_PDCP_P(OAILOG_INFO, "DL_PDCP_PDU", -1, -1, (pdcp_pkt), (unsigned char *)sdu_buffer, sdu_buffer_size);
}
nr_pdcp_manager_lock(nr_pdcp_ue_manager);
ue = nr_pdcp_manager_get_ue(nr_pdcp_ue_manager, rnti);
......@@ -1385,6 +1425,23 @@ static boolean_t pdcp_data_req_drb(
return 0;
}
/** TRACE PDCP PDU */
nr_pdcp_pkt_info_t pdcp_pkt;
pdcp_pkt.direction = 1; //PDCP_NR_DIRECTION_DOWNLINK
pdcp_pkt.ueid = ue->rnti;
pdcp_pkt.bearerType = 8; //TODO
pdcp_pkt.bearerId = rb_id - 1;
pdcp_pkt.plane = 2;
pdcp_pkt.seqnum_length = rb->sn_size;
pdcp_pkt.maci_present = (rb->has_integrity)?1:0;
pdcp_pkt.ciphering_disabled = (rb->has_ciphering)?1:0;
pdcp_pkt.sdap_header = (rb->has_sdapULheader)?1:0;
pdcp_pkt.is_retx = 0;
pdcp_pkt.pdu_length = sdu_buffer_size;
LOG_PDCP_P(OAILOG_INFO, "DL_PDCP_PDU", -1, -1, (pdcp_pkt), (unsigned char *)sdu_buffer, sdu_buffer_size);
rb->recv_sdu(rb, (char *)sdu_buffer, sdu_buffer_size, muiP);
nr_pdcp_manager_unlock(nr_pdcp_ue_manager);
......@@ -1434,6 +1491,7 @@ boolean_t pdcp_data_req(
,const uint32_t *const destinationL2Id
)
{
// Trace NR PDCP PDU here.
if (srb_flagP) {
return pdcp_data_req_srb(ctxt_pP, rb_id, muiP, confirmP, sdu_buffer_size, sdu_buffer);
}
......
......@@ -28,6 +28,7 @@
#include "nr_rlc_entity_tm.h"
#include "LOG/log.h"
#include "LOG/ss-log.h"
nr_rlc_entity_t *new_nr_rlc_entity_am(
int rx_maxsize,
......
......@@ -23,6 +23,7 @@
#define _NR_RLC_ENTITY_H_
#include <stdint.h>
#include "LOG/ss-log.h"
#define NR_SDU_MAX 16000 /* max NR PDCP SDU size is 9000, let's take more */
......@@ -34,10 +35,12 @@ typedef struct {
typedef struct nr_rlc_entity_t {
/* functions provided by the RLC module */
void (*recv_pdu)(struct nr_rlc_entity_t *entity, char *buffer, int size);
void (*recv_pdu)(struct nr_rlc_entity_t *entity, char *buffer, int size,
nr_rlc_pkt_info_t *rlc_info);
nr_rlc_entity_buffer_status_t (*buffer_status)(
struct nr_rlc_entity_t *entity, int maxsize);
int (*generate_pdu)(struct nr_rlc_entity_t *entity, char *buffer, int size);
int (*generate_pdu)(struct nr_rlc_entity_t *entity, char *buffer, int size,
nr_rlc_pkt_info_t *rlc_info);
void (*recv_sdu)(struct nr_rlc_entity_t *entity, char *buffer, int size,
int sdu_id);
......
......@@ -535,7 +535,7 @@ static void finalize_ack_nack_processing(nr_rlc_entity_am_t *entity)
}
void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity,
char *buffer, int size)
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info)
{
#define R(d) do { if (nr_rlc_pdu_decoder_in_error(&d)) goto err; } while (0)
nr_rlc_entity_am_t *entity = (nr_rlc_entity_am_t *)_entity;
......@@ -567,6 +567,12 @@ void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *_entity,
nr_rlc_pdu_decoder_init(&decoder, buffer, size);
dc = nr_rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder);
rlc_info->rlcMode = 4; /** TODO AM Mode */
rlc_info->pduLength = size;
rlc_info->sequenceNumberLength = entity->sn_field_length;
LOG_RLC_P(OAILOG_INFO, "UL_RLC_AM_PDU", -1, -1, *(rlc_info), (unsigned char *)buffer, size);
if (dc == 0) goto control;
/* data PDU */
......@@ -1558,24 +1564,31 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_am_buffer_status(
}
int nr_rlc_entity_am_generate_pdu(nr_rlc_entity_t *_entity,
char *buffer, int size)
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info)
{
nr_rlc_entity_am_t *entity = (nr_rlc_entity_am_t *)_entity;
int ret;
rlc_info->rlcMode = 4; /** UM Mode */
rlc_info->sequenceNumberLength = entity->sn_field_length;
if (status_to_report(entity)) {
ret = generate_status(entity, buffer, size);
rlc_info->pduLength = ret;
if (ret != 0)
return ret;
}
if (entity->retransmit_list != NULL) {
ret = generate_retx_pdu(entity, buffer, size);
rlc_info->pduLength = ret;
if (ret != 0)
return ret;
}
return generate_tx_pdu(entity, buffer, size);
ret = generate_tx_pdu(entity, buffer, size);
rlc_info->pduLength = ret;
return ret;
}
/*************************************************************************/
......
......@@ -26,6 +26,8 @@
#include "nr_rlc_sdu.h"
#include "nr_rlc_pdu.h"
#include "LOG/ss-log.h"
typedef struct {
nr_rlc_entity_t common;
......@@ -92,12 +94,12 @@ typedef struct {
void nr_rlc_entity_am_recv_sdu(nr_rlc_entity_t *entity,
char *buffer, int size,
int sdu_id);
void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *entity,
char *buffer, int size);
void nr_rlc_entity_am_recv_pdu(nr_rlc_entity_t *entity, char *buffer,
int size, nr_rlc_pkt_info_t *rlc_info);
nr_rlc_entity_buffer_status_t nr_rlc_entity_am_buffer_status(
nr_rlc_entity_t *entity, int maxsize);
int nr_rlc_entity_am_generate_pdu(nr_rlc_entity_t *entity,
char *buffer, int size);
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info);
void nr_rlc_entity_am_set_time(nr_rlc_entity_t *entity, uint64_t now);
void nr_rlc_entity_am_discard_sdu(nr_rlc_entity_t *_entity, int sdu_id);
void nr_rlc_entity_am_reestablishment(nr_rlc_entity_t *_entity);
......
......@@ -33,9 +33,18 @@
/*************************************************************************/
void nr_rlc_entity_tm_recv_pdu(nr_rlc_entity_t *_entity,
char *buffer, int size)
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info)
{
nr_rlc_entity_tm_t *entity = (nr_rlc_entity_tm_t *)_entity;
rlc_info->rlcMode = 1; /** TODO AM Mode */
rlc_info->pduLength = size;
rlc_info->sequenceNumberLength = 0;
LOG_RLC_P(OAILOG_INFO, "UL_RLC_AM_PDU", -1, -1, *(rlc_info), (unsigned char *)buffer, size);
entity->common.deliver_sdu(entity->common.deliver_sdu_data,
(nr_rlc_entity_t *)entity,
buffer, size);
......@@ -91,11 +100,16 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_tm_buffer_status(
}
int nr_rlc_entity_tm_generate_pdu(nr_rlc_entity_t *_entity,
char *buffer, int size)
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info)
{
nr_rlc_entity_tm_t *entity = (nr_rlc_entity_tm_t *)_entity;
return generate_tx_pdu(entity, buffer, size);
rlc_info->rlcMode = 1; /** UM Mode */
rlc_info->sequenceNumberLength = 0;
int ret = generate_tx_pdu(entity, buffer, size);
rlc_info->pduLength = ret;
return ret;
}
/*************************************************************************/
......@@ -121,6 +135,7 @@ void nr_rlc_entity_tm_recv_sdu(nr_rlc_entity_t *_entity,
return;
}
entity->tx_size += size;
sdu = nr_rlc_new_sdu(buffer, size, sdu_id);
......
......@@ -42,11 +42,11 @@ void nr_rlc_entity_tm_recv_sdu(nr_rlc_entity_t *entity,
char *buffer, int size,
int sdu_id);
void nr_rlc_entity_tm_recv_pdu(nr_rlc_entity_t *entity,
char *buffer, int size);
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info);
nr_rlc_entity_buffer_status_t nr_rlc_entity_tm_buffer_status(
nr_rlc_entity_t *entity, int maxsize);
int nr_rlc_entity_tm_generate_pdu(nr_rlc_entity_t *entity,
char *buffer, int size);
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info);
void nr_rlc_entity_tm_set_time(nr_rlc_entity_t *entity, uint64_t now);
void nr_rlc_entity_tm_discard_sdu(nr_rlc_entity_t *_entity, int sdu_id);
void nr_rlc_entity_tm_reestablishment(nr_rlc_entity_t *_entity);
......
......@@ -259,7 +259,7 @@ static void reception_actions(nr_rlc_entity_um_t *entity, nr_rlc_pdu_t *pdu)
}
void nr_rlc_entity_um_recv_pdu(nr_rlc_entity_t *_entity,
char *buffer, int size)
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info)
{
#define R(d) do { if (nr_rlc_pdu_decoder_in_error(&d)) goto err; } while (0)
nr_rlc_entity_um_t *entity = (nr_rlc_entity_um_t *)_entity;
......@@ -275,6 +275,12 @@ void nr_rlc_entity_um_recv_pdu(nr_rlc_entity_t *_entity,
nr_rlc_pdu_decoder_init(&decoder, buffer, size);
si = nr_rlc_pdu_decoder_get_bits(&decoder, 2); R(decoder);
rlc_info->rlcMode = 2; /** TODO UM Mode */
rlc_info->pduLength = size;
rlc_info->sequenceNumberLength = entity->sn_field_length;
LOG_RLC_P(OAILOG_INFO, "UL_RLC_UM_PDU", -1, -1, *(rlc_info), (unsigned char *)buffer, size);
is_first = (si & 0x2) == 0;
is_last = (si & 0x1) == 0;
......@@ -509,11 +515,15 @@ nr_rlc_entity_buffer_status_t nr_rlc_entity_um_buffer_status(
}
int nr_rlc_entity_um_generate_pdu(nr_rlc_entity_t *_entity,
char *buffer, int size)
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info)
{
nr_rlc_entity_um_t *entity = (nr_rlc_entity_um_t *)_entity;
return generate_tx_pdu(entity, buffer, size);
int ret = generate_tx_pdu(entity, buffer, size);
rlc_info->rlcMode = 2; /** UM Mode */
rlc_info->sequenceNumberLength = entity->sn_field_length;
rlc_info->pduLength = ret;
return ret;
}
/*************************************************************************/
......
......@@ -66,11 +66,11 @@ void nr_rlc_entity_um_recv_sdu(nr_rlc_entity_t *entity,
char *buffer, int size,
int sdu_id);
void nr_rlc_entity_um_recv_pdu(nr_rlc_entity_t *entity,
char *buffer, int size);
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info);
nr_rlc_entity_buffer_status_t nr_rlc_entity_um_buffer_status(
nr_rlc_entity_t *entity, int maxsize);
int nr_rlc_entity_um_generate_pdu(nr_rlc_entity_t *entity,
char *buffer, int size);
char *buffer, int size, nr_rlc_pkt_info_t *rlc_info);
void nr_rlc_entity_um_set_time(nr_rlc_entity_t *entity, uint64_t now);
void nr_rlc_entity_um_discard_sdu(nr_rlc_entity_t *_entity, int sdu_id);
void nr_rlc_entity_um_reestablishment(nr_rlc_entity_t *_entity);
......
......@@ -37,6 +37,7 @@
#include "NR_RLC-Config.h"
#include "common/ran_context.h"
#include "NR_UL-CCCH-Message.h"
#include "opt.h"
#include "openair2/F1AP/f1ap_du_rrc_message_transfer.h"
......@@ -156,6 +157,11 @@ void mac_rlc_data_ind (
T(T_ENB_RLC_MAC_UL, T_INT(module_idP), T_INT(rntiP),
T_INT(channel_idP), T_INT(tb_sizeP));
// Trace UL RLC PDU Here
nr_rlc_pkt_info_t rlc_pkt;
rlc_pkt.direction = DIRECTION_UPLINK;
rlc_pkt.ueid = rntiP;
nr_rlc_manager_lock(nr_rlc_ue_manager);
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rntiP);
......@@ -170,8 +176,14 @@ void mac_rlc_data_ind (
if (rb != NULL) {
LOG_D(RLC, "RB found! (channel ID %d) \n", channel_idP);
rlc_pkt.bearerType = -1; //To be filled
rlc_pkt.bearerId = -1; //To be filled
//LOG_RLC_P(OAILOG_INFO, "UL_RLC_AM_PDU", frameP, slotP, rlc_pkt, buffer, length);
rb->set_time(rb, nr_rlc_current_time);
rb->recv_pdu(rb, buffer_pP, tb_sizeP);
rb->recv_pdu(rb, buffer_pP, tb_sizeP, &rlc_pkt);
} else {
LOG_E(RLC, "%s:%d:%s: fatal: no RB found (channel ID %d)\n",
__FILE__, __LINE__, __FUNCTION__, channel_idP);
......@@ -200,6 +212,11 @@ tbs_size_t mac_rlc_data_req(
nr_rlc_entity_t *rb;
int maxsize;
// Trace UL RLC PDU Here
nr_rlc_pkt_info_t rlc_pkt;
rlc_pkt.direction = DIRECTION_DOWNLINK;
rlc_pkt.ueid = rntiP;
nr_rlc_manager_lock(nr_rlc_ue_manager);
ue = nr_rlc_manager_get_ue(nr_rlc_ue_manager, rntiP);
......@@ -215,13 +232,38 @@ tbs_size_t mac_rlc_data_req(
if (rb != NULL) {
rb->set_time(rb, nr_rlc_current_time);
maxsize = tb_sizeP;
ret = rb->generate_pdu(rb, buffer_pP, maxsize);
ret = rb->generate_pdu(rb, buffer_pP, maxsize, &rlc_pkt);
} else {
ret = 0;
}
nr_rlc_manager_unlock(nr_rlc_ue_manager);
switch ((channel_idP)) {
case 1 ... 3:
rlc_pkt.bearerType = CHANNEL_TYPE_SRB;
rlc_pkt.bearerId = channel_idP - 1;
break;
case 4 ... 8:
rlc_pkt.bearerType = CHANNEL_TYPE_DRB;
rlc_pkt.bearerId = channel_idP - 4;
break;
}
if (ret!=0) {
char *rlcstr;
switch (rlc_pkt.rlcMode)
{
case 1:
rlcstr = "DL_RLC_TM_PDU";
break;
case 2:
rlcstr = "DL_RLC_UM_PDU";
break;
case 4:
rlcstr = "DL_RLC_AM_PDU";
break;
}
LOG_RLC_P(OAILOG_INFO, rlcstr, -1, -1, rlc_pkt, (unsigned char *)buffer_pP, ret);
}
if (enb_flagP)
T(T_ENB_RLC_MAC_DL, T_INT(module_idP), T_INT(rntiP),
T_INT(channel_idP), T_INT(ret));
......
......@@ -23,6 +23,7 @@
#define _RLC_ENTITY_H_
#include <stdint.h>
#include "LOG/ss-log.h"
#define SDU_MAX 16000 /* maximum PDCP SDU size is 8188, let's take more */
......@@ -34,10 +35,10 @@ typedef struct {
typedef struct rlc_entity_t {
/* functions provided by the RLC module */
void (*recv_pdu)(struct rlc_entity_t *entity, char *buffer, int size);
void (*recv_pdu)(struct rlc_entity_t *entity, char *buffer, int size, lte_rlc_pkt_info_t *rlc_info);
rlc_entity_buffer_status_t (*buffer_status)(
struct rlc_entity_t *entity, int maxsize);
int (*generate_pdu)(struct rlc_entity_t *entity, char *buffer, int size);
int (*generate_pdu)(struct rlc_entity_t *entity, char *buffer, int size, lte_rlc_pkt_info_t *rlc_info);
void (*recv_sdu)(struct rlc_entity_t *entity, char *buffer, int size,
int sdu_id);
......
......@@ -569,7 +569,7 @@ static void finalize_ack_nack_processing(rlc_entity_am_t *entity)
cleanup_sdu_list(entity);
}
void rlc_entity_am_recv_pdu(rlc_entity_t *_entity, char *buffer, int size)
void rlc_entity_am_recv_pdu(rlc_entity_t *_entity, char *buffer, int size, lte_rlc_pkt_info_t *rlc_info)
{
#define R(d) do { if (rlc_pdu_decoder_in_error(&d)) goto err; } while (0)
rlc_entity_am_t *entity = (rlc_entity_am_t *)_entity;
......@@ -608,6 +608,12 @@ void rlc_entity_am_recv_pdu(rlc_entity_t *_entity, char *buffer, int size)
rlc_pdu_decoder_init(&decoder, buffer, size);
dc = rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder);
rlc_info->rlcMode = 4; /** AM Mode */
rlc_info->pduLength = size;
rlc_info->sequenceNumberLength = 10; /*TODO */
LOG_LTE_RLC_P(OAILOG_INFO, "UL_RLC_AM_PDU", -1, -1, *(rlc_info), (unsigned char *)buffer, size);
if (dc == 0) goto control;
/* data PDU */
......@@ -1502,23 +1508,29 @@ rlc_entity_buffer_status_t rlc_entity_am_buffer_status(
return ret;
}
int rlc_entity_am_generate_pdu(rlc_entity_t *_entity, char *buffer, int size)
int rlc_entity_am_generate_pdu(rlc_entity_t *_entity, char *buffer, int size, lte_rlc_pkt_info_t *rlc_info)
{
rlc_entity_am_t *entity = (rlc_entity_am_t *)_entity;
int ret;
rlc_info->rlcMode = 4; /** UM Mode */
rlc_info->sequenceNumberLength = 10;
if (status_to_report(entity)) {
ret = generate_status(entity, buffer, size);
rlc_info->pduLength = ret;
if (ret != 0)
return ret;
}
rlc_info->pduLength = ret;
if (entity->retransmit_list != NULL) {
ret = generate_retx_pdu(entity, buffer, size);
rlc_info->pduLength = ret;
if (ret != 0)
return ret;
}
rlc_info->pduLength = ret;
return generate_tx_pdu(entity, buffer, size);
}
......
......@@ -273,10 +273,10 @@ typedef struct {
void rlc_entity_am_recv_sdu(rlc_entity_t *entity, char *buffer, int size,
int sdu_id);
void rlc_entity_am_recv_pdu(rlc_entity_t *entity, char *buffer, int size);
void rlc_entity_am_recv_pdu(rlc_entity_t *entity, char *buffer, int size, lte_rlc_pkt_info_t *rlc_info);
rlc_entity_buffer_status_t rlc_entity_am_buffer_status(
rlc_entity_t *entity, int maxsize);
int rlc_entity_am_generate_pdu(rlc_entity_t *entity, char *buffer, int size);
int rlc_entity_am_generate_pdu(rlc_entity_t *entity, char *buffer, int size,lte_rlc_pkt_info_t *rlc_info);
void rlc_entity_am_set_time(rlc_entity_t *entity, uint64_t now);
void rlc_entity_am_discard_sdu(rlc_entity_t *entity, int sdu_id);
void rlc_entity_am_reestablishment(rlc_entity_t *entity);
......
......@@ -228,7 +228,7 @@ static void rlc_um_reception_actions(rlc_entity_um_t *entity,
}
}
void rlc_entity_um_recv_pdu(rlc_entity_t *_entity, char *buffer, int size)
void rlc_entity_um_recv_pdu(rlc_entity_t *_entity, char *buffer, int size,lte_rlc_pkt_info_t *rlc_info)
{
#define R(d) do { if (rlc_pdu_decoder_in_error(&d)) goto err; } while (0)
rlc_entity_um_t *entity = (rlc_entity_um_t *)_entity;
......@@ -254,6 +254,11 @@ void rlc_entity_um_recv_pdu(rlc_entity_t *_entity, char *buffer, int size)
rlc_pdu_decoder_get_bits(&decoder, 3); R(decoder); /* R1 */
}
rlc_info->rlcMode = 2; /** TODO UM Mode */
rlc_info->pduLength = size;
rlc_info->sequenceNumberLength = entity->sn_field_length;
LOG_LTE_RLC_P(OAILOG_INFO, "UL_RLC_UM_PDU", -1, -1, *(rlc_info), (unsigned char *)buffer, size);
rlc_pdu_decoder_get_bits(&decoder, 2); R(decoder); /* FI */
e = rlc_pdu_decoder_get_bits(&decoder, 1); R(decoder);
sn = rlc_pdu_decoder_get_bits(&decoder, entity->sn_field_length); R(decoder);
......@@ -420,7 +425,7 @@ rlc_entity_buffer_status_t rlc_entity_um_buffer_status(
return ret;
}
int rlc_entity_um_generate_pdu(rlc_entity_t *_entity, char *buffer, int size)
int rlc_entity_um_generate_pdu(rlc_entity_t *_entity, char *buffer, int size,lte_rlc_pkt_info_t *rlc_info)
{
rlc_entity_um_t *entity = (rlc_entity_um_t *)_entity;
tx_pdu_size_t pdu_size;
......@@ -442,6 +447,8 @@ int rlc_entity_um_generate_pdu(rlc_entity_t *_entity, char *buffer, int size)
if (pdu_size.sdu_count == 0)
return 0;
rlc_info->rlcMode = 2; /** UM Mode */
rlc_info->sequenceNumberLength = entity->sn_field_length;
sdu = entity->tx_list;
first_sdu_start_byte = sdu->next_byte;
......@@ -540,6 +547,7 @@ int rlc_entity_um_generate_pdu(rlc_entity_t *_entity, char *buffer, int size)
/* update VT(US) */
entity->vt_us = (entity->vt_us + 1) % entity->sn_modulus;
rlc_info->pduLength = pdu_size.header_size + pdu_size.data_size;
return pdu_size.header_size + pdu_size.data_size;
}
......
......@@ -78,10 +78,10 @@ typedef struct {
void rlc_entity_um_recv_sdu(rlc_entity_t *_entity, char *buffer, int size,
int sdu_id);
void rlc_entity_um_recv_pdu(rlc_entity_t *entity, char *buffer, int size);
void rlc_entity_um_recv_pdu(rlc_entity_t *entity, char *buffer, int size, lte_rlc_pkt_info_t *rlc_info);
rlc_entity_buffer_status_t rlc_entity_um_buffer_status(
rlc_entity_t *entity, int maxsize);
int rlc_entity_um_generate_pdu(rlc_entity_t *_entity, char *buffer, int size);
int rlc_entity_um_generate_pdu(rlc_entity_t *_entity, char *buffer, int size, lte_rlc_pkt_info_t *rlc_info);
void rlc_entity_um_set_time(rlc_entity_t *entity, uint64_t now);
void rlc_entity_um_discard_sdu(rlc_entity_t *entity, int sdu_id);
void rlc_entity_um_reestablishment(rlc_entity_t *entity);
......
......@@ -54,7 +54,7 @@ void mac_rlc_data_ind (
rlc_entity_t *rb;
int rnti;
int channel_id;
lte_rlc_pkt_info_t rlc_info;
if (enb_flagP == 1 && module_idP != 0) {
LOG_E(RLC, "%s:%d:%s: fatal, module_id must be 0 for eNB\n",
__FILE__, __LINE__, __FUNCTION__);
......@@ -83,6 +83,12 @@ void mac_rlc_data_ind (
rnti = rntiP;
channel_id = channel_idP;
}
rlc_info.channelId = channel_id - 1;
rlc_info.ueid = rnti;
if (channel_id > 2)
rlc_info.channelType = 5;
else
rlc_info.channelType = 4;
rlc_manager_lock(rlc_ue_manager);
ue = rlc_manager_get_ue(rlc_ue_manager, rnti);
......@@ -95,7 +101,7 @@ void mac_rlc_data_ind (
if (rb != NULL) {
rb->set_time(rb, rlc_current_time);
rb->recv_pdu(rb, buffer_pP, tb_sizeP);
rb->recv_pdu(rb, buffer_pP, tb_sizeP, &rlc_info);
} else {
LOG_E(RLC, "%s:%d:%s: fatal: no RB found (rnti %d channel ID %d)\n",
__FILE__, __LINE__, __FUNCTION__, rnti, channel_id);
......@@ -123,6 +129,9 @@ tbs_size_t mac_rlc_data_req(
rlc_ue_t *ue;
rlc_entity_t *rb;
int maxsize;
lte_rlc_pkt_info_t rlc_pkt;
rlc_pkt.direction = 1 /* Downlink */;
rlc_pkt.ueid = rntiP;
rlc_manager_lock(rlc_ue_manager);
ue = rlc_manager_get_ue(rlc_ue_manager, rntiP);
......@@ -140,16 +149,42 @@ tbs_size_t mac_rlc_data_req(
rb = NULL;
}
if (rb != NULL) {
rb->set_time(rb, rlc_current_time);
maxsize = tb_sizeP;
ret = rb->generate_pdu(rb, buffer_pP, maxsize);
ret = rb->generate_pdu(rb, buffer_pP, maxsize, &rlc_pkt);
} else {
LOG_E(RLC, "%s:%d:%s: fatal: data req for unknown RB\n", __FILE__, __LINE__, __FUNCTION__);
exit(1);
ret = 0;
}
switch ((channel_idP))
{
case 1 ... 3:
rlc_pkt.channelType = 4; /* CHANNEL_TYPE_SRB */
rlc_pkt.channelId = channel_idP - 1;
break;
case 4 ... 8:
rlc_pkt.channelType = 5; /* CHANNEL_TYPE_DRB */
rlc_pkt.channelId = channel_idP - 4;
break;
}
if (ret!=0) {
char *rlcstr;
switch (rlc_pkt.rlcMode)
{
case 1:
rlcstr = "DL_RLC_TM_PDU";
break;
case 2:
rlcstr = "DL_RLC_UM_PDU";
break;
case 4:
rlcstr = "DL_RLC_AM_PDU";
break;
}
LOG_LTE_RLC_P(OAILOG_INFO, rlcstr, -1, -1, rlc_pkt, (unsigned char *)buffer_pP, ret);
}
rlc_manager_unlock(rlc_ue_manager);
......
......@@ -102,6 +102,10 @@ int send_ue_information = 0;
int8_t rsrp_cell = -128;
int8_t rsrq_cell = -128;
/** TODO TEMP FIX, Remove this and feed info structure */
NRBearerTypeE lchannelType = Bearer_UNDEFINED_e;
BCCHTransportType_e bcchTransportType = NR_PLANE_UNDEFINED_E;
// for malloc_clear
#include "PHY/defs_UE.h"
......
......@@ -105,7 +105,9 @@ uint8_t RRCMsgOnSRB0_PDU[MAX_NUM_CCs][1024];
#define ASN_MAX_ENCODE_SIZE 4096
#define NUMBEROF_DRBS_TOBE_ADDED 1
static int encode_CG_ConfigInfo(char *buffer,int buffer_size,rrc_eNB_ue_context_t *const ue_context_pP,int *enc_size);
/** TODO TEMP FIX, Remove this and feed info structure */
NRBearerTypeE lchannelType = Bearer_UNDEFINED_e;
BCCHTransportType_e bcchTransportType = NR_PLANE_UNDEFINED_E;
extern RAN_CONTEXT_t RC;
extern eNB_MAC_INST *eNB_mac_inst;
......@@ -503,6 +505,8 @@ init_SI(
if (NODE_IS_MONOLITHIC(rrc->node_type)) {
LOG_D(RRC, "About to call rrc_mac_config_req_eNB for ngran_eNB\n");
lchannelType = Bearer_BCCH_BCH_e;
bcchTransportType = bch_TRANSPORT;
rrc_mac_config_req_eNB(ctxt_pP->module_id, CC_id,
carrier->physCellId,
carrier->p_eNB,
......@@ -1492,6 +1496,8 @@ rrc_eNB_generate_SecurityModeCommand(
if (!NODE_IS_DU(RC.rrc[ctxt_pP->module_id]->node_type)) {
LOG_I(RRC,"calling rrc_data_req :securityModeCommand\n");
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(ctxt_pP,
DCCH,
rrc_eNB_mui++,
......@@ -1533,6 +1539,8 @@ rrc_eNB_generate_UECapabilityEnquiry(
size,
rrc_eNB_mui,
DCCH);
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(
ctxt_pP,
DCCH,
......@@ -2260,6 +2268,8 @@ rrc_eNB_process_RRCConnectionReestablishmentComplete(
LOG_D(RRC,
"[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH);
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(
ctxt_pP,
DCCH,
......@@ -2452,6 +2462,8 @@ rrc_eNB_generate_RRCConnectionRelease(
F1AP_UE_CONTEXT_RELEASE_CMD(m).rrc_container_length = size;
itti_send_msg_to_task(TASK_CU_F1, ctxt_pP->module_id, m);
} else {
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(ctxt_pP,
DCCH,
rrc_eNB_mui++,
......@@ -2737,6 +2749,8 @@ rrc_eNB_generate_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t *co
LOG_D(RRC,
"[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH);
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(
ctxt_pP,
DCCH,
......@@ -3020,6 +3034,8 @@ rrc_eNB_modify_dedicatedRRCConnectionReconfiguration(const protocol_ctxt_t *cons
LOG_D(RRC,
"[FRAME %05d][RRC_eNB][MOD %u][][--- PDCP_DATA_REQ/%d Bytes (rrcConnectionReconfiguration to UE %x MUI %d) --->][PDCP][MOD %u][RB %u]\n",
ctxt_pP->frame, ctxt_pP->module_id, size, ue_context_pP->ue_context.rnti, rrc_eNB_mui, ctxt_pP->module_id, DCCH);
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(
ctxt_pP,
DCCH,
......@@ -3921,6 +3937,8 @@ void rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt_t
int8_t security_modeP = 0xff;
if (RC.ss.mode == SS_ENB)
{
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(ctxt_pP,
DCCH,
rrc_eNB_mui++,
......@@ -4676,6 +4694,8 @@ flexran_rrc_eNB_generate_defaultRRCConnectionReconfiguration(const protocol_ctxt
rrc_eNB_mui,
ctxt_pP->module_id,
DCCH);
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(ctxt_pP,
DCCH,
rrc_eNB_mui++,
......@@ -4743,6 +4763,8 @@ rrc_eNB_generate_RRCConnectionReconfiguration_SCell(
);
LOG_I(RRC,"[eNB %d] Frame %d, Logical Channel DL-DCCH, Generate LTE_RRCConnectionReconfiguration (bytes %d, UE id %x)\n",
ctxt_pP->module_id,ctxt_pP->frame, size, ue_context_pP->ue_context.rnti);
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
rrc_data_req(
ctxt_pP,
DCCH,
......@@ -10438,6 +10460,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
}
if (dl_dcch_msg->message.choice.c1.present == LTE_DL_DCCH_MessageType__c1_PR_rrcConnectionReconfiguration)
{
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
struct rrc_eNB_ue_context_s *ue_context_p = NULL;
ue_context_p = rrc_eNB_get_ue_context(RC.rrc[instance], SS_RRC_PDU_REQ(msg_p).rnti);
RC.rrc_Transaction_Identifier = dl_dcch_msg->message.choice.c1.choice.rrcConnectionReconfiguration.rrc_TransactionIdentifier;
......@@ -10534,6 +10558,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
LCHAN_DESC_SIZE);
if (dl_ccch_msg->message.choice.c1.present == LTE_DL_CCCH_MessageType__c1_PR_rrcConnectionSetup) {
lchannelType = Bearer_CCCH_e;
bcchTransportType = dlsch_TRANSPORT;
RRCConnSetup_PDU_Present[cc_id] = true;
rrc_eNB_generate_RRCConnectionSetup(&ctxt, ue_context_pP, cc_id);
......@@ -10559,6 +10585,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
}
} else if (dl_ccch_msg->message.choice.c1.present == LTE_DL_CCCH_MessageType__c1_PR_rrcConnectionReject) {
rrc_eNB_generate_RRCConnectionReject(&ctxt, ue_context_pP, cc_id);
lchannelType = Bearer_CCCH_e;
bcchTransportType = dlsch_TRANSPORT;
}
}
#endif
......@@ -10574,6 +10602,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
SS_DRB_PDU_REQ(msg_p).rnti,
msg_p->ittiMsgHeader.lte_time.frame,
msg_p->ittiMsgHeader.lte_time.slot);
lchannelType = Bearer_DCCH_e;
bcchTransportType = dlsch_TRANSPORT;
pdcp_data_req(&ctxt, SRB_FLAG_NO, SS_DRB_PDU_REQ(msg_p).drb_id, 0, 0, SS_DRB_PDU_REQ(msg_p).sdu_size, SS_DRB_PDU_REQ(msg_p).sdu, PDCP_TRANSMISSION_MODE_DATA, NULL, NULL);
break;
......@@ -10603,6 +10633,8 @@ void *rrc_enb_process_itti_msg(void *notUsed) {
case SS_SS_PAGING_IND:
LOG_A(RRC, "[eNB %ld] Received Paging message from SS: %s\n", instance, msg_name_p);
rrc_eNB_process_SS_PAGING_IND(msg_p, msg_name_p, instance);
lchannelType = Bearer_PCCH_e;
bcchTransportType = bch_TRANSPORT;
break;
case RRC_RBLIST_CFG_REQ:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment