void RemoveRemoteAPFw(UINT8 *apMacAddr_p, vmacEntry_t *clientVMacEntry_p) { struct net_device *pStaDev = (struct net_device *) clientVMacEntry_p->privInfo_p; struct wlprivate *wlpptrSta = NETDEV_PRIV_P(struct wlprivate, pStaDev); extStaDb_StaInfo_t *StaInfo_p = NULL; if (!clientVMacEntry_p->active) wlFwRemoveMacAddr(pStaDev, &clientVMacEntry_p->vmacAddr[0]); if ((StaInfo_p = extStaDb_GetStaInfo(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)apMacAddr_p, 1)) != NULL) { extStaDb_DelSta(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)apMacAddr_p, 0); wlFwSetNewStn(wlpptrSta->master,(u_int8_t *)apMacAddr_p, StaInfo_p->Aid, StaInfo_p->StnId, 2, NULL, 0, 0); } return; }
void DeleteClientInfo(UINT8 *macAddr_p, vmacEntry_t *clientVMacEntry_p) { struct net_device *pStaDev = (struct net_device *) clientVMacEntry_p->privInfo_p; struct wlprivate *wlpptrSta = NETDEV_PRIV_P(struct wlprivate, pStaDev); extStaDb_StaInfo_t *StaInfo_p = NULL; if ((StaInfo_p = extStaDb_GetStaInfo(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)macAddr_p, 1)) != NULL) { FreeAid(StaInfo_p->Aid); ResetAid(StaInfo_p->StnId, StaInfo_p->Aid); FreeStnId(StaInfo_p->StnId); extStaDb_DelSta(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)macAddr_p, 0); wlFwSetNewStn(wlpptrSta->master,(u_int8_t *)macAddr_p, StaInfo_p->Aid, StaInfo_p->StnId, 2, NULL,0, 0); //only remove local address, when there is a BSSID entry. extStaDb_DelSta(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)clientVMacEntry_p->vmacAddr, 0); } }
extern extStaDb_StaInfo_t *macMgtStaDbInit(vmacApInfo_t *vmacSta_p,IEEEtypes_MacAddr_t *staMacAddr, IEEEtypes_MacAddr_t *apMacAddr) { MIB_802DOT11 *mib=vmacSta_p->Mib802dot11; extStaDb_StaInfo_t StaInfo; extStaDb_StaInfo_t *StaInfo_p = NULL; struct wlprivate *wlpptr = NETDEV_PRIV_P(struct wlprivate, vmacSta_p->dev); PeerInfo_t PeerInfo; #ifdef DEBUG_PRINT printf("macMgtStaDbInit:: entered\n"); #endif WLDBG_ENTER(DBG_LEVEL_11); /* Station not in Stn table, hence add */ memcpy(&StaInfo.Addr, staMacAddr, sizeof(IEEEtypes_MacAddr_t)); memcpy(&StaInfo.Bssid, apMacAddr, sizeof(IEEEtypes_MacAddr_t)); StaInfo.State = UNAUTHENTICATED; StaInfo.PwrMode = PWR_MODE_ACTIVE; StaInfo.StnId = AssignStnId(); StaInfo.Aid = 0; StaInfo.AP = FALSE; #ifdef WDS_FEATURE StaInfo.wdsInfo = NULL; StaInfo.wdsPortInfo = NULL; #endif #ifdef CLIENT_SUPPORT StaInfo.Client = FALSE; #endif #ifdef APCFGUR StaInfo.UR = 0; #endif #ifdef STA_INFO_DB StaInfo.Sq1 = 0; StaInfo.Sq2 = 0; StaInfo.RSSI= 0; StaInfo.Rate= 0; #endif StaInfo.ClientMode = 0; StaInfo.mib_p= mib; StaInfo.dev = vmacSta_p->dev; if(*(mib->mib_ApMode)==AP_MODE_AandG) { if(memcmp(apMacAddr,vmacSta_p->macBssId,sizeof(IEEEtypes_MacAddr_t))) { StaInfo.ApMode=MIXED_MODE; } else { StaInfo.ApMode=AONLY_MODE; } } #ifdef AP_URPTR if (!mib_wbMode) #endif { if (extStaDb_AddSta(vmacSta_p,&StaInfo) != ADD_SUCCESS) { return NULL; } #ifdef NEW_OSIF_POWERSAVE psProcessNewStn(staMacAddr, StaInfo.StnId); #else NotifyNewStn(staMacAddr, StaInfo.StnId); #endif if ((StaInfo_p = extStaDb_GetStaInfo(vmacSta_p,staMacAddr, 1)) == NULL) { return NULL; } setStaPeerInfoApMode(wlpptr, StaInfo_p, &PeerInfo, *(wlpptr->vmacSta_p->Mib802dot11->mib_ApMode), NULL); StaInfo_p->FwStaPtr = wlFwSetNewStn(vmacSta_p->dev, (u_int8_t *)staMacAddr, StaInfo_p->Aid, StaInfo_p->StnId, 0, &PeerInfo,0,0); //add new station wlFwSetSecurity(vmacSta_p->dev,( u_int8_t *)staMacAddr); /* Init the state machines */ /* Init Auth Request Srv SM */ AuthReqSrvApCtor((AuthReqSrvAp *)&StaInfo_p->mgtAuthReq); mhsm_initialize(&StaInfo_p->mgtAuthReq.super,&StaInfo_p->mgtAuthReq.sTop); /* Init Auth Response Srv SM */ AuthRspSrvApCtor((AuthRspSrvAp *)&StaInfo_p->mgtAuthRsp); mhsm_initialize(&StaInfo_p->mgtAuthRsp.super,&StaInfo_p->mgtAuthRsp.sTop); /* Init Association Srv SM */ AssocSrvApCtor((AssocSrvAp *)&StaInfo_p->mgtAssoc); mhsm_initialize(&StaInfo_p->mgtAssoc.super,&StaInfo_p->mgtAssoc.sTop); #ifdef APCFGUR /* Init remote control Srv SM */ RemoteCtrlSrvCtor(&StaInfo_p->rmSrv); mhsm_initialize(&StaInfo_p->rmSrv.super,&StaInfo_p->rmSrv.sTop); StaInfo_p->rmSrv.userdata_p = (unsigned char *)StaInfo_p; #endif } StaInfo_p->mgtAssoc.userdata_p = (unsigned char *)StaInfo_p; StaInfo_p->mgtAuthReq.userdata_p = (unsigned char *)StaInfo_p; StaInfo_p->mgtAuthRsp.userdata_p = (unsigned char *)StaInfo_p; WLDBG_EXIT(DBG_LEVEL_11); return StaInfo_p; }
/************************************************************************* * Function: * * Description: * * Input: * * Output: * **************************************************************************/ extern SINT8 evtSmeCmdMsg(vmacApInfo_t *vmacSta_p,UINT8 *message) { MhsmEvent_t smMsg; macmgmtQ_SmeCmd_t * smeCmd_p; extStaDb_StaInfo_t *StaInfo_p; WLDBG_ENTER(DBG_CLASS_INFO); if (message == NULL) { return 1; } #ifdef AP_MAC_LINUX smMsg.devinfo = (void *) vmacSta_p; #endif smeCmd_p = (macmgmtQ_SmeCmd_t *)message; switch (smeCmd_p->CmdType) { case SME_CMD_DISASSOCIATE: { WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SME_CMD_DISASSOCIATE message received. \n"); if ((StaInfo_p = extStaDb_GetStaInfo(vmacSta_p,&smeCmd_p->Body.AssocCmd.PeerStaAddr, 1)) == NULL) { return 1; } smMsg.event = MlmeDisAssoc_Req; smMsg.pBody = (UINT8 *)&(smeCmd_p->Body.AssocCmd); mhsm_send_event((Mhsm_t *)&StaInfo_p->mgtAssoc.super, &smMsg); } break; case SME_CMD_START: { SyncSrvApMsg syncMsg; WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SME_CMD_START message received. \n"); syncMsg.opMode = infrastructure; syncMsg.mgtMsg = (UINT8 *)&(smeCmd_p->Body.StartCmd); smMsg.event = MlmeStart_Req; smMsg.pBody = (unsigned char *)&syncMsg; mhsm_send_event((Mhsm_t *)&vmacSta_p->mgtSync.super, &smMsg); } break; case SME_CMD_RESET: { SyncSrvApMsg syncMsg; WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SME_CMD_RESET message received. \n"); syncMsg.mgtMsg = (UINT8 *)&(smeCmd_p->Body.ResetCmd); smMsg.event = ResetMAC; smMsg.pBody = (unsigned char *)&syncMsg; mhsm_send_event((Mhsm_t *)&vmacSta_p->mgtSync.super, &smMsg); } break; #if defined(AP_SITE_SURVEY) || defined(AUTOCHANNEL) case SME_CMD_SCAN: { SyncSrvApMsg syncMsg; WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SME_CMD_SCAN message received. \n"); syncMsg.mgtMsg = (UINT8 *)&(smeCmd_p->Body.ScanCmd); smMsg.event = MlmeScan_Req; smMsg.pBody = (unsigned char *)&syncMsg; mhsm_send_event((Mhsm_t *)&vmacSta_p->mgtSync.super, &smMsg); } break; #endif /* AP_SITE_SURVEY */ #ifdef IEEE80211H case SME_CMD_MREQUEST: { SyncSrvApMsg syncMsg; WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SME_CMD_MREQUEST message received. \n"); if (!IS_BROADCAST(&smeCmd_p->Body.MrequestCmd.PeerStaAddr)) { if ((StaInfo_p = extStaDb_GetStaInfo(vmacSta_p,&smeCmd_p->Body.MrequestCmd.PeerStaAddr, 1)) == NULL) { WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SME_CMD_MREQUEST - no station found %x:%x:%x:%x:%x:%x] \n", smeCmd_p->Body.MrequestCmd.PeerStaAddr[0], smeCmd_p->Body.MrequestCmd.PeerStaAddr[1], smeCmd_p->Body.MrequestCmd.PeerStaAddr[2], smeCmd_p->Body.MrequestCmd.PeerStaAddr[3], smeCmd_p->Body.MrequestCmd.PeerStaAddr[4], smeCmd_p->Body.MrequestCmd.PeerStaAddr[5]); return 1; } } syncMsg.mgtMsg = (UINT8 *)&(smeCmd_p->Body.MrequestCmd); smMsg.event = MlmeMrequest_Req; smMsg.pBody = (unsigned char *)&syncMsg; mhsm_send_event((Mhsm_t *)&vmacSta_p->mgtSync.super, &smMsg); } break; case SME_CMD_MREPORT: { SyncSrvApMsg syncMsg; WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SME_CMD_MREPORT message received. \n"); if ((StaInfo_p = extStaDb_GetStaInfo(vmacSta_p,&smeCmd_p->Body.MrequestCmd.PeerStaAddr, 1)) == NULL) { WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SME_CMD_MREPORT - no station found %x:%x:%x:%x:%x:%x] \n", smeCmd_p->Body.MrequestCmd.PeerStaAddr[0], smeCmd_p->Body.MrequestCmd.PeerStaAddr[1], smeCmd_p->Body.MrequestCmd.PeerStaAddr[2], smeCmd_p->Body.MrequestCmd.PeerStaAddr[3], smeCmd_p->Body.MrequestCmd.PeerStaAddr[4], smeCmd_p->Body.MrequestCmd.PeerStaAddr[5]); return 1; } syncMsg.mgtMsg = (UINT8 *)&(smeCmd_p->Body.MreportCmd); smMsg.event = MlmeMreport_Req; smMsg.pBody = (unsigned char *)&syncMsg; mhsm_send_event((Mhsm_t *)&vmacSta_p->mgtSync.super, &smMsg); } break; case SMC_CMD_CHANNELSWITCH_REQ: { SyncSrvApMsg syncMsg; WLDBG_INFO(DBG_LEVEL_11, "evtSmeCmdMsg: SMC_CMD_CHANNELSWITCH_REQ message received. \n"); syncMsg.mgtMsg = (UINT8 *)&(smeCmd_p->Body.ChannelSwitchCmd); smMsg.event = MlmeChannelSwitch_Req; smMsg.pBody = (unsigned char *)&syncMsg; mhsm_send_event((Mhsm_t *)&vmacSta_p->mgtSync.super, &smMsg); } break; #endif /* IEEE80211H */ default: break; } WLDBG_EXIT(DBG_CLASS_INFO); return 0; }
extern SINT8 evtDot11MgtMsg(vmacApInfo_t *vmacSta_p,UINT8 *message, struct sk_buff *skb) #endif { MIB_AUTH_ALG *mib_AuthAlg_p=vmacSta_p->Mib802dot11->AuthAlg; MhsmEvent_t smMsg; macmgmtQ_MgmtMsg3_t *MgmtMsg_p; extStaDb_StaInfo_t *StaInfo_p; if (message == NULL) { return 1; } WLDBG_ENTER(DBG_LEVEL_11); MgmtMsg_p = (macmgmtQ_MgmtMsg3_t *)message; #ifdef FILTER_BSSID if ( ( memcmp(MgmtMsg_p->Hdr.DestAddr, vmacSta_p->macStaAddr,sizeof(IEEEtypes_MacAddr_t)) || memcmp(MgmtMsg_p->Hdr.BssId, vmacSta_p->macBssId,sizeof(IEEEtypes_MacAddr_t)) ) && ( MgmtMsg_p->Hdr.FrmCtl.Subtype != IEEE_MSG_PROBE_RQST ) ) #else if (memcmp(MgmtMsg_p->Hdr.DestAddr, vmacSta_p->macStaAddr,sizeof(IEEEtypes_MacAddr_t)) && memcmp(MgmtMsg_p->Hdr.DestAddr, vmacSta_p->macStaAddr2,sizeof(IEEEtypes_MacAddr_t)) && (MgmtMsg_p->Hdr.FrmCtl.Subtype != IEEE_MSG_PROBE_RQST) ) #endif { WLDBG_ENTER_INFO(DBG_LEVEL_11,"mgt frame %d rxved %2x-%2x-%2x-%2x-%2x-%2x\n",MgmtMsg_p->Hdr.FrmCtl.Subtype, MgmtMsg_p->Hdr.DestAddr[0], MgmtMsg_p->Hdr.DestAddr[1], MgmtMsg_p->Hdr.DestAddr[2], MgmtMsg_p->Hdr.DestAddr[3], MgmtMsg_p->Hdr.DestAddr[4], MgmtMsg_p->Hdr.DestAddr[5]); return 1; } if (isMacAccessList(vmacSta_p, &(MgmtMsg_p->Hdr.SrcAddr)) != SUCCESS) { return 1; } if ((StaInfo_p = extStaDb_GetStaInfo(vmacSta_p,&MgmtMsg_p->Hdr.SrcAddr, 0)) == NULL) { if(MgmtMsg_p->Hdr.FrmCtl.Subtype == IEEE_MSG_AUTHENTICATE) { //added call to check other VAP's StaInfo_p if ((StaInfo_p = extStaDb_GetStaInfo(vmacSta_p,&MgmtMsg_p->Hdr.SrcAddr, 2))) { macMgmtRemoveSta(vmacSta_p, StaInfo_p); } if ((StaInfo_p = macMgtStaDbInit(vmacSta_p,&MgmtMsg_p->Hdr.SrcAddr,&MgmtMsg_p->Hdr.DestAddr)) == NULL) { WLDBG_ENTER_INFO(DBG_LEVEL_11,"init data base fail\n"); return 1; } } else if ((MgmtMsg_p->Hdr.FrmCtl.Subtype != IEEE_MSG_PROBE_RQST)) { if ((MgmtMsg_p->Hdr.FrmCtl.Subtype != IEEE_MSG_DEAUTHENTICATE) && (MgmtMsg_p->Hdr.FrmCtl.Subtype != IEEE_MSG_PROBE_RSP) ) { macMgmtMlme_SendDeauthenticateMsg(vmacSta_p,&MgmtMsg_p->Hdr.SrcAddr, 0, IEEEtypes_REASON_CLASS2_NONAUTH); } return 1; } } #ifdef AP_MAC_LINUX smMsg.devinfo = (void *) vmacSta_p; #endif switch (MgmtMsg_p->Hdr.FrmCtl.Subtype) { case IEEE_MSG_AUTHENTICATE: { AuthRspSrvApMsg authRspMsg; WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_AUTHENTICATE message received. \n"); memcpy(authRspMsg.rspMac, MgmtMsg_p->Hdr.SrcAddr, 6); authRspMsg.arAlg_in = MgmtMsg_p->Body.Auth.AuthAlg; { if (mib_AuthAlg_p->Type == AUTH_OPEN_OR_SHARED_KEY) { authRspMsg.arAlg = authRspMsg.arAlg_in; } else { authRspMsg.arAlg = mib_AuthAlg_p->Type; } } authRspMsg.mgtMsg = (UINT8 *)MgmtMsg_p; smMsg.event = AuthOdd; smMsg.pBody = (unsigned char *)&authRspMsg; #ifdef AP_MAC_LINUX smMsg.info = (void *) skb; #endif mhsm_send_event((Mhsm_t *)&StaInfo_p->mgtAuthRsp.super, &smMsg); } break; case IEEE_MSG_ASSOCIATE_RQST: { WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_ASSOCIATE_RQST message received. \n"); smMsg.event = AssocReq; smMsg.pBody = (unsigned char *)MgmtMsg_p; #ifdef AP_MAC_LINUX smMsg.info = (void *) skb; #endif mhsm_send_event((Mhsm_t *)&StaInfo_p->mgtAssoc.super,&smMsg); } break; case IEEE_MSG_REASSOCIATE_RQST: { WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_REASSOCIATE_RQST message received. \n"); smMsg.event = ReAssocReq; smMsg.pBody = (unsigned char *)MgmtMsg_p; #ifdef AP_MAC_LINUX smMsg.info = (void *) skb; #endif mhsm_send_event((Mhsm_t *)&StaInfo_p->mgtAssoc.super, &smMsg); } break; case IEEE_MSG_DISASSOCIATE: { WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_DISASSOCIATE message received. \n"); smMsg.event = DisAssoc; smMsg.pBody = (unsigned char *)MgmtMsg_p; #ifdef AP_MAC_LINUX smMsg.info = (void *) skb; #endif mhsm_send_event((Mhsm_t *)&StaInfo_p->mgtAssoc.super, &smMsg); } break; case IEEE_MSG_DEAUTHENTICATE: { WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_DEAUTHENTICATE message received. \n"); smMsg.event = DeAuth; smMsg.pBody = (unsigned char *)MgmtMsg_p; #ifdef AP_MAC_LINUX smMsg.info = (void *) skb; #endif mhsm_send_event((Mhsm_t *)&StaInfo_p->mgtAuthRsp.super, &smMsg); } break; /* Could be handled by HW */ case IEEE_MSG_PROBE_RQST: { SyncSrvApMsg syncMsg; WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_PROBE_RQST message received. \n"); syncMsg.opMode = infrastructure; syncMsg.mgtMsg = (UINT8 *)MgmtMsg_p; smMsg.event = ProbeReq; smMsg.pBody = (unsigned char *)&syncMsg; #ifdef AP_MAC_LINUX smMsg.info = (void *) skb; #endif mhsm_send_event((Mhsm_t *)&vmacSta_p->mgtSync.super, &smMsg); } break; #if defined(QOS_FEATURE)||defined(IEEE80211H) case IEEE_MSG_QOS_ACTION: { WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_QOS_ACTION message received. \n"); if(MgmtMsg_p->Body.Action.Category == HT_CATEGORY) { switch (MgmtMsg_p->Body.Action.Action) { case ACTION_SMPS: { extern int wlFwSetMimoPsHt(struct net_device *netdev, UINT8 *addr, UINT8 enable, UINT8 mode); IEEEtypes_SM_PwrCtl_t *p = (IEEEtypes_SM_PwrCtl_t *)&MgmtMsg_p->Body.Act.Field.SmPwrCtl; WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_QOS_ACTION MIMO PS HT message received. \n"); wlFwSetMimoPsHt(vmacSta_p->dev, (UINT8 *)MgmtMsg_p->Hdr.SrcAddr, p->Enable, p->Mode); break; } #ifdef INTOLERANT40 case ACTION_INFOEXCH: { extern void RecHTIntolerant(vmacApInfo_t *vmacSta_p,UINT8 enable); IEEEtypes_InfoExch_t *p = (IEEEtypes_InfoExch_t *)&MgmtMsg_p->Body.Act.Field.InfoExch; WLDBG_INFO(DBG_LEVEL_11, "IEEE_MSG_QOS_ACTION Info Exch HT message received. \n"); RecHTIntolerant(vmacSta_p,p->FortyMIntolerant); break; } #endif //#ifdef INTOLERANT40 default: break; } break; } #ifdef IEEE80211H if(TRUE == macMgmtMlme_80211hAct(vmacSta_p,(macmgmtQ_MgmtMsg3_t *) MgmtMsg_p)) /* if it's mine frame, then return true */ break; #endif /* IEEE80211H */ #ifdef COEXIST_20_40_SUPPORT if(TRUE == macMgmtMlme_80211PublicAction(vmacSta_p,(macmgmtQ_MgmtMsg3_t *) MgmtMsg_p)) /* if it's mine frame, then return true */ break; #endif #ifdef QOS_FEATURE /*smMsg.event = QoSAction; smMsg.pBody = MgmtMsg_p; mhsm_send_event((Mhsm_t *)&wlpptr->vmacSta_p->mgtSync.super, &smMsg);*/ macMgmtMlme_QoSAct(vmacSta_p,(macmgmtQ_MgmtMsg3_t *) MgmtMsg_p); break; #endif /* QOS_FEATURE */ } #endif default: break; } WLDBG_EXIT(DBG_LEVEL_11); return 0; }
int ieee80211_ioctl_autelan_traffic_limit(struct net_device *dev, char *param_str, char *ret_str) { int ret = 0; struct wlprivate *priv = NETDEV_PRIV_P(struct wlprivate, dev); struct ieee80211vap *vap = &(priv->vap); vmacApInfo_t *vmacSta_p = priv->vmacSta_p; extStaDb_StaInfo_t *ni = NULL; unsigned int rate = 0; struct ieee80211_autelan_traffic_limit ik; memset(&ik, 0x00, sizeof(ik)); memcpy(&ik, param_str, sizeof(ik)); //sizeof(ik)!! dont use param_len switch (ik.type) { case SET_VAP_TRAFFIC_LIMIT_FLAG: //vap->vap_traffic_limit = ik.arg1; vap->iv_tl.traffic_limit_flag = ik.arg1; break; case GET_VAP_TRAFFIC_LIMIT_FLAG: ret = copy_to_user(ret_str, &(vap->iv_tl.traffic_limit_flag), sizeof(vap->iv_tl.traffic_limit_flag)); break; case SET_VAP_TRAFFIC_LIMIT: //vap->vap_packet_max_number = ik.arg1 * 1024 / 8; vap->iv_tl.rx_traffic_limit = ik.arg1; if(ik.arg1) vap->iv_tl.rx_rate_in_us_per_byte = (1024 * (CAR_SCALE_FACTOR * 8))/(vap->iv_tl.rx_traffic_limit); break; case GET_VAP_TRAFFIC_LIMIT : //rate = (vap->vap_packet_max_number) * 8 / 1024; rate = vap->iv_tl.rx_traffic_limit; ret = copy_to_user(ret_str, &rate, sizeof(rate)); break; case SET_VAP_TRAFFIC_LIMIT_SEND: //vap->vap_packet_max_number_send = ik.arg1 * 1024 / 8; vap->iv_tl.tx_traffic_limit = ik.arg1; if(ik.arg1) vap->iv_tl.tx_rate_in_us_per_byte = (1024* (CAR_SCALE_FACTOR * 8))/(vap->iv_tl.tx_traffic_limit); break; case GET_VAP_TRAFFIC_LIMIT_SEND: rate = (vap->iv_tl.tx_traffic_limit); ret = copy_to_user(ret_str, &rate, sizeof(rate)); break; case SET_SPECIFIC_NODE_TRAFFIC_LIMIT_FLAG: ni = extStaDb_GetStaInfo(vmacSta_p, (IEEEtypes_MacAddr_t *)ik.macaddr, 1); if (ni == NULL) { printk("%s ni is null.\n",__func__); return -EINVAL; } ni->ni_special_tl.traffic_limit_flag = ik.arg1; //printk("%s ni->ni_special_tl.traffic_limit_flag = %d\n",__func__,ni->ni_special_tl.traffic_limit_flag); break; case GET_SPECIFIC_NODE_TRAFFIC_LIMIT_FLAG: ni = extStaDb_GetStaInfo(vmacSta_p, (IEEEtypes_MacAddr_t *)ik.macaddr, 1); if (ni == NULL) { printk("%s ni is null.\n",__func__); return -EINVAL; } ret = copy_to_user(ret_str, &(ni->ni_special_tl.traffic_limit_flag), sizeof(ni->ni_special_tl.traffic_limit_flag)); break; case SET_NODE_TRAFFIC_LIMIT: ni = extStaDb_GetStaInfo(vmacSta_p, (IEEEtypes_MacAddr_t *)ik.macaddr, 1); if (ni == NULL) return -EINVAL; //ni->ni_packet_max_number = ik.arg1 * 1024 / 8; ni->ni_special_tl.rx_traffic_limit = ik.arg1; if(ik.arg1) ni->ni_special_tl.rx_rate_in_us_per_byte = (1024* (CAR_SCALE_FACTOR * 8))/(ni->ni_special_tl.rx_traffic_limit); break; case GET_NODE_TRAFFIC_LIMIT : ni = extStaDb_GetStaInfo(vmacSta_p, (IEEEtypes_MacAddr_t *)ik.macaddr, 1); if (ni == NULL) return -EINVAL; //rate = (ni->ni_packet_max_number) * 8 /1024; rate = ni->ni_special_tl.rx_traffic_limit; ret = copy_to_user(ret_str, &rate, sizeof(rate)); break; case SET_NODE_TRAFFIC_LIMIT_SEND: ni = extStaDb_GetStaInfo(vmacSta_p, (IEEEtypes_MacAddr_t *)ik.macaddr, 1); if (ni == NULL) return -EINVAL; //ni->ni_packet_max_number_send = ik.arg1 * 1024 / 8; ni->ni_special_tl.tx_traffic_limit = ik.arg1; if(ik.arg1) ni->ni_special_tl.tx_rate_in_us_per_byte = (1024* (CAR_SCALE_FACTOR * 8))/(ni->ni_special_tl.tx_traffic_limit); break; case GET_NODE_TRAFFIC_LIMIT_SEND: ni = extStaDb_GetStaInfo(vmacSta_p, (IEEEtypes_MacAddr_t *)ik.macaddr, 1); if (ni == NULL) return -EINVAL; //rate = (ni->ni_packet_max_number_send) * 8 / 1024; rate = ni->ni_special_tl.tx_traffic_limit; ret = copy_to_user(ret_str, &rate, sizeof(rate)); break; case SET_EVERY_NODE_TRAFFIC_LIMIT: //vap->every_node_packet_max_number = ik.arg1 * 1024 / 8; vap->iv_everynode_tl.rx_traffic_limit = ik.arg1; if(ik.arg1) vap->iv_everynode_tl.rx_rate_in_us_per_byte = (1024 * (CAR_SCALE_FACTOR * 8))/(vap->iv_everynode_tl.rx_traffic_limit); //printk("%s rx_traffic_limit = %d rx_rate_in_us_per_byte = %d\n",__func__,vap->iv_everynode_tl.rx_traffic_limit,vap->iv_everynode_tl.rx_rate_in_us_per_byte); break; case GET_EVERY_NODE_TRAFFIC_LIMIT : //rate = (vap->every_node_packet_max_number) * 8 / 1024; rate = vap->iv_everynode_tl.rx_traffic_limit; ret = copy_to_user(ret_str, &rate, sizeof(rate)); au_pkt = 0; drop_pkt = 0; break; case SET_EVERY_NODE_TRAFFIC_LIMIT_FLAG: //vap->every_node_traffic_limit = ik.arg1; vap->iv_everynode_tl.traffic_limit_flag = ik.arg1; break; case GET_EVERY_NODE_TRAFFIC_LIMIT_FLAG: ret = copy_to_user(ret_str, &(vap->iv_everynode_tl.traffic_limit_flag), sizeof(vap->iv_everynode_tl.traffic_limit_flag)); #if 0 { int i = 0; for(i = 0;i < 3 ;i++) { printk("<<%d>> gpkt = %d drop_pkt = %d last_sec = %d last_usec = %d cur_sec = %d cur_usec = %d us_elapsed = %d us_reqd = %d rx_reqd = %d\n",i,g_pkt[i],drop[i],ls_s[i],ls_us[i],cur_s[i],cur_us[i],elapsed[i],reqd[i],rx_reqd[0]); } } #endif break; case SET_EVERY_NODE_TRAFFIC_LIMIT_SEND: //vap->every_node_packet_max_number_send = ik.arg1 * 1024 / 8; vap->iv_everynode_tl.tx_traffic_limit = ik.arg1; if(ik.arg1) vap->iv_everynode_tl.tx_rate_in_us_per_byte = (1024* (CAR_SCALE_FACTOR * 8))/(vap->iv_everynode_tl.tx_traffic_limit); //printk("%s tx_traffic_limit = %d tx_rate_in_us_per_byte = %d \n",__func__,vap->iv_everynode_tl.tx_traffic_limit,vap->iv_everynode_tl.tx_rate_in_us_per_byte); //printk("((1024*1024) * (CAR_SCALE_FACTOR * 8)) = %d (vap->iv_tl.tx_traffic_limit * 1024) = %d\n",((1024*1024) * (CAR_SCALE_FACTOR * 8)),(vap->iv_everynode_tl.tx_traffic_limit * 1024)); break; case GET_EVERY_NODE_TRAFFIC_LIMIT_SEND: //rate = (vap->every_node_packet_max_number_send) * 8 / 1024; rate = vap->iv_everynode_tl.tx_traffic_limit; ret = copy_to_user(ret_str, &rate, sizeof(rate)); //printk("pkt = %d drop_pkt = %d\n",au_pkt,drop_pkt); break; /*ljy--add end*/ default : return -EFAULT; } switch (ik.type) { case SET_EVERY_NODE_TRAFFIC_LIMIT_FLAG: case SET_EVERY_NODE_TRAFFIC_LIMIT: case SET_EVERY_NODE_TRAFFIC_LIMIT_SEND: { extStaDb_StaInfo_t *pStaInfo; UCHAR *sta_buf, *show_buf; int i, entries; entries = extStaDb_entries(vmacSta_p,0); sta_buf = kmalloc(entries *64,GFP_KERNEL); if (sta_buf == NULL) { break; } extStaDb_list(vmacSta_p,sta_buf, 1); show_buf = sta_buf; for(i=0; i<entries; i++) { if ( (pStaInfo = extStaDb_GetStaInfo(vmacSta_p,(IEEEtypes_MacAddr_t *)show_buf, 0)) == NULL ) { break; } pStaInfo->ni_everynode_tl.traffic_limit_flag = vap->iv_everynode_tl.traffic_limit_flag; pStaInfo->ni_everynode_tl.tx_traffic_limit = vap->iv_everynode_tl.tx_traffic_limit; pStaInfo->ni_everynode_tl.tx_rate_in_us_per_byte = vap->iv_everynode_tl.tx_rate_in_us_per_byte; pStaInfo->ni_everynode_tl.rx_traffic_limit = vap->iv_everynode_tl.rx_traffic_limit; pStaInfo->ni_everynode_tl.rx_rate_in_us_per_byte = vap->iv_everynode_tl.rx_rate_in_us_per_byte; show_buf += sizeof(STA_INFO); } kfree(sta_buf); } break; default: return 0; } return ret; }
void InitClientInfo(UINT8 *macAddr_p, dot11MgtFrame_t *MgmtMsg_p, vmacEntry_t *clientVMacEntry_p, BOOLEAN isApMrvl) { struct net_device *pStaDev = (struct net_device *) clientVMacEntry_p->privInfo_p; struct wlprivate *wlpptrSta = NETDEV_PRIV_P(struct wlprivate, pStaDev); vmacApInfo_t *vmacSta_p = wlpptrSta->vmacSta_p; MIB_802DOT11 *mib = vmacSta_p->Mib802dot11; extStaDb_StaInfo_t StaInfo; extStaDb_StaInfo_t *StaInfo_p = NULL; extStaDb_StaInfo_t StaInfoRmAp; extStaDb_StaInfo_t *StaInfoRmAp_p = NULL; #ifdef V6FW extStaDb_StaInfo_t StaInfoClient; extStaDb_StaInfo_t *StaInfoClient_p = NULL; #endif PeerInfo_t *pPeerInfo = NULL; //UINT32 Aid, StnId; UINT8 QosInfo = 0; UINT8 i = 0; STA_SECURITY_MIBS * pStaSecurityMibs = NULL; memset(&StaInfo, 0, sizeof(extStaDb_StaInfo_t)); if (!initParentAp) { parentApAid = AssignAid(); parentApStnId = AssignStnId(); initParentAp = 1; #ifdef V6FW ClientAid = AssignAid(); ClientStnId = AssignStnId(); #endif } memset(&StaInfoRmAp, 0, sizeof(extStaDb_StaInfo_t)); if ((StaInfoRmAp_p = extStaDb_GetStaInfo(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)macAddr_p, 1)) == NULL) { memcpy(&StaInfoRmAp.Addr, macAddr_p, sizeof(IEEEtypes_MacAddr_t)); StaInfoRmAp.StnId = parentApStnId; StaInfoRmAp.Aid = parentApAid; StaInfoRmAp.AP = FALSE; StaInfoRmAp.Client = TRUE; StaInfoRmAp.mib_p = wlpptrSta->vmacSta_p->Mib802dot11; StaInfoRmAp.dev = pStaDev; extStaDb_AddSta(wlpptrSta->vmacSta_p, &StaInfoRmAp); if ((StaInfoRmAp_p = extStaDb_GetStaInfo(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)macAddr_p, 1)) == NULL) { printk("InitClientInfo: ERROR - cannot add host Client Remote AP to station database. \n"); return; } } StaInfo_p = StaInfoRmAp_p; #ifdef V6FW memset(&StaInfoClient, 0, sizeof(extStaDb_StaInfo_t)); if ((StaInfoClient_p = extStaDb_GetStaInfo(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)MgmtMsg_p->Hdr.DestAddr, 1)) == NULL) { memcpy(&StaInfoClient.Addr, MgmtMsg_p->Hdr.DestAddr, sizeof(IEEEtypes_MacAddr_t)); StaInfoClient.StnId = ClientStnId; StaInfoClient.Aid = ClientAid; StaInfoClient.AP = FALSE; StaInfoClient.Client = TRUE; StaInfoClient.mib_p = wlpptrSta->vmacSta_p->Mib802dot11; StaInfoClient.dev = pStaDev; extStaDb_AddSta(wlpptrSta->vmacSta_p, &StaInfoClient); if ((StaInfoClient_p = extStaDb_GetStaInfo(wlpptrSta->vmacSta_p,(IEEEtypes_MacAddr_t *)MgmtMsg_p->Hdr.DestAddr, 1)) == NULL) { printk("InitClientInfo: ERROR - Cannot add Host Client MAC to station database. \n"); return; } } #endif // Set the Peer info. pPeerInfo = sme_GetClientPeerInfo(clientVMacEntry_p); memset(pPeerInfo, 0, sizeof(PeerInfo_t)); setClientPeerInfo(clientVMacEntry_p, MgmtMsg_p, pPeerInfo, StaInfo_p, &QosInfo, mib); #ifdef V6FW setClientPeerInfo(clientVMacEntry_p, MgmtMsg_p, pPeerInfo, StaInfoClient_p, &QosInfo, mib); #endif #ifdef AMPDU_SUPPORT free_any_pending_ampdu_pck(pStaDev,StaInfo_p->Aid); for(i=0;i<3;i++) /** Reset the ampdu reorder pck anyway **/ wlpptrSta->wlpd_p->AmpduPckReorder[StaInfo_p->Aid].AddBaReceive[i]=FALSE; /** clear Ba flag **/ #ifdef V6FW free_any_pending_ampdu_pck(pStaDev,StaInfoClient_p->Aid); for(i=0;i<3;i++) /** Reset the ampdu reorder pck anyway **/ wlpptrSta->wlpd_p->AmpduPckReorder[StaInfoClient_p->Aid].AddBaReceive[i]=FALSE; /** clear Ba flag **/ #endif if (*wlpptrSta->vmacSta_p->Mib802dot11->mib_AmpduTx) { memset(&StaInfo_p->aggr11n.startbytid[0], 0, 8); memset(&StaInfo_p->aggr11n.onbytid[0], 0, 8); StaInfo_p->aggr11n.type &= ~WL_WLAN_TYPE_AMPDU; #ifdef V6FW memset(&StaInfoClient_p->aggr11n.startbytid[0], 0, 8); memset(&StaInfoClient_p->aggr11n.onbytid[0], 0, 8); StaInfoClient_p->aggr11n.type &= ~WL_WLAN_TYPE_AMPDU; #endif AddHT_IE(vmacSta_p,&StaInfo_p->HtElem); } #endif if ((*(wlpptrSta->vmacSta_p->Mib802dot11->pMib_11nAggrMode)&WL_MODE_AMSDU_TX_MASK )== 0) { /* if AMSDU disabled locally then setup stainfo accordingly */ StaInfo_p->aggr11n.threshold = 0; StaInfo_p->aggr11n.cap = 0; #ifdef V6FW StaInfoClient_p->aggr11n.threshold = 0; StaInfoClient_p->aggr11n.cap = 0; #endif } else if (*(wlpptrSta->vmacSta_p->Mib802dot11->pMib_11nAggrMode)& WL_MODE_AMSDU_TX_4K) { /* if AMSDU set to 4k locally then setup stainfo as per this*/ StaInfo_p->aggr11n.cap = 1; if(!(*(wlpptrSta->vmacSta_p->Mib802dot11->pMib_11nAggrMode) & WL_MODE_AMPDU_TX)) { StaInfo_p->aggr11n.type |= WL_WLAN_TYPE_AMSDU; } #ifdef V6FW StaInfoClient_p->aggr11n.cap = 1; if(!(*(wlpptrSta->vmacSta_p->Mib802dot11->pMib_11nAggrMode) & WL_MODE_AMPDU_TX)) StaInfoClient_p->aggr11n.type |= WL_WLAN_TYPE_AMSDU; #endif } if (mib->Privacy->RSNEnabled && !mib->RSNConfigWPA2->WPA2OnlyEnabled) { pStaSecurityMibs = sme_GetStaSecurityMibsPtr(clientVMacEntry_p); if ((pStaSecurityMibs->thisStaRsnIE_p->ElemId == 221 || pStaSecurityMibs->thisStaRsnIE_p->ElemId == 48) &&(pStaSecurityMibs->thisStaRsnIE_p->PwsKeyCipherList[3] == 2)) { // TKIP disable non -Marvell AP aggregation if(!isApMrvl) { StaInfo_p->aggr11n.threshold = 0; StaInfo_p->aggr11n.thresholdBackUp = StaInfo_p->aggr11n.threshold; #ifdef V6FW StaInfoClient_p->aggr11n.threshold = 0; StaInfoClient_p->aggr11n.thresholdBackUp = StaInfo_p->aggr11n.threshold; #endif } } } if(!isApMrvl && mib->Privacy->PrivInvoked) { StaInfo_p->aggr11n.threshold = 0; StaInfo_p->aggr11n.thresholdBackUp = StaInfo_p->aggr11n.threshold; #ifdef V6FW StaInfoClient_p->aggr11n.threshold = 0; StaInfoClient_p->aggr11n.thresholdBackUp = StaInfo_p->aggr11n.threshold; #endif } /* First remove station even if not added to station database. */ /* Remove AP entry into FW STADB */ wlFwSetNewStn(wlpptrSta->master,(u_int8_t *)macAddr_p, parentApAid, parentApStnId, 2, pPeerInfo, QosInfo, StaInfo_p->IsStaQSTA); #ifdef V6FW wlFwSetNewStn(wlpptrSta->master,(u_int8_t *)MgmtMsg_p->Hdr.DestAddr, ClientAid, ClientStnId, 2, pPeerInfo, QosInfo, StaInfoClient_p->IsStaQSTA); #endif /* Add AP entry into FW STADB */ wlFwSetNewStn(wlpptrSta->master,(u_int8_t *)macAddr_p, parentApAid, parentApStnId, 0, pPeerInfo, QosInfo, StaInfo_p->IsStaQSTA); #ifdef V6FW wlFwSetNewStn(wlpptrSta->master,(u_int8_t *)MgmtMsg_p->Hdr.DestAddr, ClientAid, ClientStnId, 0, pPeerInfo, QosInfo, StaInfoClient_p->IsStaQSTA); #endif wlFwSetSecurity(pStaDev,macAddr_p); #ifdef V6FW wlFwSetSecurity(pStaDev,(u_int8_t *)MgmtMsg_p->Hdr.DestAddr); #endif return; }
extern void SmeMgmt(vmacApInfo_t *vmacSta_p,UINT32 eventsTriggered, UINT8 *msg) { MIB_802DOT11 *mib=vmacSta_p->Mib802dot11; MIB_STA_CFG *mib_StaCfg_p=vmacSta_p->Mib802dot11->StationConfig; smeQ_MgmtMsg_t *CfrmIndMsg_p; WLDBG_ENTER(DBG_LEVEL_11); { //eventsTriggered = os_EventWait(sysinfo_SME_MAIN_Q_EVENT, // SME_MAIN_EVENT_TRIGGERS, // OS_EVENT_WAITMODE_CLR_OR); /*------------------------------*/ /* Check for an error condition */ /*------------------------------*/ if (eventsTriggered == 0) { return; } else { /*---------------------------------------------------*/ /* Check for receipt of an 802.11 management message */ /*---------------------------------------------------*/ if (eventsTriggered & smeMain_MGMT_MSG_RCVD) { CfrmIndMsg_p = (smeQ_MgmtMsg_t *) msg; { switch (CfrmIndMsg_p->MsgType) { case SME_NOTIFY_START_CFRM: if (CfrmIndMsg_p->Msg.StartCfrm.Result == START_RESULT_SUCCESS) { } else if (CfrmIndMsg_p->Msg.StartCfrm.Result == START_RESULT_BSS_ALREADY_STARTED_OR_JOINED) { } else if (CfrmIndMsg_p->Msg.StartCfrm.Result == START_RESULT_INVALID_PARAMETERS) { } break; case SME_NOTIFY_RESET_CFRM: if (vmacSta_p->SmeState == SME_STATE_WAIT_FOR_RESET_CONFIRM) { SendStartCmd(vmacSta_p); } break; #ifdef IEEE80211H case SME_NOTIFY_ASSOC_IND: { extStaDb_StaInfo_t *staInfo = NULL; /* * AP is in A mode and doing spectrum management */ if (((*(mib->mib_ApMode) == AP_MODE_A_ONLY)||(*(mib->mib_ApMode)==AP_MODE_AandG)) && (mib_StaCfg_p->SpectrumManagementRequired == TRUE)) { #ifdef DEBUG_ENABLE printf("A new friend is coming\n\r"); #endif /* DEBUG_ENABLE */ if((staInfo = extStaDb_GetStaInfo(vmacSta_p,&CfrmIndMsg_p->Msg.AssocInd.PeerStaAddr, 0))) { /* Station IS capable of doing spectrum management */ if (staInfo->IsSpectrumMgmt == TRUE) { #ifdef DEBUG_ENABLE printf("Ask him measure this channel on behalf me\n\r"); #endif /* DEBUG_ENABLE */ #ifdef IEEE80211H_NOTWIFI SendMREQUESTCmd(vmacSta_p,&staInfo->Addr, RfSwitchChanA); #endif } } else { #ifdef DEBUG_ENABLE printf("Oops! Dest station not found\n\r"); #endif /* DEBUG_ENABLE */ } } } break; case SME_NOTIFY_REASSOC_IND: { extStaDb_StaInfo_t *staInfo = NULL; /* * AP is in A mode and doing spectrum management */ if (((*(mib->mib_ApMode) == AP_MODE_A_ONLY)||(*(mib->mib_ApMode)==AP_MODE_AandG)) && (mib_StaCfg_p->SpectrumManagementRequired == TRUE)) { #ifdef DEBUG_ENABLE printf("A new friend is coming\n\r"); #endif /* DEBUG_ENABLE */ if((staInfo = extStaDb_GetStaInfo(vmacSta_p, &CfrmIndMsg_p->Msg.ReassocInd.PeerStaAddr, 0))) { /* Station IS capable of doing spectrum management */ if (staInfo->IsSpectrumMgmt == TRUE) { #ifdef DEBUG_ENABLE printf("Ask him measure this channel on behalf me\n\r"); #endif /* DEBUG_ENABLE */ SendMREQUESTCmd(vmacSta_p,&staInfo->Addr, RfSwitchChanA); } } else { #ifdef DEBUG_ENABLE printf("Oops! Dest station not found\n\r"); #endif /* DEBUG_ENABLE */ } } } break; #ifdef MRVL_DFS /*Channel switch has been performed.*/ case SME_NOTIFY_CHANNELSWITCH_CFRM: { DfsCmd_t dfsCmd ; /* If channel change is successful, send the message to * the event dispatcher */ if( CfrmIndMsg_p->Msg.ChanSwitchCfrm.result) { dfsCmd.CmdType = DFS_CMD_CHANNEL_CHANGE ; memcpy( &dfsCmd.Body.chInfo , &CfrmIndMsg_p->Msg.ChanSwitchCfrm.chInfo, sizeof (DfsChanInfo) ); evtDFSMsg( vmacSta_p->dev, (UINT8 *)&dfsCmd ); } } break; /*Radar has been detected.*/ case SME_NOTIFY_RADAR_DETECTION_IND: { DfsCmd_t dfsCmd ; /* Send the radar detection message to * the event dispatcher */ dfsCmd.CmdType = DFS_CMD_RADAR_DETECTION ; memcpy( &dfsCmd.Body.chInfo , &CfrmIndMsg_p->Msg.RadarDetectionInd.chInfo, sizeof (DfsChanInfo) ); evtDFSMsg( vmacSta_p->dev, (UINT8 *)&dfsCmd ); } break; #endif //MRVL_DFS case SME_NOTIFY_MREQUEST_IND: smeMrequestIndProcess(vmacSta_p,&CfrmIndMsg_p->Msg.MrequestInd); break; case SME_NOTIFY_MREQUEST_CFRM: smeMrequestCfrmProcess(vmacSta_p,&CfrmIndMsg_p->Msg.MrequestCfrm); break; case SME_NOTIFY_MEASURE_CFRM: smeMeasureCfrmProcess(vmacSta_p,&CfrmIndMsg_p->Msg.MeasureCfrm); break; case SME_NOTIFY_MREPORT_IND: { extStaDb_StaInfo_t *staInfo = NULL; /* * AP is in A mode and doing spectrum management */ if (((*(mib->mib_ApMode) == AP_MODE_A_ONLY)||(*(mib->mib_ApMode)==AP_MODE_AandG)) && (mib_StaCfg_p->SpectrumManagementRequired == TRUE)) { staInfo = extStaDb_GetStaInfo(vmacSta_p,&CfrmIndMsg_p->Msg.MreportInd.PeerStaAddr, 0); #ifdef DEBUG_ENABLE printf("SME_NOTIFY_MREPORT_IND\n\r"); #endif /* DEBUG_ENABLE */ if(staInfo != NULL) { /* Station IS capable of doing spectrum management */ if (staInfo->IsSpectrumMgmt == TRUE) { #ifdef DEBUG_ENABLE printf("Process incoming MLME-MREPORT.ind\n\r"); #endif /* DEBUG_ENABLE */ smeMreportIndProcess(vmacSta_p,(IEEEtypes_MacAddr_t *)&staInfo->Addr, &CfrmIndMsg_p->Msg.MreportInd); } } else { #ifdef DEBUG_ENABLE printf("Oops! Dest station not found\n\r"); #endif /* DEBUG_ENABLE */ } } } break; case SME_NOTIFY_MREPORT_CFRM: smeMreportCfrmProcess(vmacSta_p,&CfrmIndMsg_p->Msg.MreportCfrm); break; case SME_NOTIFY_TPCADPT_CFRM: smeMTpcAdptCfrmdProcess(vmacSta_p,&CfrmIndMsg_p->Msg.TPCAdaptCfrm); break; case SMC_NOTIFY_CHANNELSWITCH_IND: smeChannelSwitchIndProcess(vmacSta_p,&CfrmIndMsg_p->Msg.ChannelSwitchInd); break; case SMC_NOTIFY_CHANNELSWITCH_CFRM: smeChannelSwitchCfrmProcess(vmacSta_p,&CfrmIndMsg_p->Msg.ChannelSwitchCfrm); break; #endif /* IEEE80211H */ default: break; } //pool_FreeBuf((char *)CfrmIndMsg_p); } } /*---------------------------------------*/ /* Check for receipt of a error messages */ /*---------------------------------------*/ } } WLDBG_EXIT(DBG_LEVEL_11); }