示例#1
0
/*************************************************************************
* 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;
}
示例#2
0
/* 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;
}
示例#3
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);
}
示例#4
0
/*************************************************************************
* 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;
}
示例#5
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;
}