/* 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); }
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 }