1 /******************************************************************************
2 ###############################################################################
3 # Copyright (c) [2017-2020] [ICT/CAS] #
4 # Licensed under the ORAN Software License v1.0 (License) #
5 ###############################################################################
6 ******************************************************************************/
9 SdapGlobalDtat_t s_SdapGlobalData[UPC_MAX_UE_NUM] = {{0}};
11 void sdapResortDrbId(SdapInstance_t *pSdapInstance, int idx)
16 for(i = 0; i < pSdapInstance->drbNum; i++)
23 pSdapInstance->drbId[j] = pSdapInstance->drbId[i];
28 void sdapResortSessionId(SdapGlobalDtat_t *pGlobalData, int idx)
33 for(i = 0; i < pGlobalData->sessNum; i++)
40 pGlobalData->sessId[j] = pGlobalData->sessId[i];
45 SdapGlobalDtat_t* sdapGetUeGlobalData(UINT64 upE1apId, UINT8 *flag)
49 for(i = 0; i < UPC_MAX_UE_NUM; i++)
51 if(upE1apId == s_SdapGlobalData[i].upE1apId)
54 return &s_SdapGlobalData[i];
58 for(i = 0; i < UPC_MAX_UE_NUM; i++)
60 if(0 == s_SdapGlobalData[i].upE1apId)
63 return &s_SdapGlobalData[i];
69 #if CONCEPT('Create Instance')
70 INT32 sdapCreateQosInfo(SdapDrbCfg_t *pDrbCfg, upcTempDrbInfo_t *pTempDrb, SdapDrbCfgRet_t *pDrbCfgRet)
74 upcTempQosInfo_t *pTempQos;
76 for(i = 0; i < pTempDrb->qosSetupNum; i++)
78 pTempQos = &pTempDrb->pQosSetupList[i];
80 if((NULL == pTempQos) || (TRUE != pTempQos->qosSetupAllowed))
85 qosFlowId = pTempQos->qosFlowId;
86 pDrbCfg->qfi[pDrbCfg->qfiNum] = qosFlowId;
87 pDrbCfg->qosFlowInfo[qosFlowId].qosFlowLevelQosPar = pTempQos->qosPara;
88 if(pTempQos->qosMapFlag)
90 pDrbCfg->qosFlowInfo[qosFlowId].qosFlowMapInd = pTempQos->qosFlowMapInd;
94 pDrbCfgRet->Qfi[pDrbCfgRet->QosNum] = qosFlowId;
98 if(0 == pDrbCfg->qfiNum)
106 INT32 sdapCreateDrbInfo(SdapInstance_t *pInstance, upcTempSessInfo_t *pSessTempInfo, sdapSessCfgRet_t *pCfgRet)
111 upcTempDrbInfo_t *pTempDrb = NULL;
113 pInstance->sessId = pSessTempInfo->pduSessId;
114 pCfgRet->sessId = pInstance->sessId;
116 for(i = 0; i < pSessTempInfo->drbSetupNum; i++)
118 pTempDrb = &pSessTempInfo->pTempDrbSetupList[i];
120 if((NULL == pTempDrb) || (TRUE != pTempDrb->drbSetupAllowed))
125 drbId = pTempDrb->drbId;
127 if(VOS_OK != sdapCreateQosInfo(&pInstance->drbCfg[drbId - 1], pTempDrb, &pCfgRet->actDrbCfg[drbId - 1]))
129 pCfgRet->failDrbId[pCfgRet->failDrbNum] = drbId;
130 pCfgRet->failDrbNum++;
131 pCfgRet->cause[drbId - 1] = RNL_UNSPECIFIED;
134 pCfgRet->actDrbId[pCfgRet->actDrbNum] = drbId;
135 pCfgRet->actDrbCfg[drbId - 1].drbId = drbId;
136 pCfgRet->actDrbNum++;
138 VOS_MemCpy(&pInstance->drbCfg[drbId - 1].sdapCfg, &pTempDrb->sdapConfig, sizeof(SdapCfg_t));
140 pInstance->drbCfg[drbId - 1].drbId = drbId;
141 pInstance->drbId[pInstance->drbNum] = drbId;
145 if(0 == pCfgRet->actDrbNum)
147 pCfgRet->sessFailCause = RNL_UNSPECIFIED;
155 extern INT32 printfSdapNewInstance(SdapGlobalDtat_t *pGlobalData);
156 extern INT32 sdapInactiveDetectSet(UINT64 ueE1apId);
158 INT32 sdapCreateNewInstance
160 SdapGlobalDtat_t *pGlobalData,
162 upcTempSessInfo_t *pSessTempInfo,
163 sdapSessCfgRet_t *pCfgRet
169 pGlobalData->upE1apId = upE1apId;
170 sessId = pSessTempInfo->pduSessId;
171 idx = pGlobalData->sessNum;
173 if(VOS_OK != sdapCreateDrbInfo(&pGlobalData->sdapInstance[sessId], pSessTempInfo, pCfgRet))
175 pCfgRet->sessFailCause = RNL_UNSPECIFIED;
179 pGlobalData->sessId[idx] = sessId;
180 pGlobalData->sessNum++;
182 printfSdapNewInstance(pGlobalData);
187 INT32 sdapCreateInstance(UINT64 upE1apId, upcTempSessInfo_t *pSessTempInfo, sdapSessCfgRet_t *pCfgRet)
191 SdapGlobalDtat_t *pGlobalData = NULL;
193 pGlobalData = sdapGetUeGlobalData(upE1apId, &flag);
195 if(NULL == pGlobalData)
197 pCfgRet->sessFailCause = RNL_UNSPECIFIED;
202 2、只针对E1接口BearerContextSetupReq*/
205 VOS_MemZero(pGlobalData, sizeof(SdapGlobalDtat_t));
208 ret = sdapCreateNewInstance(pGlobalData, upE1apId, pSessTempInfo, pCfgRet);
214 #if CONCEPT('Delete Instance')
215 INT32 sdapDeleteDrbInfo(SdapInstance_t *pSdapInstance, UINT8 drbId)
219 for(i = 0; i < pSdapInstance->drbNum; i++)
221 if(drbId == pSdapInstance->drbId[i])
223 sdapResortDrbId(pSdapInstance, i);
224 pSdapInstance->drbNum--;
225 VOS_MemZero(&pSdapInstance->drbCfg[drbId - 1], sizeof(SdapDrbCfg_t));
233 INT32 sdapDeleteDrbInfoOfInstance(UINT64 upE1apId, UINT8 sessId, UINT8 drbId)
237 SdapGlobalDtat_t *pGlobalData = NULL;
239 pGlobalData = sdapGetUeGlobalData(upE1apId, &flag);
242 if(NULL == pGlobalData || 0 == flag)
247 for(i = 0; i < pGlobalData->sessNum; i++)
249 if(sessId == pGlobalData->sessId[i])
251 sdapDeleteDrbInfo(&pGlobalData->sdapInstance[sessId], drbId);
260 INT32 sdapDeleteInstance(UINT64 upE1apId, UINT16 sessId)
264 SdapGlobalDtat_t *pGlobalData = NULL;
266 pGlobalData = sdapGetUeGlobalData(upE1apId, &flag);
269 if(NULL == pGlobalData || 0 == flag)
274 for(i = 0; i < pGlobalData->sessNum; i++)
276 if(sessId == pGlobalData->sessId[i])
278 sdapResortSessionId(pGlobalData, i);
279 pGlobalData->sessNum--;
280 VOS_MemZero(&pGlobalData->sdapInstance[sessId], sizeof(SdapInstance_t));