Files
openairinterface5g/openair2/RRC/LTE/utils.c
T
Robert Schmidt 8ffe5b4920 Rename UE_list_t to UE_info_t, UE_list_t separate struct
UE_list_t is now used as a separate list. It can be e.g. used in the
scheduler to mark groups of users. The original UE_list_t is renamed to
UE_info_t to reflect that it is a container for information about UEs.
2020-04-01 10:47:02 +02:00

184 lines
6.8 KiB
C

/*
* Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The OpenAirInterface Software Alliance licenses this file to You under
* the OAI Public License, Version 1.1 (the "License"); you may not use this file
* except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.openairinterface.org/?page_id=698
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*-------------------------------------------------------------------------------
* For more information about the OpenAirInterface (OAI) Software Alliance:
* contact@openairinterface.org
*/
/*________________________openair_rrc_utils.c________________________
Authors : Hicham Anouar
Company : EURECOM
Emails : anouar@eurecom.fr
________________________________________________________________*/
#include "defs.h"
#include "extern.h"
//------------------------------------------------------------------------------------------------------------------//
uint16_t find_free_dtch_position(uint8_t Mod_id, uint16_t UE_CH_index) {
uint16_t i,j;
if(UE_CH_index==0) {
j=0;
} else {
j=1;
}
for(i=j; i<NB_RAB_MAX; i++) { //first RAB IS BROADCAST DTCH
if(CH_rrc_inst[Mod_id].Rab[i][UE_CH_index].Active==0) {
return( i);
}
}
msg("NO FREE DTCH LCHAN, exit... \n");
Mac_rlc_xface->macphy_exit("NO FREE DTCH LCHAN, exit");
return 0;
}
//-------------------------------------------------------------------------------------------//
uint8_t rrc_find_free_ue_index(uint8_t Mod_id) {
//-------------------------------------------------------------------------------------------//
uint16_t i;
for(i=1; i<=NB_CNX_CH; i++)
if ( (CH_rrc_inst[Mod_id].Info.UE_info[i][0] == 0) &&
(CH_rrc_inst[Mod_id].Info.UE_info[i][1] == 0) &&
(CH_rrc_inst[Mod_id].Info.UE_info[i][2] == 0) &&
(CH_rrc_inst[Mod_id].Info.UE_info[i][3] == 0) &&
(CH_rrc_inst[Mod_id].Info.UE_info[i][4] == 0)) {
return i;
}
return 0xff;
}
//-------------------------------------------------------------------------------------------//
unsigned short rrc_find_ue_index(unsigned char Mod_id, L2_ID Mac_id) {
//-------------------------------------------------------------------------------------------//
unsigned char i;
/*
for(i=0;i<=NB_CNX_CH;i++)
if( bcmp(Mac_id.L2_id,CH_rrc_inst[Mod_id].Info.UE_info[i].L2_id,sizeof(L2_ID))==0)
return i;
return i;
*/
}
//-------------------------------------------------------------------------------------------//
uint8_t rrc_is_node_isolated(uint8_t Mod_id) {
//-------------------------------------------------------------------------------------------//
/*uint8_t i;
for(i=0;i<NB_CNX_UE;i++)
if( Rrc_inst[Mod_id].Rrc_info[i].Info.UE_info.Nb_bcch_wait < NB_WAIT_CH_BCCH)
break;
return((i==NB_CNX_UE)?1:0);
*/
}
//-------------------------------------------------------------------------------------------//
uint8_t find_rrc_info_index(uint8_t Mod_id,uint8_t CH_id) {
//-------------------------------------------------------------------------------------------//
/*uint8_t i;
for (i=0;i<NB_CNX_UE;i++){
msg("RRC_FIND_CH_INFO %d, Now %d \n",CH_id,Rrc_inst[Mod_id].Rrc_info[i].Info.UE_info.CH_id);
if(Rrc_inst[Mod_id].Rrc_info[i].Info.UE_info.CH_id == CH_id) return i;
}
error_msg("[OPENAIR][RRC] RRC_INFO_INDEX: FATAL ERROR: Not yet Pre_Synchronized with CH ???%d\n",CH_id);
exit(-1);
*/
}
/*
//--------------------------------------------------------------------------------------------//
SRB_INFO* rrc_find_srb_info(uint8_t Mod_id,uint16_t Srb_id){
//----------------------------------------------------------------------------------------//
uint8_t i;
if(Rrc_inst[Mod_id].Rrc_info[0].Status == CH_READY){
for(i=0;i<NB_CNX_CH;i++){
//msg("i=%d, Srb0Id %d Srb2Id %d S_id=%d\n",i,Rrc_inst[Mod_id].Srb0[i].Srb_id,Rrc_inst[Mod_id].Srb2[i].Srb_info.Srb_id, Srb_id);
if(Rrc_inst[Mod_id].Srb0[i].Srb_id == Srb_id)
return &Rrc_inst[Mod_id].Srb0[i];
if(Rrc_inst[Mod_id].Srb1[i].Srb_id == Srb_id)
return &Rrc_inst[Mod_id].Srb1[i];
if(Rrc_inst[Mod_id].Srb2[i].Srb_info.Srb_id == Srb_id)
return &Rrc_inst[Mod_id].Srb2[i].Srb_info;
}
}
else{
for(i=0;i<NB_CNX_UE;i++){
//msg("i=%d, Srb0Id %d Srb2Id %d S_id=%d\n",i,Rrc_inst[Mod_id].Srb0[i].Srb_id,Rrc_inst[Mod_id].Srb2[i].Srb_info.Srb_id, Srb_id);
if(Rrc_inst[Mod_id].Srb0[i].Srb_id == Srb_id)
return &Rrc_inst[Mod_id].Srb0[i];
if(Rrc_inst[Mod_id].Srb1[i].Srb_id == Srb_id)
return &Rrc_inst[Mod_id].Srb1[i];
if(Rrc_inst[Mod_id].Srb2[i].Srb_info.Srb_id == Srb_id)
return &Rrc_inst[Mod_id].Srb2[i].Srb_info;
}
}
return(SRB_INFO*)0;
}
//--------------------------------------------------------------------------------------------//
RB_INFO* rrc_find_rb_info(uint8_t Mod_id,uint16_t Rb_id){
//----------------------------------------------------------------------------------------//
uint16_t i,j;
if(Rrc_inst[Mod_id].Rrc_info[0].Status == CH_READY){
for(i=0;i<NB_CNX_CH;i++)
for(j=0;j<NB_RAB_MAX;j++){
// msg("j=%d, exit_id %d rb_id %d\n",j,Rrc_inst[Mod_id].Rab[j][i].Rb_info.Rb_id,Rb_id);
if((Rrc_inst[Mod_id].Rab[j][i].Active == 1) && (Rrc_inst[Mod_id].Rab[j][i].Rb_info.Rb_id == Rb_id))
return &Rrc_inst[Mod_id].Rab[j][i].Rb_info;
}
}
else{
for(i=0;i<NB_CNX_UE;i++)
for(j=0;j<NB_RAB_MAX;j++){
// msg("j=%d, exit_id %d rb_id %d\n",j,Rrc_inst[Mod_id].Rab[j][i].Rb_info.Rb_id,Rb_id);
if((Rrc_inst[Mod_id].Rab[j][i].Active == 1) && (Rrc_inst[Mod_id].Rab[j][i].Rb_info.Rb_id == Rb_id))
return &Rrc_inst[Mod_id].Rab[j][i].Rb_info;
}
}
return(RB_INFO*)0;
}
*/
/*------------------------------------------------------------------------------*/
unsigned char rrc_is_mobile_already_associated(uint8_t Mod_id, L2_ID Mac_id) {
/*------------------------------------------------------------------------------*/
/*
unsigned char i;
for(i=0;i<NB_CNX_CH;i++)
if( bcmp(Mac_id.L2_id,CH_rrc_inst[Mod_id].Info.UE_info[i].L2_id,sizeof(L2_ID))==0)
return 1;
return 0;
*/
}
//-------------------------------------------------------------------------------------------//
void rrc_reset_buffer(RRC_BUFFER *Rrc_buffer) {
//-------------------------------------------------------------------------------------------//
// Rrc_buffer->Header->Rv_tb_idx=0;
// Rrc_buffer->W_idx=0;
//Rrc_buffer->R_idx=0;
}