1 /******************************************************************************
3 * Copyright (c) 2020 ICT/CAS.
5 * Licensed under the O-RAN Software License, Version 1.0 (the "Software License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * https://www.o-ran.org/software
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 *******************************************************************************/
21 SdapGlobalDtat_t s_SdapGlobalData[UPC_MAX_UE_NUM] = {{0}};
23 void sdapResortDrbId(SdapInstance_t *pSdapInstance, int idx)
28 for(i = 0; i < pSdapInstance->drbNum; i++)
35 pSdapInstance->drbId[j] = pSdapInstance->drbId[i];
40 void sdapResortSessionId(SdapGlobalDtat_t *pGlobalData, int idx)
45 for(i = 0; i < pGlobalData->sessNum; i++)
52 pGlobalData->sessId[j] = pGlobalData->sessId[i];
57 SdapGlobalDtat_t* sdapGetUeGlobalData(UINT64 upE1apId, UINT8 *flag)
61 for(i = 0; i < UPC_MAX_UE_NUM; i++)
63 if(upE1apId == s_SdapGlobalData[i].upE1apId)
66 return &s_SdapGlobalData[i];
70 for(i = 0; i < UPC_MAX_UE_NUM; i++)
72 if(0 == s_SdapGlobalData[i].upE1apId)
75 return &s_SdapGlobalData[i];
81 #if CONCEPT('Create Instance')
82 INT32 sdapCreateQosInfo(SdapDrbCfg_t *pDrbCfg, upcTempDrbInfo_t *pTempDrb, SdapDrbCfgRet_t *pDrbCfgRet)
86 upcTempQosInfo_t *pTempQos;
88 for(i = 0; i < pTempDrb->qosSetupNum; i++)
90 pTempQos = &pTempDrb->pQosSetupList[i];
92 if((NULL == pTempQos) || (TRUE != pTempQos->qosSetupAllowed))
97 qosFlowId = pTempQos->qosFlowId;
98 pDrbCfg->qfi[pDrbCfg->qfiNum] = qosFlowId;
99 pDrbCfg->qosFlowInfo[qosFlowId].qosFlowLevelQosPar = pTempQos->qosPara;
100 if(pTempQos->qosMapFlag)
102 pDrbCfg->qosFlowInfo[qosFlowId].qosFlowMapInd = pTempQos->qosFlowMapInd;
106 pDrbCfgRet->Qfi[pDrbCfgRet->QosNum] = qosFlowId;
107 pDrbCfgRet->QosNum++;
110 if(0 == pDrbCfg->qfiNum)
118 INT32 sdapCreateDrbInfo(SdapInstance_t *pInstance, upcTempSessInfo_t *pSessTempInfo, sdapSessCfgRet_t *pCfgRet)
123 upcTempDrbInfo_t *pTempDrb = NULL;
125 pInstance->sessId = pSessTempInfo->pduSessId;
126 pCfgRet->sessId = pInstance->sessId;
128 for(i = 0; i < pSessTempInfo->drbSetupNum; i++)
130 pTempDrb = &pSessTempInfo->pTempDrbSetupList[i];
132 if((NULL == pTempDrb) || (TRUE != pTempDrb->drbSetupAllowed))
137 drbId = pTempDrb->drbId;
139 if(VOS_OK != sdapCreateQosInfo(&pInstance->drbCfg[drbId - 1], pTempDrb, &pCfgRet->actDrbCfg[drbId - 1]))
141 pCfgRet->failDrbId[pCfgRet->failDrbNum] = drbId;
142 pCfgRet->failDrbNum++;
143 pCfgRet->cause[drbId - 1] = RNL_UNSPECIFIED;
146 pCfgRet->actDrbId[pCfgRet->actDrbNum] = drbId;
147 pCfgRet->actDrbCfg[drbId - 1].drbId = drbId;
148 pCfgRet->actDrbNum++;
150 VOS_MemCpy(&pInstance->drbCfg[drbId - 1].sdapCfg, &pTempDrb->sdapConfig, sizeof(SdapCfg_t));
152 pInstance->drbCfg[drbId - 1].drbId = drbId;
153 pInstance->drbId[pInstance->drbNum] = drbId;
157 if(0 == pCfgRet->actDrbNum)
159 pCfgRet->sessFailCause = RNL_UNSPECIFIED;
167 extern INT32 printfSdapNewInstance(SdapGlobalDtat_t *pGlobalData);
168 extern INT32 sdapInactiveDetectSet(UINT64 ueE1apId);
170 INT32 sdapCreateNewInstance
172 SdapGlobalDtat_t *pGlobalData,
174 upcTempSessInfo_t *pSessTempInfo,
175 sdapSessCfgRet_t *pCfgRet
181 pGlobalData->upE1apId = upE1apId;
182 sessId = pSessTempInfo->pduSessId;
183 idx = pGlobalData->sessNum;
185 if(VOS_OK != sdapCreateDrbInfo(&pGlobalData->sdapInstance[sessId], pSessTempInfo, pCfgRet))
187 pCfgRet->sessFailCause = RNL_UNSPECIFIED;
191 pGlobalData->sessId[idx] = sessId;
192 pGlobalData->sessNum++;
194 printfSdapNewInstance(pGlobalData);
199 INT32 sdapCreateInstance(UINT64 upE1apId, upcTempSessInfo_t *pSessTempInfo, sdapSessCfgRet_t *pCfgRet)
203 SdapGlobalDtat_t *pGlobalData = NULL;
205 pGlobalData = sdapGetUeGlobalData(upE1apId, &flag);
207 if(NULL == pGlobalData)
209 pCfgRet->sessFailCause = RNL_UNSPECIFIED;
214 2、只针对E1接口BearerContextSetupReq*/
217 VOS_MemZero(pGlobalData, sizeof(SdapGlobalDtat_t));
220 ret = sdapCreateNewInstance(pGlobalData, upE1apId, pSessTempInfo, pCfgRet);
226 #if CONCEPT('Delete Instance')
227 INT32 sdapDeleteDrbInfo(SdapInstance_t *pSdapInstance, UINT8 drbId)
231 for(i = 0; i < pSdapInstance->drbNum; i++)
233 if(drbId == pSdapInstance->drbId[i])
235 sdapResortDrbId(pSdapInstance, i);
236 pSdapInstance->drbNum--;
237 VOS_MemZero(&pSdapInstance->drbCfg[drbId - 1], sizeof(SdapDrbCfg_t));
245 INT32 sdapDeleteDrbInfoOfInstance(UINT64 upE1apId, UINT8 sessId, UINT8 drbId)
249 SdapGlobalDtat_t *pGlobalData = NULL;
251 pGlobalData = sdapGetUeGlobalData(upE1apId, &flag);
254 if(NULL == pGlobalData || 0 == flag)
259 for(i = 0; i < pGlobalData->sessNum; i++)
261 if(sessId == pGlobalData->sessId[i])
263 sdapDeleteDrbInfo(&pGlobalData->sdapInstance[sessId], drbId);
272 INT32 sdapDeleteInstance(UINT64 upE1apId, UINT16 sessId)
276 SdapGlobalDtat_t *pGlobalData = NULL;
278 pGlobalData = sdapGetUeGlobalData(upE1apId, &flag);
281 if(NULL == pGlobalData || 0 == flag)
286 for(i = 0; i < pGlobalData->sessNum; i++)
288 if(sessId == pGlobalData->sessId[i])
290 sdapResortSessionId(pGlobalData, i);
291 pGlobalData->sessNum--;
292 VOS_MemZero(&pGlobalData->sdapInstance[sessId], sizeof(SdapInstance_t));