Merge remote-tracking branch 'origin/develop' into develop-NR_SA_F1AP_5GRECORDS
# Conflicts: # openair2/LAYER2/nr_pdcp/nr_pdcp_oai_api.c
This commit is contained in:
@@ -78,7 +78,7 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
|
||||
}
|
||||
|
||||
rx_deliv_sn = entity->rx_deliv & entity->sn_max;
|
||||
rx_deliv_hfn = (entity->rx_deliv >> entity->sn_size) & ~entity->sn_max;
|
||||
rx_deliv_hfn = entity->rx_deliv >> entity->sn_size;
|
||||
|
||||
if (rcvd_sn < rx_deliv_sn - entity->window_size) {
|
||||
rcvd_hfn = rx_deliv_hfn + 1;
|
||||
@@ -138,7 +138,7 @@ static void nr_pdcp_entity_recv_pdu(nr_pdcp_entity_t *entity,
|
||||
entity->rx_deliv = count;
|
||||
}
|
||||
|
||||
if (entity->t_reordering_start != 0 && entity->rx_deliv > entity->rx_reord) {
|
||||
if (entity->t_reordering_start != 0 && entity->rx_deliv >= entity->rx_reord) {
|
||||
/* stop and reset t-Reordering */
|
||||
entity->t_reordering_start = 0;
|
||||
}
|
||||
@@ -271,6 +271,10 @@ static void check_t_reordering(nr_pdcp_entity_t *entity)
|
||||
{
|
||||
uint32_t count;
|
||||
|
||||
/* if t_reordering is set to "infinity" (seen as -1) then do nothing */
|
||||
if (entity->t_reordering == -1)
|
||||
return;
|
||||
|
||||
if (entity->t_reordering_start == 0
|
||||
|| entity->t_current <= entity->t_reordering_start + entity->t_reordering)
|
||||
return;
|
||||
|
||||
@@ -69,8 +69,8 @@ typedef struct nr_pdcp_entity_t {
|
||||
int has_sdapULheader;
|
||||
int has_sdapDLheader;
|
||||
int sn_size; /* SN size, in bits */
|
||||
int t_reordering; /* unit: ms */
|
||||
int discard_timer; /* unit: ms */
|
||||
int t_reordering; /* unit: ms, -1 for infinity */
|
||||
int discard_timer; /* unit: ms, -1 for infinity */
|
||||
|
||||
int sn_max; /* (2^SN_size) - 1 */
|
||||
int window_size; /* 2^(SN_size - 1) */
|
||||
|
||||
@@ -544,17 +544,17 @@ static void deliver_sdu_srb(void *_ue, nr_pdcp_entity_t *entity,
|
||||
LOG_E(PDCP, "%s:%d:%s: fatal, no SRB found for ue %d\n",
|
||||
__FILE__, __LINE__, __FUNCTION__, ue->rnti);
|
||||
exit(1);
|
||||
|
||||
|
||||
srb_found:
|
||||
{
|
||||
uint8_t *rrc_buffer_p = entity->is_gnb ?
|
||||
uint8_t *rrc_buffer_p = entity->is_gnb ?
|
||||
itti_malloc(TASK_PDCP_ENB, TASK_RRC_GNB, size):
|
||||
itti_malloc(TASK_PDCP_UE, TASK_RRC_NRUE, size);
|
||||
MessageDef *message_p;
|
||||
|
||||
AssertFatal(rrc_buffer_p != NULL, "OUT OF MEMORY");
|
||||
memcpy(rrc_buffer_p, buf, size);
|
||||
message_p = entity->is_gnb ?
|
||||
message_p = entity->is_gnb ?
|
||||
itti_alloc_new_message(TASK_PDCP_ENB, 0, NR_RRC_DCCH_DATA_IND):
|
||||
itti_alloc_new_message(TASK_PDCP_UE, 0, NR_RRC_DCCH_DATA_IND);
|
||||
|
||||
@@ -563,7 +563,7 @@ static void deliver_sdu_srb(void *_ue, nr_pdcp_entity_t *entity,
|
||||
NR_RRC_DCCH_DATA_IND(message_p).sdu_p = rrc_buffer_p;
|
||||
NR_RRC_DCCH_DATA_IND(message_p).sdu_size = size;
|
||||
NR_RRC_DCCH_DATA_IND(message_p).rnti = ue->rnti;
|
||||
|
||||
|
||||
itti_send_msg_to_task(entity->is_gnb ? TASK_RRC_GNB : TASK_RRC_NRUE, 0, message_p);
|
||||
}
|
||||
}
|
||||
@@ -603,9 +603,9 @@ srb_found:
|
||||
ctxt.eNB_index = 0;
|
||||
ctxt.configured = 1;
|
||||
ctxt.brOption = 0;
|
||||
|
||||
|
||||
ctxt.rnti = ue->rnti;
|
||||
|
||||
|
||||
memblock = get_free_mem_block(size, __FUNCTION__);
|
||||
memcpy(memblock->data, buf, size);
|
||||
enqueue_rlc_data_req(&ctxt, 1, MBMS_FLAG_NO, srb_id, sdu_id, 0, size, memblock, NULL, NULL);
|
||||
@@ -743,7 +743,7 @@ static void add_srb(int is_gnb, int rnti, struct NR_SRB_ToAddMod *s)
|
||||
int t_Reordering=3000;
|
||||
|
||||
int srb_id = s->srb_Identity;
|
||||
if (s->pdcp_Config == NULL ||
|
||||
if (s->pdcp_Config == NULL ||
|
||||
s->pdcp_Config->t_Reordering == NULL) t_Reordering = 3000;
|
||||
else t_Reordering = decode_t_reordering(*s->pdcp_Config->t_Reordering);
|
||||
|
||||
@@ -753,7 +753,7 @@ static void add_srb(int is_gnb, int rnti, struct NR_SRB_ToAddMod *s)
|
||||
LOG_D(PDCP, "%s:%d:%s: warning SRB %d already exist for ue %d, do nothing\n",
|
||||
__FILE__, __LINE__, __FUNCTION__, srb_id, rnti);
|
||||
} else {
|
||||
pdcp_srb = new_nr_pdcp_entity(NR_PDCP_SRB, is_gnb, srb_id,
|
||||
pdcp_srb = new_nr_pdcp_entity(NR_PDCP_SRB, is_gnb, srb_id,
|
||||
0, 0, 0, 0, // sdap parameters
|
||||
deliver_sdu_srb, ue, deliver_pdu_srb, ue,
|
||||
12, t_Reordering, -1,
|
||||
@@ -776,16 +776,22 @@ static void add_drb_am(int is_gnb, int rnti, struct NR_DRB_ToAddMod *s,
|
||||
nr_pdcp_ue_t *ue;
|
||||
|
||||
int drb_id = s->drb_Identity;
|
||||
int t_reordering = decode_t_reordering(*s->pdcp_Config->t_Reordering);
|
||||
int sn_size_ul = decode_sn_size_ul(*s->pdcp_Config->drb->pdcp_SN_SizeUL);
|
||||
int sn_size_dl = decode_sn_size_dl(*s->pdcp_Config->drb->pdcp_SN_SizeDL);
|
||||
int discard_timer = decode_discard_timer(*s->pdcp_Config->drb->discardTimer);
|
||||
if ((!s->cnAssociation) || s->cnAssociation->present == NR_DRB_ToAddMod__cnAssociation_PR_NOTHING) {
|
||||
|
||||
/* if pdcp_Config->t_Reordering is not present, it means infinity (-1) */
|
||||
int t_reordering = -1;
|
||||
if (s->pdcp_Config->t_Reordering != NULL) {
|
||||
t_reordering = decode_t_reordering(*s->pdcp_Config->t_Reordering);
|
||||
}
|
||||
|
||||
if ((!s->cnAssociation) || s->cnAssociation->present == NR_DRB_ToAddMod__cnAssociation_PR_NOTHING) {
|
||||
LOG_E(PDCP,"%s:%d:%s: fatal, cnAssociation is missing or present is NR_DRB_ToAddMod__cnAssociation_PR_NOTHING\n",__FILE__,__LINE__,__FUNCTION__);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
int pdusession_id;
|
||||
|
||||
int pdusession_id;
|
||||
int has_sdap = 0;
|
||||
int has_sdapULheader=0;
|
||||
int has_sdapDLheader=0;
|
||||
|
||||
@@ -27,12 +27,21 @@
|
||||
#include <nettle/aes.h>
|
||||
#include <nettle/ctr.h>
|
||||
|
||||
#ifndef NETTLE_VERSION_MAJOR
|
||||
/* hack: include bignum.h, not version.h because version.h does not exist
|
||||
* in old versions and bignum.h includes version.h (as of today).
|
||||
* May completely fail to work... maybe we should skip support of old
|
||||
* versions of nettle.
|
||||
*/
|
||||
#include <nettle/bignum.h>
|
||||
#endif
|
||||
|
||||
void *nr_pdcp_security_nea2_init(unsigned char *ciphering_key)
|
||||
{
|
||||
void *ctx = calloc(1, nettle_aes128.context_size);
|
||||
if (ctx == NULL) exit(1);
|
||||
|
||||
#if NETTLE_VERSION_MAJOR < 3
|
||||
#if !defined(NETTLE_VERSION_MAJOR) || NETTLE_VERSION_MAJOR < 3
|
||||
nettle_aes128.set_encrypt_key(ctx, 16, ciphering_key);
|
||||
#else
|
||||
nettle_aes128.set_encrypt_key(ctx, ciphering_key);
|
||||
|
||||
@@ -598,7 +598,7 @@ static void max_retx_reached(void *_ue, nr_rlc_entity_t *entity)
|
||||
exit(1);
|
||||
|
||||
rb_found:
|
||||
LOG_D(RLC, "max RETX reached on %s %d\n",
|
||||
LOG_E(RLC, "max RETX reached on %s %d\n",
|
||||
is_srb ? "SRB" : "DRB",
|
||||
rb_id);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user