/***************************************************************************** 函 数 名 : 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_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; }
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; }