for(uint8_t i = 0;i < kqi->bearer_num_;i++) { KQIBearer_T& bc = kqi->bearers_[i]; if(0 == bc.type) { bc.type = 1; } //63 p_encoder_cur->Add(bc.ebi,kExportTagBearerId); //64 p_encoder_cur->Add(bc.type,kExportTagBearerType); //65 p_encoder_cur->Add(bc.qci,kExportTagBearerQci); //66 p_encoder_cur->Add(bc.status,kExportTagBearerStatus); //67 p_encoder_cur->Add(bc.enb_gtp_teid,kExportTagBearerEnbTeid); //68 p_encoder_cur->Add(bc.sgw_gtp_teid,kExportTagBearerSgwTeid); //69 p_encoder_cur->Add(bc.req_cause,kExportTagBearerReqCause); //70 p_encoder_cur->Add(bc.fail_cause,kExportTagBearerFailCause); }什么意思
时间: 2024-03-30 16:34:04 浏览: 116
这是一段 C++ 代码,其中包含一个 for 循环。该循环用于遍历 S1MMEKQI 类型参数 kqi 中的 bearers_ 数组,将其元素进行编码,并添加到 p_encoder_cur 中。具体来说,对于 bearers_ 数组中的每个元素 bc,该循环会根据其不同的成员变量,使用 Add 函数将其编码为不同的类型,并分别使用 kExportTagBearerId、kExportTagBearerType、kExportTagBearerQci、kExportTagBearerStatus、kExportTagBearerEnbTeid、kExportTagBearerSgwTeid、kExportTagBearerReqCause 和 kExportTagBearerFailCause 作为编码标签。最后编码结果会存储在 p_encoder_cur 中。
相关问题
void S1mmeSession::CtOutputKqi(S1MMEKQI* kqi, S1APNode* p_node, uint8_t worker_id) { SPUserInfo& sp_user_info = p_node->GetUserInfo(); //先填充kqi中承载信息 for (uint8_t i=0; i<kqi->GetBearerNum(); i++) { KQIBearer* p_bearer = kqi->GetBearer(i); if (p_bearer == NULL) break; sp_user_info->FillKQIBearer(p_bearer->ebi, p_bearer); } //再执行该信令功能 switch (kqi->kqi_type_) { case kS1mmeProcTypeEPSBearerContextDeactivation: //删除释放的承载 sp_user_info->EraseEBI(kqi->GetBearer1()->ebi); break; case kS1mmeProcTypeERABRelease: case kS1mmeProcTypeERABReleaseIndication: //删除需要释放的承载 for (uint8_t i=0; i<kqi->GetBearerNum(); i++) { KQIBearer* p_bearer = kqi->GetBearer(i); if (p_bearer == NULL) break; sp_user_info->EraseEBI(p_bearer->ebi); } break; case kS1mmeProcTypePathSwitch: case kS1mmeProcTypeS1SwitchOut: case kS1mmeProcTypeS1SwitchIn: kqi->bearer_num_ = 0;//暂不输出切换相关的承载信息 //删除没有切换过来的承载 break; } if (!(kqi->kqi_type_ >= kS1mmeProcTypeAttach && kqi->kqi_type_ <= kS1mmeProcTypeMax)) { return; } // CtEncodeKqi(kqi, p_node, worker_id); return; }什么意思
这是一段 C++ 代码,是 S1mmeSession 类的一个方法,用于生成和输出 S1-MME 协议中的 KQI(Key Quality Indicator)信息。代码中的 SPUserInfo 是一个智能指针,指向一个 S1APNode 对象的用户信息。该方法首先根据传入的 KQI 对象中的承载信息,填充用户信息中相应承载的 KQI 信息,然后根据 KQI 类型执行不同的功能,比如删除释放的承载或需要释放的承载等。最后,对于符合条件的 KQI 类型,该方法会调用 CtEncodeKqi 方法对 KQI 进行编码和输出。
void S1mmeSession::CuOutputNode(S1APNode* p_node, uint8_t worker_id,bool timeout) { bool output_ue_release = true, out_put_pdn_connect = true; time_t last_kqi_sec = 0; for (std::vector<CuKqiInfo_T>::iterator it = p_node->cu_kqi_.begin(); it != p_node->cu_kqi_.end();) { CuOutputKqi(p_node, it->msg_type, it->ebi, last_kqi_sec, output_ue_release,worker_id); it = p_node->cu_kqi_.erase(it); } S1MMEKQI* kqi_main = p_node->FindKqi(kS1mmeProcTypeERABModification); if(kqi_main){ CuEncodeErabModification(kqi_main, p_node->GetCommonInfo(), p_node->GetUserInfo(), current_time_.tv_sec,worker_id); } kqi_main = p_node->FindKqi(kS1mmeProcTypeSecondaryRatDataUsage); if(kqi_main){ CuEncodeSecondaryRatDataUsageReport(kqi_main, p_node->GetCommonInfo(), p_node->GetUserInfo(), current_time_.tv_sec,worker_id); } kqi_main = p_node->FindKqi(kS1mmeProcTypeAttach); if (kqi_main && ((timeout && nas_default_encrypt_alg_) || (!timeout))) { S1MMEKQI* kqi_ue_release = p_node->FindKqi(kS1mmeProcTypeUEContextRelease); S1MMEKQI* kqi_pdn_connect = p_node->FindKqi(kS1mmeProcTypePdnConnect, 5); if (1) { for (uint8_t i=0; i<1; i++) { //KQIBearer* p_bearer = kqi_initial_context->GetBearer(i); //if (p_bearer == NULL) break; //p_node->GetUserInfo()->FillKQIBearer(p_bearer->ebi, p_bearer); } } CuEncodeAttach(kqi_main, p_node->GetCommonInfo(), p_node->GetUserInfo(), current_time_.tv_sec,worker_id,kqi_ue_release,kqi_pdn_connect); //output attach if (output_ue_release && kqi_ue_release && kqi_ue_release->complete_time_.tv_sec - kqi_main->complete_time_.tv_sec > 15) { //output UEContextRelease; CuEncodeUEContextRelease(kqi_ue_release,p_node->GetCommonInfo(),p_node->GetUserInfo(),current_time_.tv_sec,worker_id); output_ue_release = false; } out_put_pdn_connect = false; }什么意思
这段代码主要是将S1APNode的信息输出到CU(Control Unit)中。首先,它会遍历p_node->cu_kqi_中的每个CuKqiInfo_T对象,并调用CuOutputKqi()函数将KQI信息编码并输出到CU中。接着,它会查找S1MMEKQI对象,并调用CuEncodeErabModification()、CuEncodeSecondaryRatDataUsageReport()和CuEncodeAttach()函数将ERAB Modification、Secondary RAT Data Usage Report和Attach信息编码并输出到CU中。如果timeout为true且nas_default_encrypt_alg_不为空,还会调用CuEncodeUEContextRelease()函数将UE Context Release信息编码并输出到CU中。在输出Attach信息时,如果output_ue_release为true且kqi_ue_release不为空,且kqi_ue_release已完成的时间与kqi_main已完成的时间相差大于15秒,则会调用CuEncodeUEContextRelease()函数将UE Context Release信息编码并输出到CU中。最后,将out_put_pdn_connect设置为false。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)