Commit 017a6ef1 authored by Raymond Knopp's avatar Raymond Knopp

Introduce NR RRC->RLC configuration

-Create nr_rrc_rlc_config_asn1_req function
-Update RLC DRB addition functions with NR structures instead of LTE
parent eb51e39f
...@@ -27,6 +27,13 @@ ...@@ -27,6 +27,13 @@
#include "asn1_utils.h" #include "asn1_utils.h"
#include "nr_rlc_ue_manager.h" #include "nr_rlc_ue_manager.h"
#include "nr_rlc_entity.h" #include "nr_rlc_entity.h"
#include "NR_RLC-BearerConfig.h"
#include "NR_DRB-ToAddMod.h"
#include "NR_DRB-ToAddModList.h"
#include "NR_SRB-ToAddModList.h"
#include "NR_DRB-ToReleaseList.h"
#include "NR_CellGroupConfig.h"
#include "NR_RLC-Config.h"
#include <stdint.h> #include <stdint.h>
...@@ -636,15 +643,15 @@ __attribute__ ((unused)) static void add_srb(int rnti, struct LTE_SRB_ToAddMod * ...@@ -636,15 +643,15 @@ __attribute__ ((unused)) static void add_srb(int rnti, struct LTE_SRB_ToAddMod *
nr_rlc_manager_unlock(nr_rlc_ue_manager); nr_rlc_manager_unlock(nr_rlc_ue_manager);
} }
static void add_drb_am(int rnti, struct LTE_DRB_ToAddMod *s) static void add_drb_am(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_t *rlc_BearerConfig)
{ {
nr_rlc_entity_t *nr_rlc_am; nr_rlc_entity_t *nr_rlc_am;
nr_rlc_ue_t *ue; nr_rlc_ue_t *ue;
struct LTE_RLC_Config *r = s->rlc_Config; struct NR_RLC_Config *r = rlc_BearerConfig->rlc_Config;
struct LTE_LogicalChannelConfig *l = s->logicalChannelConfig; struct NR_LogicalChannelConfig *l = rlc_BearerConfig->mac_LogicalChannelConfig;
int drb_id = s->drb_Identity; int drb_id = s->drb_Identity;
int channel_id = *s->logicalChannelIdentity; int channel_id = rlc_BearerConfig->logicalChannelIdentity;
int logical_channel_group; int logical_channel_group;
//int t_reordering; //int t_reordering;
...@@ -677,9 +684,9 @@ static void add_drb_am(int rnti, struct LTE_DRB_ToAddMod *s) ...@@ -677,9 +684,9 @@ static void add_drb_am(int rnti, struct LTE_DRB_ToAddMod *s)
} }
switch (r->present) { switch (r->present) {
case LTE_RLC_Config_PR_am: { case NR_RLC_Config_PR_am: {
struct LTE_RLC_Config__am *am; struct NR_RLC_Config__am *am;
am = &r->choice.am; am = r->choice.am;
//t_reordering = decode_t_reordering(am->dl_AM_RLC.t_Reordering); //t_reordering = decode_t_reordering(am->dl_AM_RLC.t_Reordering);
t_status_prohibit = decode_t_status_prohibit(am->dl_AM_RLC.t_StatusProhibit); t_status_prohibit = decode_t_status_prohibit(am->dl_AM_RLC.t_StatusProhibit);
t_poll_retransmit = decode_t_poll_retransmit(am->ul_AM_RLC.t_PollRetransmit); t_poll_retransmit = decode_t_poll_retransmit(am->ul_AM_RLC.t_PollRetransmit);
...@@ -724,15 +731,15 @@ static void add_drb_am(int rnti, struct LTE_DRB_ToAddMod *s) ...@@ -724,15 +731,15 @@ static void add_drb_am(int rnti, struct LTE_DRB_ToAddMod *s)
nr_rlc_manager_unlock(nr_rlc_ue_manager); nr_rlc_manager_unlock(nr_rlc_ue_manager);
} }
static void add_drb_um(int rnti, struct LTE_DRB_ToAddMod *s) static void add_drb_um(int rnti, struct NR_DRB_ToAddMod *s, NR_RLC_BearerConfig_t *rlc_BearerConfig)
{ {
nr_rlc_entity_t *nr_rlc_um; nr_rlc_entity_t *nr_rlc_um;
nr_rlc_ue_t *ue; nr_rlc_ue_t *ue;
struct LTE_RLC_Config *r = s->rlc_Config; struct NR_RLC_Config *r = rlc_BearerConfig->rlc_Config;
struct LTE_LogicalChannelConfig *l = s->logicalChannelConfig; struct NR_LogicalChannelConfig *l = rlc_BearerConfig->mac_LogicalChannelConfig;
int drb_id = s->drb_Identity; int drb_id = s->drb_Identity;
int channel_id = *s->logicalChannelIdentity; int channel_id = rlc_BearerConfig->logicalChannelIdentity;
int logical_channel_group; int logical_channel_group;
//int t_reordering; //int t_reordering;
...@@ -760,15 +767,15 @@ static void add_drb_um(int rnti, struct LTE_DRB_ToAddMod *s) ...@@ -760,15 +767,15 @@ static void add_drb_um(int rnti, struct LTE_DRB_ToAddMod *s)
} }
switch (r->present) { switch (r->present) {
case LTE_RLC_Config_PR_um_Bi_Directional: { case NR_RLC_Config_PR_um_Bi_Directional: {
struct LTE_RLC_Config__um_Bi_Directional *um; struct NR_RLC_Config__um_Bi_Directional *um;
um = &r->choice.um_Bi_Directional; um = r->choice.um_Bi_Directional;
//t_reordering = decode_t_reordering(um->dl_UM_RLC.t_Reordering); //t_reordering = decode_t_reordering(um->dl_UM_RLC.t_Reordering);
if (um->dl_UM_RLC.sn_FieldLength != um->ul_UM_RLC.sn_FieldLength) { if (um->dl_UM_RLC.sn_FieldLength != um->ul_UM_RLC.sn_FieldLength) {
LOG_E(RLC, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__); LOG_E(RLC, "%s:%d:%s: fatal\n", __FILE__, __LINE__, __FUNCTION__);
exit(1); exit(1);
} }
sn_field_length = decode_sn_field_length(um->dl_UM_RLC.sn_FieldLength); sn_field_length = decode_sn_field_length(*um->dl_UM_RLC.sn_FieldLength);
break; break;
} }
default: default:
...@@ -798,14 +805,14 @@ static void add_drb_um(int rnti, struct LTE_DRB_ToAddMod *s) ...@@ -798,14 +805,14 @@ static void add_drb_um(int rnti, struct LTE_DRB_ToAddMod *s)
nr_rlc_manager_unlock(nr_rlc_ue_manager); nr_rlc_manager_unlock(nr_rlc_ue_manager);
} }
__attribute__ ((unused)) static void add_drb(int rnti, struct LTE_DRB_ToAddMod *s) __attribute__ ((unused)) static void add_drb(int rnti, struct NR_DRB_ToAddMod *s, struct NR_RLC_BearerConfig *rlc_BearerConfig)
{ {
switch (s->rlc_Config->present) { switch (rlc_BearerConfig->rlc_Config->present) {
case LTE_RLC_Config_PR_am: case NR_RLC_Config_PR_am:
add_drb_am(rnti, s); add_drb_am(rnti, s, rlc_BearerConfig);
break; break;
case LTE_RLC_Config_PR_um_Bi_Directional: case NR_RLC_Config_PR_um_Bi_Directional:
add_drb_um(rnti, s); add_drb_um(rnti, s, rlc_BearerConfig);
break; break;
default: default:
LOG_E(RLC, "%s:%d:%s: fatal: unhandled DRB type\n", LOG_E(RLC, "%s:%d:%s: fatal: unhandled DRB type\n",
...@@ -853,7 +860,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP ...@@ -853,7 +860,7 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
if (drb2add_listP != NULL) { if (drb2add_listP != NULL) {
for (i = 0; i < drb2add_listP->list.count; i++) { for (i = 0; i < drb2add_listP->list.count; i++) {
add_drb(rnti, drb2add_listP->list.array[i]); add_drb(rnti, drb2add_listP->list.array[i], NULL);
} }
} }
...@@ -861,6 +868,50 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP ...@@ -861,6 +868,50 @@ rlc_op_status_t rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP
} }
//#endif //#endif
rlc_op_status_t nr_rrc_rlc_config_asn1_req (const protocol_ctxt_t * const ctxt_pP,
const NR_SRB_ToAddModList_t * const srb2add_listP,
const NR_DRB_ToAddModList_t * const drb2add_listP,
const NR_DRB_ToReleaseList_t * const drb2release_listP,
const LTE_PMCH_InfoList_r9_t * const pmch_InfoList_r9_pP,
NR_CellGroupConfig_t *SCell_GroupConfig)
{
int rnti = ctxt_pP->rnti;
int i;
if (/*ctxt_pP->enb_flag != 1 ||*/ ctxt_pP->module_id != 0 /*||
ctxt_pP->instance != 0 || ctxt_pP->eNB_index != 0 ||
ctxt_pP->configured != 1 || ctxt_pP->brOption != 0 */) {
LOG_E(RLC, "%s: ctxt_pP not handled (%d %d %d %d %d %d)\n", __FUNCTION__,
ctxt_pP->enb_flag , ctxt_pP->module_id, ctxt_pP->instance,
ctxt_pP->eNB_index, ctxt_pP->configured, ctxt_pP->brOption);
exit(1);
}
if (pmch_InfoList_r9_pP != NULL) {
LOG_E(RLC, "%s: pmch_InfoList_r9_pP not handled\n", __FUNCTION__);
exit(1);
}
if (drb2release_listP != NULL) {
LOG_E(RLC, "%s:%d:%s: TODO\n", __FILE__, __LINE__, __FUNCTION__);
exit(1);
}
if (srb2add_listP != NULL) {
for (i = 0; i < srb2add_listP->list.count; i++) {
add_srb(rnti, srb2add_listP->list.array[i]);
}
}
if (drb2add_listP != NULL) {
for (i = 0; i < drb2add_listP->list.count; i++) {
add_drb(rnti, drb2add_listP->list.array[i], SCell_GroupConfig->rlc_BearerToAddModList->list.array[i]);
}
}
return RLC_OP_STATUS_OK;
}
//#if 0 //#if 0
rlc_op_status_t rrc_rlc_config_req ( rlc_op_status_t rrc_rlc_config_req (
const protocol_ctxt_t* const ctxt_pP, const protocol_ctxt_t* const ctxt_pP,
......
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