/* ========================================================================== Description: Pre-build All BEACON frame in the shared memory ========================================================================== */ VOID APUpdateAllBeaconFrame(RTMP_ADAPTER *pAd) { INT i; #ifdef DOT11_N_SUPPORT #ifdef DOT11N_DRAFT3 BOOLEAN FlgQloadIsAlarmIssued = FALSE; #endif /* DOT11N_DRAFT3 */ #endif /* DOT11_N_SUPPORT */ if (pAd->ApCfg.DtimCount == 0) pAd->ApCfg.DtimCount = pAd->ApCfg.DtimPeriod - 1; else pAd->ApCfg.DtimCount -= 1; #ifdef DOT11_N_SUPPORT #ifdef DOT11N_DRAFT3 /* QLOAD ALARM */ #ifdef AP_QLOAD_SUPPORT FlgQloadIsAlarmIssued = QBSS_LoadIsAlarmIssued(pAd); #endif /* AP_QLOAD_SUPPORT */ if ((pAd->ApCfg.DtimCount == 0) && (((pAd->CommonCfg.Bss2040CoexistFlag & BSS_2040_COEXIST_INFO_SYNC) && (pAd->CommonCfg.bForty_Mhz_Intolerant == FALSE)) || (FlgQloadIsAlarmIssued == TRUE))) { UCHAR prevBW, prevExtChOffset; DBGPRINT(RT_DEBUG_TRACE, ("DTIM Period reached, BSS20WidthReq=%d, Intolerant40=%d!\n", pAd->CommonCfg.LastBSSCoexist2040.field.BSS20WidthReq, pAd->CommonCfg.LastBSSCoexist2040.field.Intolerant40)); pAd->CommonCfg.Bss2040CoexistFlag &= (~BSS_2040_COEXIST_INFO_SYNC); prevBW = pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth; prevExtChOffset = pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset; if (pAd->CommonCfg.LastBSSCoexist2040.field.BSS20WidthReq || pAd->CommonCfg.LastBSSCoexist2040.field.Intolerant40 || (pAd->MacTab.fAnyStaFortyIntolerant == TRUE) || (FlgQloadIsAlarmIssued == TRUE)) { pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = 0; pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = 0; } else { pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth = pAd->CommonCfg.RegTransmitSetting.field.BW; pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset = pAd->CommonCfg.RegTransmitSetting.field.EXTCHA; } DBGPRINT(RT_DEBUG_TRACE,("\tNow RecomWidth=%d, ExtChanOffset=%d, prevBW=%d, prevExtOffset=%d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth, pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset, prevBW, prevExtChOffset)); pAd->CommonCfg.Bss2040CoexistFlag |= BSS_2040_COEXIST_INFO_NOTIFY; } #endif /* DOT11N_DRAFT3 */ #endif /* DOT11_N_SUPPORT */ for(i=0; i<pAd->ApCfg.BssidNum; i++) { APUpdateBeaconFrame(pAd, i); } }
VOID WscSetupLockTimeout( IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3) { PWSC_CTRL pWscControl = (PWSC_CTRL)FunctionContext; PRTMP_ADAPTER pAd = NULL; if (pWscControl == NULL) return; pAd = (PRTMP_ADAPTER)pWscControl->pAd; if (pAd == NULL) return; pWscControl->bSetupLock = FALSE; pWscControl->WscSetupLockTimerRunning = FALSE; pWscControl->PinAttackCount = 0; WscBuildBeaconIE(pAd, pWscControl->WscConfStatus, FALSE, 0, 0, (pWscControl->EntryIfIdx & 0xF), NULL, 0, AP_MODE); WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, pWscControl->WscConfStatus, FALSE, 0, 0, pWscControl->EntryIfIdx, NULL, 0, AP_MODE); APUpdateBeaconFrame(pAd, pWscControl->EntryIfIdx & 0x0F); DBGPRINT(RT_DEBUG_TRACE, ("WscSetupLockTimeout!\n")); return; }
INT Set_P2P_Cancel_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg) { POS_COOKIE pObj; PRT_P2P_CONFIG pP2PCtrl = &pAd->P2pCfg; PWSC_CTRL pWscControl = NULL; INT val = (INT)simple_strtol(arg, 0, 10); pObj = (POS_COOKIE) pAd->OS_Cookie; if (pObj->ioctl_if_type != INT_P2P) return FALSE; if (val == 1) { pP2PCtrl->P2PConnectState = P2P_CONNECT_IDLE; if (!MAC_ADDR_EQUAL(&ZERO_MAC_ADDR[0], &pP2PCtrl->ConnectingMAC[0])) { UCHAR p2pindex; p2pindex = P2pGroupTabSearch(pAd, pP2PCtrl->ConnectingMAC); if (p2pindex < MAX_P2P_GROUP_SIZE) { if (pAd->P2pTable.Client[p2pindex].Rule == P2P_IS_GO) pAd->P2pTable.Client[p2pindex].P2pClientState = P2PSTATE_DISCOVERY_GO; else pAd->P2pTable.Client[p2pindex].P2pClientState = P2PSTATE_DISCOVERY; pAd->P2pTable.Client[p2pindex].StateCount = 0; } NdisZeroMemory(pP2PCtrl->ConnectingMAC, MAC_ADDR_LEN); } if (P2P_GO_ON(pAd)) { UINT32 i, p2pEntryCnt=0; MAC_TABLE_ENTRY *pEntry; INT IsAPConfigured; pWscControl = &pAd->ApCfg.MBSSID[MAIN_MBSSID].WscControl; IsAPConfigured = pWscControl->WscConfStatus; if (pWscControl->bWscTrigger) { WscStop(pAd, FALSE, pWscControl); pWscControl->WscPinCode = 0; WscBuildBeaconIE(pAd, IsAPConfigured, FALSE, 0, 0, MAIN_MBSSID, NULL, 0, AP_MODE); WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, IsAPConfigured, FALSE, 0, 0, (MAIN_MBSSID | MIN_NET_DEVICE_FOR_P2P_GO), NULL, 0, AP_MODE); APUpdateBeaconFrame(pAd, pObj->ioctl_if); } for (i=0; i<MAX_LEN_OF_MAC_TABLE; i++) { pEntry = &pAd->MacTab.Content[i]; if (IS_P2P_GO_ENTRY(pEntry) && (pEntry->WpaState == AS_PTKINITDONE)) p2pEntryCnt++; } DBGPRINT(RT_DEBUG_ERROR, ("%s:: Total= %d. p2pEntry = %d.\n", __FUNCTION__, pAd->MacTab.Size, p2pEntryCnt)); if ((p2pEntryCnt == 0) && (pAd->flg_p2p_OpStatusFlags == P2P_GO_UP)) { #ifdef RTMP_MAC_USB RTEnqueueInternalCmd(pAd, CMDTHREAD_SET_P2P_LINK_DOWN, NULL, 0); #endif /* RTMP_MAC_USB */ } } else if (P2P_CLI_ON(pAd)) { pWscControl = &pAd->ApCfg.MBSSID[MAIN_MBSSID].WscControl; pWscControl->WscPinCode = 0; if (pWscControl->bWscTrigger) WscStop(pAd, TRUE, pWscControl); P2pLinkDown(pAd, P2P_DISCONNECTED); } P2pStopScan(pAd); pP2PCtrl->bPeriodicListen = TRUE; /* Reset bConfirmByUI to its default value */ pP2PCtrl->bConfirmByUI = CONFIRM_BY_UI_DEFAULT; if (INFRA_ON(pAd) || P2P_GO_ON(pAd) || P2P_CLI_ON(pAd)) { INT ch; // TODO: shiang-6590, why we set bw as 40 when BBPCurrentBW == BW_40?? if (pAd->CommonCfg.BBPCurrentBW == BW_40) { rtmp_bbp_set_bw(pAd, BW_40); ch = pAd->CommonCfg.CentralChannel; } else { ch = pAd->CommonCfg.Channel; } AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE); AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel); } } DBGPRINT(RT_DEBUG_TRACE, ("%s:: Cancel P2P action\n", __FUNCTION__)); return TRUE; }
VOID WscCheckPinAttackCount( IN PRTMP_ADAPTER pAd, IN PWSC_CTRL pWscControl) { BOOLEAN bCancelled; if ((pWscControl->EntryIfIdx & MIN_NET_DEVICE_FOR_APCLI) ) { /* APCLI and P2P CLI don't need to do PIN attack checking. */ return; } /* If a static PIN is used, the AP must track multiple failed attempts to authenticate an external Registrar and then enter a lock-down state (This state is signified by setting the attribute AP Setup Locked to TRUE). After at most 10 failed, consecutive attempts, with no time limitation, from any number of external Registrars, the AP shall revert to a locked down state, and the AP shall remain in the locked down state indefinitely (i.e., until the user intervenes to unlock AP's PIN for use by external Registrars) */ pWscControl->PinAttackCount++; if (pWscControl->PinAttackCount >= pWscControl->MaxPinAttack) { pWscControl->bSetupLock = TRUE; if (pWscControl->WscSetupLockTimerRunning) { RTMPCancelTimer(&pWscControl->WscSetupLockTimer, &bCancelled); pWscControl->WscSetupLockTimerRunning = FALSE; } if (pWscControl->PinAttackCount < WSC_LOCK_FOREVER_PIN_ATTACK) { pWscControl->WscSetupLockTimerRunning = TRUE; RTMPSetTimer(&pWscControl->WscSetupLockTimer, pWscControl->SetupLockTime*60*1000); } WscBuildBeaconIE(pAd, pWscControl->WscConfStatus, FALSE, 0, 0, (pWscControl->EntryIfIdx & 0xF), NULL, 0, AP_MODE); WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, pWscControl->WscConfStatus, FALSE, 0, 0, pWscControl->EntryIfIdx, NULL, 0, AP_MODE); APUpdateBeaconFrame(pAd, pWscControl->EntryIfIdx & 0x0F); } }