Пример #1
0
/* API used only for SMETASK */
#define IS_ACCEPT_AUTONOMOUS_REPORT 1  /* 0: no autonomous report allowed 1: autonomous report allowed */
static WL_STATUS SendMREQUESTCmd(vmacApInfo_t *vmacSta_p,IEEEtypes_MacAddr_t *MacAddr_p, UINT8 MeasuredChannel)
{    
#ifdef AP_BUFFER
	MIB_STA_CFG  *mib_StaCfg_p=vmacSta_p->Mib802dot11->StationConfig;
	macmgmtQ_SmeCmd_t *SmeCmd_p = NULL;
	extStaDb_measurement_info_t measureInfo;
#endif
#ifdef DEBUG_ENABLE
	printf("send out a MLME command to macMgmt task\n\r");
#endif /* DEBUG_ENABLE */
#ifdef AP_BUFFER
	if ((SmeCmd_p = (macmgmtQ_SmeCmd_t *)pool_GetBuf(smeCmdPoolId)) != NULL)
	{
		IEEEtypes_MRequestCmd_t *MrequestCmd_p = &SmeCmd_p->Body.MrequestCmd;
		memset(SmeCmd_p, 0, sizeof(macmgmtQ_SmeCmd_t));
		SmeCmd_p->CmdType = SME_CMD_MREQUEST;
		memcpy(SmeCmd_p->Body.MrequestCmd.PeerStaAddr, MacAddr_p, sizeof(IEEEtypes_MacAddr_t));

		MrequestCmd_p->DiaglogToken = getDiaglogToken(); /* should be unique */
		MrequestCmd_p->MeasureItems = 1;//for now just check for basic request ftang 3;

		/* the first measurement request IE */
		MrequestCmd_p->MeasureReqSet[0].MeasurementToken = getMeasurementToken(); 
		MrequestCmd_p->MeasureReqSet[0].Mode.Enable = 1;    /* only enable BASIC measurement */
		MrequestCmd_p->MeasureReqSet[0].Mode.Request = 0;   /* AP don't accept any measurement requests */
		MrequestCmd_p->MeasureReqSet[0].Mode.Report = IS_ACCEPT_AUTONOMOUS_REPORT;    /* if AP accept autonomous report */
		MrequestCmd_p->MeasureReqSet[0].Type = TYPE_REQ_BASIC;
		MrequestCmd_p->MeasureReqSet[0].Request.Channel = MeasuredChannel;  
		memset(MrequestCmd_p->MeasureReqSet[0].Request.StartTime, 0, 8); /* start to test immediately */
		MrequestCmd_p->MeasureReqSet[0].Request.Duration = 3 * mib_StaCfg_p->BcnPeriod; /* how long the measrement goes */        

		/* record it 
		* now we only support Basic measurement
		* so just record what we are interested in
		*/

		if (STATE_SUCCESS == extStaDb_GetMeasurementInfo(vmacSta_p,MacAddr_p, &measureInfo))
		{
			measureInfo.DiaglogToken = MrequestCmd_p->DiaglogToken;
			measureInfo.mBasic.mToken = MrequestCmd_p->MeasureReqSet[0].MeasurementToken;
			memcpy(measureInfo.mBasic.measureStartTime, MrequestCmd_p->MeasureReqSet[0].Request.StartTime, 8);
			measureInfo.mBasic.measureDuration = MrequestCmd_p->MeasureReqSet[0].Request.Duration;

			extStaDb_SetMeasurementInfo(vmacSta_p,MacAddr_p, &measureInfo);
		}    
		macMgmtQ_SmeWriteNoBlock(vmacSta_p,SmeCmd_p);          
		return(OS_SUCCESS);
	}
#endif
	return(OS_FAIL);
}
Пример #2
0
tx80211_MgmtMsg_t *mlmeApiPrepMgtMsg(UINT32 Subtype, IEEEtypes_MacAddr_t *DestAddr, IEEEtypes_MacAddr_t *SrcAddr)
#endif
{
	macmgmtQ_MgmtMsg2_t * MgmtMsg_p;
	//tx80211_MgmtMsg_t * TxMsg_p;
	//UINT32 size;
#ifdef AP_MAC_LINUX
	struct sk_buff *skb;
	UINT8 *frm;

	if ((skb = ieee80211_getmgtframe(&frm, sizeof(struct ieee80211_frame)+2)) != NULL)
	{
		//skb->len = 34;
		//skb->tail+= 34;
		WLDBG_INFO(DBG_LEVEL_8, "mlmeApiPrepMgtMsg length = %d \n", skb->len);
		MgmtMsg_p = (macmgmtQ_MgmtMsg2_t *) skb->data;
		MgmtMsg_p->Hdr.FrmCtl.Type = IEEE_TYPE_MANAGEMENT;
		MgmtMsg_p->Hdr.FrmCtl.Subtype = Subtype;
		MgmtMsg_p->Hdr.FrmCtl.Retry=0;
		MgmtMsg_p->Hdr.Duration = 300;
		memcpy(&MgmtMsg_p->Hdr.DestAddr, DestAddr, sizeof(IEEEtypes_MacAddr_t));
		memcpy(&MgmtMsg_p->Hdr.SrcAddr, SrcAddr, sizeof(IEEEtypes_MacAddr_t));
		memcpy(&MgmtMsg_p->Hdr.BssId, SrcAddr, sizeof(IEEEtypes_MacAddr_t));
	}

	return skb;
#else
#ifdef AP_BUFFER
	if ((TxMsg_p = (tx80211_MgmtMsg_t *)pool_GetBuf(txMgmtPoolId)) != NULL)
	{
		MgmtMsg_p = &TxMsg_p->MgmtFrame;
		MgmtMsg_p->Hdr.FrmCtl.Type = IEEE_TYPE_MANAGEMENT;
		MgmtMsg_p->Hdr.FrmCtl.Subtype = Subtype;
		MgmtMsg_p->Hdr.FrmCtl.Retry=0;
		MgmtMsg_p->Hdr.Duration = 300;
		memcpy(&MgmtMsg_p->Hdr.DestAddr, DestAddr, sizeof(IEEEtypes_MacAddr_t));
		memcpy(&MgmtMsg_p->Hdr.SrcAddr, SrcAddr, sizeof(IEEEtypes_MacAddr_t));
		memcpy(&MgmtMsg_p->Hdr.BssId, SrcAddr, sizeof(IEEEtypes_MacAddr_t));
	}
	return TxMsg_p;
#else
	return NULL;
#endif
#endif
}