/***************************************************************************** 函 数 名 : oam_alarm_format_string 功能描述 : 根据格式,将告警信息写入到指定的文件中 输入参数 : 1) 输出内容 2) 输出最长长度 3) VAP编号 4) 文件ID 5) 行号 6) 模块ID 7) 告警类型 输出参数 : 无 返 回 值 : OAL_SUCC :成功;或其他错误码 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2012年10月15日 作 者 : c59720 修改内容 : 新生成函数 *****************************************************************************/ OAL_STATIC oal_uint32 oam_alarm_format_string( oal_int8 *pac_output_data, oal_uint16 ul_data_len, oal_uint8 uc_vap_id, oal_uint16 us_file_no, oal_uint32 ul_file_line_no, oam_module_id_enum_uint16 en_mod, oam_alarm_type_enum_uint16 en_alarm_type) { oal_uint32 ul_tick; if (OAL_PTR_NULL == pac_output_data) { return OAL_ERR_CODE_PTR_NULL; } /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 格式化输出内容 */ OAL_SPRINTF(pac_output_data, ul_data_len, "【ALARM】:Tick=%u, FileId=%d, LineNo=%u, VAP =%d, ModId=%d,ALARM TYPE = %u\r\n", ul_tick, us_file_no, ul_file_line_no, uc_vap_id, en_mod, en_alarm_type); return OAL_SUCC; }
/***************************************************************************** 函 数 名 : hmac_roam_find_in_blacklist 功能描述 : 检查列表中是否存在该bssid 输入参数 : 输出参数 : 无 返 回 值 : OAL_SUCC 或 失败错误码 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2015年7月8日 作 者 : g00260350 修改内容 : 新生成函数 *****************************************************************************/ OAL_STATIC oal_bool_enum_uint8 hmac_roam_alg_find_in_bsslist(hmac_roam_bss_list_stru *pst_roam_bss_list, oal_uint8 *puc_bssid) { hmac_roam_bss_info_stru *pst_cur_bss; oal_uint32 ul_current_index; oal_uint32 ul_now; oal_uint32 ul_timeout; oal_uint32 ul_delta_time; oal_uint16 us_count_limit; ul_now = (oal_uint32)OAL_TIME_GET_STAMP_MS(); for (ul_current_index = 0; ul_current_index < ROAM_LIST_MAX; ul_current_index++) { pst_cur_bss = &pst_roam_bss_list->ast_bss[ul_current_index]; ul_timeout = pst_cur_bss->ul_timeout; us_count_limit = pst_cur_bss->us_count_limit; if (0 == oal_compare_mac_addr(pst_cur_bss->auc_bssid, puc_bssid)) { /* 如果在超时时间内出现count_limit次以上记录 */ ul_delta_time = OAL_TIME_GET_RUNTIME(pst_cur_bss->ul_time_stamp, ul_now); if ((ul_delta_time <= ul_timeout) && (pst_cur_bss->us_count >= us_count_limit)) { return OAL_TRUE; } return OAL_FALSE; } } return OAL_FALSE; }
/***************************************************************************** 函 数 名 : oam_stats_report_irq_info_to_sdt 功能描述 : 中断统计信息上报SDT 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年2月21日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_void oam_stats_report_irq_info_to_sdt( oal_uint8 *puc_irq_info_addr, oal_uint16 us_irq_info_len) { oal_uint32 ul_tick; oal_uint16 us_skb_len; /* skb总长度 */ oal_netbuf_stru *pst_netbuf; oam_ota_stru *pst_ota_data; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return ; } if (OAL_PTR_NULL == puc_irq_info_addr) { OAL_IO_PRINT("oam_stats_report_irq_info_to_sdt::puc_irq_info_addr is null!\n"); return; } /* 为上报描述符申请空间,头部预留8字节,尾部预留1字节,给sdt_drv用 */ us_skb_len = us_irq_info_len + OAL_SIZEOF(oam_ota_hdr_stru); if (us_skb_len > WLAN_SDT_NETBUF_MAX_PAYLOAD) { us_skb_len = WLAN_SDT_NETBUF_MAX_PAYLOAD; us_irq_info_len = WLAN_SDT_NETBUF_MAX_PAYLOAD - OAL_SIZEOF(oam_ota_hdr_stru); } pst_netbuf = oam_alloc_data2sdt(us_skb_len); if (OAL_PTR_NULL == pst_netbuf) { return; } pst_ota_data = (oam_ota_stru *)oal_netbuf_data(pst_netbuf); /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 填写ota消息头结构体 */ pst_ota_data->st_ota_hdr.ul_tick = ul_tick; pst_ota_data->st_ota_hdr.en_ota_type = OAM_OTA_TYPE_IRQ; pst_ota_data->st_ota_hdr.uc_frame_hdr_len = 0; pst_ota_data->st_ota_hdr.us_ota_data_len = us_irq_info_len; #if (_PRE_PRODUCT_ID == _PRE_PRODUCT_ID_HI1102_HOST) pst_ota_data->st_ota_hdr.auc_resv[0] = 2; #else pst_ota_data->st_ota_hdr.auc_resv[0] = 3; #endif /* 复制数据,填写ota数据 */ oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)puc_irq_info_addr, (oal_uint32)us_irq_info_len); /* 下发至sdt接收队列,若队列满则串口输出 */ oam_report_data2sdt(pst_netbuf, OAM_DATA_TYPE_OTA, OAM_PRIMID_TYPE_OUTPUT_CONTENT); }
/***************************************************************************** 函 数 名 : oam_stats_report_usr_info 功能描述 : 把某个用户的统计信息上报sdt 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年3月24日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_stats_report_usr_info(oal_uint16 us_usr_id) { oal_uint32 ul_tick; oal_uint16 us_skb_len; /* skb总长度 */ oal_netbuf_stru *pst_netbuf; oam_ota_stru *pst_ota_data; oal_uint32 ul_ret = OAL_SUCC; oal_uint16 us_stat_info_len; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return OAL_ERR_CODE_PTR_NULL; } if (us_usr_id >= WLAN_DEVICE_SUPPORT_MAX_NUM_SPEC * WLAN_ACTIVE_USER_MAX_NUM) { return OAL_ERR_CODE_INVALID_CONFIG; } us_stat_info_len = OAL_SIZEOF(oam_device_stat_info_stru); /* 为上报统计信息申请空间,头部预留8字节,尾部预留1字节,给sdt_drv用 */ us_skb_len = us_stat_info_len + OAL_SIZEOF(oam_ota_hdr_stru); if (us_skb_len > WLAN_SDT_NETBUF_MAX_PAYLOAD) { us_skb_len = WLAN_SDT_NETBUF_MAX_PAYLOAD; us_stat_info_len = WLAN_SDT_NETBUF_MAX_PAYLOAD - OAL_SIZEOF(oam_ota_hdr_stru); } pst_netbuf = oam_alloc_data2sdt(us_skb_len); if (OAL_PTR_NULL == pst_netbuf) { return OAL_ERR_CODE_PTR_NULL; } pst_ota_data = (oam_ota_stru *)oal_netbuf_data(pst_netbuf); /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 填写ota消息头结构体 */ pst_ota_data->st_ota_hdr.ul_tick = ul_tick; pst_ota_data->st_ota_hdr.en_ota_type = OAM_OTA_TYPE_USER_STAT_INFO; pst_ota_data->st_ota_hdr.uc_frame_hdr_len = 0; pst_ota_data->st_ota_hdr.us_ota_data_len = us_stat_info_len; oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)&g_st_stat_info.ast_user_stat_info[us_usr_id], us_stat_info_len); /* 下发至sdt接收队列,若队列满则串口输出 */ ul_ret = oam_report_data2sdt(pst_netbuf, OAM_DATA_TYPE_OTA, OAM_PRIMID_TYPE_OUTPUT_CONTENT); return ul_ret; }
/***************************************************************************** 函 数 名 : oam_report_vap_pkt_stat_to_sdt 功能描述 : 将某一个vap下的收发包统计信息上报sdt 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年7月10日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_report_vap_pkt_stat_to_sdt(oal_uint8 uc_vap_id) { oal_uint32 ul_tick; oal_uint16 us_skb_len; /* skb总长度 */ oal_netbuf_stru *pst_netbuf; oam_ota_stru *pst_ota_data; oal_uint32 ul_ret = OAL_SUCC; oal_uint16 us_stat_info_len; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return OAL_ERR_CODE_PTR_NULL; } us_stat_info_len = OAL_SIZEOF(oam_vap_stat_info_stru); /* 为上报统计信息申请空间,头部预留8字节,尾部预留1字节,给sdt_drv用 */ us_skb_len = us_stat_info_len + OAL_SIZEOF(oam_ota_hdr_stru); pst_netbuf = oam_alloc_data2sdt(us_skb_len); if (OAL_PTR_NULL == pst_netbuf) { return OAL_ERR_CODE_PTR_NULL; } pst_ota_data = (oam_ota_stru *)oal_netbuf_data(pst_netbuf); /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 填写ota消息头结构体 */ pst_ota_data->st_ota_hdr.ul_tick = ul_tick; pst_ota_data->st_ota_hdr.en_ota_type = OAM_OTA_TYPE_VAP_STAT_INFO; pst_ota_data->st_ota_hdr.us_ota_data_len = us_stat_info_len; pst_ota_data->st_ota_hdr.uc_frame_hdr_len = 0; oal_set_mac_addr(pst_ota_data->st_ota_hdr.auc_user_macaddr, BROADCAST_MACADDR); /* 复制数据,填写ota数据 */ oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)&g_st_stat_info.ast_vap_stat_info[uc_vap_id], us_stat_info_len); /* 下发至sdt接收队列,若队列满则串口输出 */ ul_ret = oam_report_data2sdt(pst_netbuf, OAM_DATA_TYPE_OTA, OAM_PRIMID_TYPE_OUTPUT_CONTENT); return ul_ret; }
/***************************************************************************** 函 数 名 : hmac_roam_alg_bss_check 功能描述 : 输入参数 : 输出参数 : 无 返 回 值 : OAL_SUCC 或 失败错误码 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2015年3月18日 作 者 : g00260350 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 hmac_roam_alg_bss_check(hmac_roam_info_stru *pst_roam_info, mac_bss_dscr_stru *pst_bss_dscr) { hmac_vap_stru *pst_hmac_vap; mac_vap_stru *pst_mac_vap; hmac_roam_alg_stru *pst_roam_alg; mac_cap_info_stru *pst_cap_info; oal_uint8 *puc_pmkid; mac_cfg_ssid_param_stru st_cfg_ssid; oal_uint32 ul_ret; oal_uint32 ul_avail_channel_capacity; oal_uint8 uc_stru_len; oal_int8 c_delta_rssi; oal_int8 c_tmp_rssi; if ((OAL_PTR_NULL == pst_roam_info) || (OAL_PTR_NULL == pst_bss_dscr)) { OAM_ERROR_LOG0(0, OAM_SF_ROAM, "{hmac_roam_alg_bss_check::param null.}"); return OAL_ERR_CODE_PTR_NULL; } pst_hmac_vap = pst_roam_info->pst_hmac_vap; if (OAL_PTR_NULL == pst_hmac_vap) { return OAL_ERR_CODE_ROAM_INVALID_VAP; } pst_mac_vap = &(pst_hmac_vap->st_vap_base_info); mac_mib_get_ssid(pst_mac_vap, &uc_stru_len, (oal_uint8 *)(&st_cfg_ssid)); if ((OAL_STRLEN(pst_bss_dscr->ac_ssid) != st_cfg_ssid.uc_ssid_len) || (0 != oal_memcmp(st_cfg_ssid.ac_ssid, pst_bss_dscr->ac_ssid, st_cfg_ssid.uc_ssid_len))) { return OAL_SUCC; } pst_roam_alg = &(pst_roam_info->st_alg); /* 挑选HMAC_SCAN_MAX_VALID_SCANNED_BSS_EXPIRE时间以内的有效bss */ if (oal_time_after((oal_uint32)OAL_TIME_GET_STAMP_MS(),(pst_bss_dscr->ul_timestamp + HMAC_SCAN_MAX_VALID_SCANNED_BSS_EXPIRE))) { return OAL_SUCC; } /* 检查黑名单 */ ul_ret = hmac_roam_alg_find_in_blacklist(pst_roam_info, pst_bss_dscr->auc_bssid); if (OAL_TRUE == ul_ret) { OAM_WARNING_LOG3(0, OAM_SF_ROAM,"{hmac_roam_alg_bss_check:: [%02X:XX:XX:XX:%02X:%02X] in blacklist!}", pst_bss_dscr->auc_bssid[0], pst_bss_dscr->auc_bssid[4], pst_bss_dscr->auc_bssid[5]); return OAL_SUCC; } /* 排除当前bss的rssi值计算,本地已经保存了dmac上报的rssi */ if (0 == oal_compare_mac_addr(pst_mac_vap->auc_bssid, pst_bss_dscr->auc_bssid)) { return OAL_SUCC; } /* wep的bss直接过滤掉 */ pst_cap_info = (mac_cap_info_stru *)&pst_bss_dscr->us_cap_info; if ((0 == pst_bss_dscr->st_bss_sec_info.uc_bss_80211i_mode) && (0 != pst_cap_info->bit_privacy)) { return OAL_SUCC; } /* open加密方式到wpa/wpa2直接过滤掉 */ /*lint -e731*/ if ((0 == pst_cap_info->bit_privacy) != (OAL_TRUE != mac_mib_get_privacyinvoked(&pst_hmac_vap->st_vap_base_info))) { return OAL_SUCC; } /*lint +e731*/ /* c_current_rssi为0时,表示linkloss上报的触发,不需要考虑rssi增益 */ c_delta_rssi = hmac_roam_alg_adjust_rssi_increase(pst_roam_info, pst_bss_dscr); if (c_delta_rssi <= 0) { return OAL_SUCC; } ul_avail_channel_capacity = hmac_roam_alg_calc_avail_channel_capacity(pst_bss_dscr); if ((0 != ul_avail_channel_capacity) && ((OAL_PTR_NULL == pst_roam_alg->pst_max_capacity_bss) || (ul_avail_channel_capacity > pst_roam_alg->ul_max_capacity))) { //暂时不考虑容量 //pst_roam_alg->ul_max_capacity = ul_avail_channel_capacity; //pst_roam_alg->pst_max_capacity_bss = pst_bss_dscr; } c_tmp_rssi = pst_bss_dscr->c_rssi; /* 对于已存在pmk缓存的bss进行加分处理 */ puc_pmkid = hmac_vap_get_pmksa(pst_hmac_vap, pst_bss_dscr->auc_bssid); if (OAL_PTR_NULL != puc_pmkid) { c_tmp_rssi += ROAM_RSSI_DIFF_4_DB; } if ((OAL_PTR_NULL == pst_roam_alg->pst_max_rssi_bss) || (c_tmp_rssi > pst_roam_alg->c_max_rssi)) { pst_roam_alg->c_max_rssi = c_tmp_rssi; pst_roam_alg->pst_max_rssi_bss = pst_bss_dscr; } return OAL_SUCC; }
/***************************************************************************** 函 数 名 : hmac_roam_alg_add_list 功能描述 : 将bssid添加到列表中 输入参数 : 输出参数 : 无 返 回 值 : OAL_SUCC 或 失败错误码 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2015年7月8日 作 者 : g00260350 修改内容 : 新生成函数 *****************************************************************************/ OAL_STATIC oal_uint32 hmac_roam_alg_add_bsslist(hmac_roam_bss_list_stru *pst_roam_bss_list, oal_uint8 *puc_bssid, roam_blacklist_type_enum_uint8 list_type) { hmac_roam_bss_info_stru *pst_cur_bss; hmac_roam_bss_info_stru *pst_oldest_bss; hmac_roam_bss_info_stru *pst_zero_bss; oal_uint8 auc_mac_zero[WLAN_MAC_ADDR_LEN] = {0}; oal_uint32 ul_current_index; oal_uint32 ul_now; oal_uint32 ul_timeout; pst_oldest_bss = OAL_PTR_NULL; pst_zero_bss = OAL_PTR_NULL; ul_now = (oal_uint32)OAL_TIME_GET_STAMP_MS(); for (ul_current_index = 0; ul_current_index < ROAM_LIST_MAX; ul_current_index++) { pst_cur_bss = &pst_roam_bss_list->ast_bss[ul_current_index]; ul_timeout = (oal_uint32)pst_cur_bss->ul_timeout; if (0 == oal_compare_mac_addr(pst_cur_bss->auc_bssid, puc_bssid)) { /* 优先查找已存在的记录,如果名单超时更新时间戳,否则更新count */ if (OAL_TIME_GET_RUNTIME(pst_cur_bss->ul_time_stamp, ul_now) > ul_timeout) { pst_cur_bss->ul_time_stamp = ul_now; pst_cur_bss->us_count = 1; } else { pst_cur_bss->us_count++; if(pst_cur_bss->us_count == pst_cur_bss->us_count_limit) { pst_cur_bss->ul_time_stamp = ul_now; } } return OAL_SUCC; } /* 记录第一个空记录 */ if (OAL_PTR_NULL != pst_zero_bss) { continue; } if (0 == oal_compare_mac_addr(pst_cur_bss->auc_bssid, auc_mac_zero)) { pst_zero_bss = pst_cur_bss; continue; } /* 记录一个非空最老记录 */ if (OAL_PTR_NULL == pst_oldest_bss) { pst_oldest_bss = pst_cur_bss; } else { if (OAL_TIME_GET_RUNTIME(pst_cur_bss->ul_time_stamp, ul_now) > OAL_TIME_GET_RUNTIME(pst_oldest_bss->ul_time_stamp, ul_now)) { pst_oldest_bss = pst_cur_bss; } } } if (OAL_PTR_NULL == pst_zero_bss) { pst_zero_bss = pst_oldest_bss; } if (OAL_PTR_NULL != pst_zero_bss) { oal_set_mac_addr(pst_zero_bss->auc_bssid, puc_bssid); pst_zero_bss->ul_time_stamp = ul_now; pst_zero_bss->us_count = 1; return OAL_SUCC; } return OAL_FAIL; }
/***************************************************************************** 函 数 名 : oam_stats_report_stat_info_to_sdt 功能描述 : 将所有维测统计信息上报SDT工具 输入参数 : 无 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年3月18日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_stats_report_info_to_sdt(oam_ota_type_enum_uint8 en_ota_type) { oal_uint32 ul_tick; oal_uint16 us_skb_len; /* skb总长度 */ oal_netbuf_stru *pst_netbuf; oam_ota_stru *pst_ota_data; oal_uint32 ul_ret = OAL_SUCC; oal_uint16 us_stat_info_len; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return OAL_ERR_CODE_PTR_NULL; } switch (en_ota_type) { case OAM_OTA_TYPE_DEV_STAT_INFO: us_stat_info_len = OAL_SIZEOF(oam_device_stat_info_stru) * WLAN_DEVICE_MAX_NUM_PER_CHIP; break; case OAM_OTA_TYPE_VAP_STAT_INFO: us_stat_info_len = (oal_uint16)(OAL_SIZEOF(oam_vap_stat_info_stru) * WLAN_VAP_SUPPORT_MAX_NUM_LIMIT); break; default: us_stat_info_len = 0; break; } if (0 == us_stat_info_len) { OAL_IO_PRINT("oam_stats_report_info_to_sdt::ota_type invalid-->%d!\n", en_ota_type); return OAL_ERR_CODE_INVALID_CONFIG; } /* 为上报统计信息申请空间,头部预留8字节,尾部预留1字节,给sdt_drv用 */ us_skb_len = us_stat_info_len + OAL_SIZEOF(oam_ota_hdr_stru); if (us_skb_len > WLAN_SDT_NETBUF_MAX_PAYLOAD) { us_skb_len = WLAN_SDT_NETBUF_MAX_PAYLOAD; us_stat_info_len = WLAN_SDT_NETBUF_MAX_PAYLOAD - OAL_SIZEOF(oam_ota_hdr_stru); } pst_netbuf = oam_alloc_data2sdt(us_skb_len); if (OAL_PTR_NULL == pst_netbuf) { return OAL_ERR_CODE_PTR_NULL; } pst_ota_data = (oam_ota_stru *)oal_netbuf_data(pst_netbuf); /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 填写ota消息头结构体 */ pst_ota_data->st_ota_hdr.ul_tick = ul_tick; pst_ota_data->st_ota_hdr.en_ota_type = en_ota_type; pst_ota_data->st_ota_hdr.uc_frame_hdr_len = 0; pst_ota_data->st_ota_hdr.us_ota_data_len = us_stat_info_len; /* 复制数据,填写ota数据 */ switch (en_ota_type) { case OAM_OTA_TYPE_DEV_STAT_INFO: oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)g_st_stat_info.ast_dev_stat_info, us_stat_info_len); break; case OAM_OTA_TYPE_VAP_STAT_INFO: oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)g_st_stat_info.ast_vap_stat_info, us_stat_info_len); break; default: break; } /* 下发至sdt接收队列,若队列满则串口输出 */ ul_ret = oam_report_data2sdt(pst_netbuf, OAM_DATA_TYPE_OTA, OAM_PRIMID_TYPE_OUTPUT_CONTENT); return ul_ret; }
/***************************************************************************** 函 数 名 : oam_stats_report_memblock_info_to_sdt 功能描述 : 将标准内存块的信息上报SDT 输入参数 : puc_origin_data:内存块的起始地址 uc_user_cnt :该内存块引用计数 uc_pool_id :所属的内存池id uc_subpool_id :所属的子池id us_len :该内存块长度 ul_file_id :申请该内存块的文件id ul_alloc_line_num :申请该内存块的行号 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年2月21日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_stats_report_memblock_info_to_sdt( oal_uint8 *puc_origin_data, oal_uint8 uc_user_cnt, oal_uint8 uc_pool_id, oal_uint8 uc_subpool_id, oal_uint16 us_len, oal_uint32 ul_file_id, oal_uint32 ul_alloc_line_num) { oam_memblock_info_stru st_memblock_info; oal_uint16 us_memblock_info_len; oal_netbuf_stru *pst_netbuf; oam_ota_stru *pst_ota_data; oal_uint16 us_skb_len; /* skb总长度 */ oal_uint32 ul_tick; oal_uint32 ul_ret = OAL_SUCC; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return OAL_ERR_CODE_PTR_NULL; } if (OAL_PTR_NULL == puc_origin_data) { OAL_IO_PRINT("oam_stats_report_memblock_info_to_sdt:puc_origin_data is null!\n"); return OAL_ERR_CODE_PTR_NULL; } us_memblock_info_len = OAL_SIZEOF(oam_memblock_info_stru); /* 填写要上报给sdt的内存块信息结构体 */ st_memblock_info.uc_pool_id = uc_pool_id; st_memblock_info.uc_subpool_id = uc_subpool_id; st_memblock_info.uc_user_cnt = uc_user_cnt; st_memblock_info.ul_alloc_line_num = ul_alloc_line_num; st_memblock_info.ul_file_id = ul_file_id; /* 为ota消息上报SDT申请空间,头部预留8字节,尾部预留1字节,给sdt_drv用 */ us_skb_len = us_memblock_info_len + us_len + OAL_SIZEOF(oam_ota_hdr_stru); if (us_skb_len > WLAN_SDT_NETBUF_MAX_PAYLOAD) { us_skb_len = WLAN_SDT_NETBUF_MAX_PAYLOAD; if ((us_memblock_info_len + OAL_SIZEOF(oam_ota_hdr_stru)) < us_skb_len) { us_len = us_skb_len - us_memblock_info_len - (oal_uint16)OAL_SIZEOF(oam_ota_hdr_stru); } else { us_memblock_info_len = us_skb_len - OAL_SIZEOF(oam_ota_hdr_stru); us_len = 0; } } pst_netbuf = oam_alloc_data2sdt(us_skb_len); if (OAL_PTR_NULL == pst_netbuf) { return OAL_ERR_CODE_PTR_NULL; } pst_ota_data = (oam_ota_stru *)oal_netbuf_data(pst_netbuf); /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 填写ota消息结构体 */ pst_ota_data->st_ota_hdr.ul_tick = ul_tick; pst_ota_data->st_ota_hdr.en_ota_type = OAM_OTA_TYPE_MEMBLOCK; pst_ota_data->st_ota_hdr.uc_frame_hdr_len = (oal_uint8)us_memblock_info_len; pst_ota_data->st_ota_hdr.us_ota_data_len = us_memblock_info_len + us_len; /* 填写ota数据部分,首先复制内存块的信息结构体 */ oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)&st_memblock_info, (oal_uint32)us_memblock_info_len); /* 复制内存块的具体内容 *//*lint -e416*/ oal_memcopy((oal_void *)(pst_ota_data->auc_ota_data + us_memblock_info_len), (const oal_void *)puc_origin_data, (oal_uint32)us_len); /*lint +e416*/ /* 下发至sdt接收队列,若队列满则串口输出 */ ul_ret = oam_report_data2sdt(pst_netbuf, OAM_DATA_TYPE_OTA, OAM_PRIMID_TYPE_OUTPUT_CONTENT); return ul_ret; }
/***************************************************************************** 函 数 名 : oam_stats_report_mempool_info_to_sdt 功能描述 : 将内存池的某一个子池内存块的使用情况上报sdt 输入参数 : uc_pool_id :内存池id us_pool_total_cnt :本内存池一共多少内存块 us_pool_used_cnt :本内存池已用内存块 uc_subpool_id :子池id us_subpool_total_cnt :本子池内存块总数 us_subpool_free_cnt :本子池可用内存块个数 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年2月21日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_stats_report_mempool_info_to_sdt( oal_uint8 uc_pool_id, oal_uint16 us_pool_total_cnt, oal_uint16 us_pool_used_cnt, oal_uint8 uc_subpool_id, oal_uint16 us_subpool_total_cnt, oal_uint16 us_subpool_free_cnt) { oam_stats_mempool_stru st_device_mempool_info; oal_netbuf_stru *pst_netbuf; oam_ota_stru *pst_ota_data; oal_uint16 us_skb_len; /* skb总长度 */ oal_uint32 ul_tick; oal_uint32 ul_ret = OAL_SUCC; oal_uint16 us_stru_len; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return OAL_ERR_CODE_PTR_NULL; } /* 填写要上报给sdt的内存池信息结构体 */ st_device_mempool_info.uc_mem_pool_id = uc_pool_id; st_device_mempool_info.uc_subpool_id = uc_subpool_id; st_device_mempool_info.us_mem_pool_total_cnt = us_pool_total_cnt; st_device_mempool_info.us_mem_pool_used_cnt = us_pool_used_cnt; st_device_mempool_info.us_subpool_total_cnt = us_subpool_total_cnt; st_device_mempool_info.us_subpool_free_cnt = us_subpool_free_cnt; us_stru_len = OAL_SIZEOF(oam_stats_mempool_stru); /* 为ota消息上报SDT申请空间,头部预留8字节,尾部预留1字节,给sdt_drv用 */ us_skb_len = us_stru_len + OAL_SIZEOF(oam_ota_hdr_stru); if (us_skb_len > WLAN_SDT_NETBUF_MAX_PAYLOAD) { us_skb_len = WLAN_SDT_NETBUF_MAX_PAYLOAD; us_stru_len = us_skb_len - OAL_SIZEOF(oam_ota_hdr_stru); } pst_netbuf = oam_alloc_data2sdt(us_skb_len); if (OAL_PTR_NULL == pst_netbuf) { return OAL_ERR_CODE_PTR_NULL; } pst_ota_data = (oam_ota_stru *)oal_netbuf_data(pst_netbuf); /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 填写ota消息结构体 */ pst_ota_data->st_ota_hdr.ul_tick = ul_tick; pst_ota_data->st_ota_hdr.en_ota_type = OAM_OTA_TYPE_MEMPOOL; pst_ota_data->st_ota_hdr.uc_frame_hdr_len = 0; pst_ota_data->st_ota_hdr.us_ota_data_len = us_stru_len; /* 复制数据,填写ota数据 */ oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)&st_device_mempool_info, (oal_uint32)us_stru_len); /* 下发至sdt接收队列,若队列满则串口输出 */ ul_ret = oam_report_data2sdt(pst_netbuf, OAM_DATA_TYPE_OTA, OAM_PRIMID_TYPE_OUTPUT_CONTENT); return ul_ret; }
/***************************************************************************** 函 数 名 : oam_stats_report_timer_info_to_sdt 功能描述 : 将软件定时器的信息上报SDT 输入参数 : puc_timer_addr:定时器结构的地址 uc_timer_len :定时器结构的长度 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2014年2月21日 作 者 : z00237171 修改内容 : 新生成函数 *****************************************************************************/ oal_uint32 oam_stats_report_timer_info_to_sdt( oal_uint8 *puc_timer_addr, oal_uint8 uc_timer_len) { oal_uint32 ul_ret = OAL_SUCC; if (NULL != puc_timer_addr) { ul_ret = oam_ota_report(puc_timer_addr, uc_timer_len, 0, 0, OAM_OTA_TYPE_TIMER); return ul_ret; } else { OAL_IO_PRINT("oam_stats_report_timer_info_to_sdt::puc_timer_addr is NULL"); return OAL_ERR_CODE_PTR_NULL; } #if 0 oal_uint32 ul_tick; oal_uint16 us_skb_len; /* skb总长度 */ oal_netbuf_stru *pst_netbuf; oam_ota_stru *pst_ota_data; oal_uint32 ul_ret = OAL_SUCC; if (OAL_UNLIKELY(OAL_PTR_NULL == g_st_oam_sdt_func_hook.p_sdt_report_data_func)) { return OAL_ERR_CODE_PTR_NULL; } if (OAL_PTR_NULL == puc_timer_addr) { OAL_IO_PRINT("oam_stats_report_timer_info_to_sdt::puc_timer_addr is null!\n"); return OAL_ERR_CODE_PTR_NULL; } if (OAM_TIMER_MAX_LEN < uc_timer_len) { OAL_IO_PRINT("oam_stats_report_timer_info_to_sdt::uc_timer_len-->%d\n", uc_timer_len); return OAL_FAIL; } /* 为上报描述符申请空间,头部预留8字节,尾部预留1字节,给sdt_drv用 */ us_skb_len = uc_timer_len + OAL_SIZEOF(oam_ota_hdr_stru); pst_netbuf = oam_alloc_data2sdt(us_skb_len); if (OAL_PTR_NULL == pst_netbuf) { return OAL_ERR_CODE_PTR_NULL; } pst_ota_data = (oam_ota_stru *)oal_netbuf_data(pst_netbuf); /* 获取系统TICK值 */ ul_tick = (oal_uint32)OAL_TIME_GET_STAMP_MS(); /* 填写ota消息头结构体 */ pst_ota_data->st_ota_hdr.ul_tick = ul_tick; pst_ota_data->st_ota_hdr.en_ota_type = OAM_OTA_TYPE_TIMER; pst_ota_data->st_ota_hdr.uc_frame_hdr_len = 0; pst_ota_data->st_ota_hdr.us_ota_data_len = uc_timer_len; /* 复制数据,填写ota数据 */ oal_memcopy((oal_void *)pst_ota_data->auc_ota_data, (const oal_void *)puc_timer_addr, (oal_uint32)uc_timer_len); /* 下发至sdt接收队列,若队列满则串口输出 */ ul_ret = oam_report_data2sdt(pst_netbuf, OAM_DATA_TYPE_OTA, OAM_PRIMID_TYPE_OUTPUT_CONTENT); return ul_ret; #endif }
OAL_STATIC oal_uint32 hmac_roam_alg_add_bsslist(hmac_roam_bss_list_stru *pst_roam_bss_list, oal_uint8 *puc_bssid, roam_blacklist_type_enum_uint8 list_type) { hmac_roam_bss_info_stru *pst_cur_bss; hmac_roam_bss_info_stru *pst_oldest_bss; hmac_roam_bss_info_stru *pst_zero_bss; oal_uint8 auc_mac_zero[WLAN_MAC_ADDR_LEN] = {0}; oal_uint32 ul_current_index; oal_uint32 ul_now; oal_uint32 ul_timeout; pst_oldest_bss = OAL_PTR_NULL; pst_zero_bss = OAL_PTR_NULL; ul_now = (oal_uint32)OAL_TIME_GET_STAMP_MS(); for (ul_current_index = 0; ul_current_index < ROAM_LIST_MAX; ul_current_index++) { pst_cur_bss = &pst_roam_bss_list->ast_bss[ul_current_index]; ul_timeout = (oal_uint32)pst_cur_bss->ul_timeout; if (0 == oal_compare_mac_addr(pst_cur_bss->auc_bssid, puc_bssid)) { /* 优先查找已存在的记录,如果名单超时更新时间戳,否则更新count */ if (OAL_TIME_GET_RUNTIME(pst_cur_bss->ul_time_stamp, ul_now) > ul_timeout) { pst_cur_bss->ul_time_stamp = ul_now; pst_cur_bss->us_count = 1; /*漫游黑名单,以后有用*/ if(ROAM_BLACKLIST_TYPE_REJECT_AP == list_type) { pst_cur_bss->ul_timeout = ROAM_BLACKLIST_REJECT_AP_TIME_OUT; } } else { pst_cur_bss->us_count++; if(pst_cur_bss->us_count == pst_cur_bss->us_count_limit) { pst_cur_bss->ul_time_stamp = ul_now; OAM_WARNING_LOG4(0, OAM_SF_ROAM,"{hmac_roam_alg_add_bsslist:: add new, [%02X:XX:XX:%02X:%02X:%02X]}", pst_cur_bss->auc_bssid[0],pst_cur_bss->auc_bssid[3],pst_cur_bss->auc_bssid[4],pst_cur_bss->auc_bssid[5]); } } return OAL_SUCC; } /* 记录第一个空记录 */ if (OAL_PTR_NULL != pst_zero_bss) { continue; } if (0 == oal_compare_mac_addr(pst_cur_bss->auc_bssid, auc_mac_zero)) { pst_zero_bss = pst_cur_bss; continue; } /* 记录一个非空最老记录 */ if (OAL_PTR_NULL == pst_oldest_bss) { pst_oldest_bss = pst_cur_bss; } else { if (OAL_TIME_GET_RUNTIME(pst_cur_bss->ul_time_stamp, ul_now) > OAL_TIME_GET_RUNTIME(pst_oldest_bss->ul_time_stamp, ul_now)) { pst_oldest_bss = pst_cur_bss; } } } if (OAL_PTR_NULL == pst_zero_bss) { pst_zero_bss = pst_oldest_bss; } if (OAL_PTR_NULL != pst_zero_bss) { oal_set_mac_addr(pst_zero_bss->auc_bssid, puc_bssid); pst_zero_bss->ul_time_stamp = ul_now; pst_zero_bss->us_count = 1; return OAL_SUCC; } return OAL_FAIL; }