/************************************************************************* * Function: * * Description: * * Input: * * Output: * **************************************************************************/ SINT8 evtDFSMsg(struct net_device *dev, UINT8 *message) { MhsmEvent_t dfsMsg; DfsCmd_t *dfsCmd_p; struct wlprivate *priv = NETDEV_PRIV_P(struct wlprivate, dev); struct wlprivate_data *wlpd_p = priv->wlpd_p ; WLDBG_ENTER(DBG_CLASS_INFO); if (message == NULL) { return 1; } if( !wlpd_p->pdfsApMain ) { return 1 ; } dfsCmd_p = (DfsCmd_t *)message; switch (dfsCmd_p->CmdType) { case DFS_CMD_CHANNEL_CHANGE : { DfsApMsg dfsApMsg ; WLDBG_INFO(DBG_LEVEL_15, "evtDFSMsg: DFS_CMD_CHANNEL_CHANGE message received. \n"); dfsApMsg.mgtMsg = (UINT8 *)(&(dfsCmd_p->Body.chInfo)); dfsMsg.event = CHANNEL_CHANGE_EVT; dfsMsg.pBody = (unsigned char *)&dfsApMsg ; mhsm_send_event(&wlpd_p->pdfsApMain->super, &dfsMsg); } break ; case DFS_CMD_RADAR_DETECTION: { DfsApMsg dfsApMsg ; WLDBG_INFO(DBG_LEVEL_15, "evtDFSMsg: DFS_CMD_RADAR_DETECTION message received. \n"); dfsApMsg.mgtMsg = (UINT8 *)(&(dfsCmd_p->Body.chInfo)); dfsMsg.event = RADAR_EVT; dfsMsg.pBody = (unsigned char *)&dfsApMsg ; mhsm_send_event(&wlpd_p->pdfsApMain->super, &dfsMsg); } break ; case DFS_CMD_WL_RESET: { DfsApMsg dfsApMsg ; WLDBG_INFO(DBG_LEVEL_15, "evtDFSMsg: DFS_CMD_WL_RESET message received. \n"); // dfsApMsg.mgtMsg = (UINT8 *)(&(dfsCmd_p->Body.chInfo)); dfsMsg.event = WL_RESET_EVT; dfsMsg.pBody = (unsigned char *)&dfsApMsg ; mhsm_send_event(&wlpd_p->pdfsApMain->super, &dfsMsg); } break ; default : return 1; } return 1; }
/* This is part of group NEW_OSIF_POWERSAVE */ extern SINT8 evtMlmePwMgmtMsg(UINT8 *dataFrameHeader, extStaDb_StaInfo_t *StaInfo_p) { IEEEtypes_PwrMgmtMode_e PwrMode; IEEEtypes_GenHdr_t *Hdr_p; Hdr_p = (IEEEtypes_GenHdr_t *)dataFrameHeader; /*if ((StaInfo_p = extStaDb_GetStaInfo(vmacSta_p,&Hdr_p->Addr2, 0)) != NULL )*/ { PwrMode = StaInfo_p->PwrMode; if ( PwrMode == PWR_MODE_ACTIVE ) { if ( Hdr_p->FrmCtl.PwrMgmt == 0) { /* no change in mode */ return 1; } else { MhsmEvent_t msg; msg.event = PsIndicate; msg.pBody = (unsigned char *)StaInfo_p; StaInfo_p->PwrMode = PWR_MODE_PWR_SAVE; mhsm_send_event((Mhsm_t *)&StaInfo_p->pwrSvMon.super,&msg); return 1; } } else { if (Hdr_p->FrmCtl.PwrMgmt == 1) { /* no change in power mode */ return 1; } else { MhsmEvent_t msg; msg.event = PsIndicate; msg.pBody = (unsigned char *)StaInfo_p; StaInfo_p->PwrMode = PWR_MODE_ACTIVE; mhsm_send_event((Mhsm_t *)&StaInfo_p->pwrSvMon.super, &msg); return 1; } } } return 0; }
void StateMachineTimeoutHandler(void *data_p) { MhsmEvent_t msg; msg.event = Timeout; WLDBG_INFO(DBG_LEVEL_4, "enter state machine timeout handler\n"); mhsm_send_event((Mhsm_t *)data_p, &msg); }
/************************************************************************* * 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; }