Exemple #1
0
VOID 	WscOnOff(
	IN  PRTMP_ADAPTER	pAd,
	IN  INT				ApIdx,
	IN  BOOLEAN			bOff)
{
	PWSC_V2_INFO	pWpsV2Info = &pAd->ApCfg.MBSSID[ApIdx & 0x0F].WscControl.WscV2Info;
	if (bOff)
	{
		/*
			AP must not support WEP in WPS V2
		*/
		pWpsV2Info->bWpsEnable = FALSE;
		pAd->ApCfg.MBSSID[ApIdx & 0x0F].WscIEBeacon.ValueLen = 0;
		pAd->ApCfg.MBSSID[ApIdx & 0x0F].WscIEProbeResp.ValueLen = 0;
		DBGPRINT(RT_DEBUG_TRACE, ("WscOnOff - OFF.\n"));
	}
	else
	{
		pWpsV2Info->bWpsEnable = TRUE;
		if (pAd->ApCfg.MBSSID[ApIdx & 0x0F].WscControl.WscConfMode != WSC_DISABLE)
		{
			INT IsAPConfigured;
			IsAPConfigured = pAd->ApCfg.MBSSID[ApIdx & 0x0F].WscControl.WscConfStatus;
			WscBuildBeaconIE(pAd, IsAPConfigured, FALSE, 0, 0, (ApIdx & 0x0F), NULL, 0, AP_MODE);
			WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, IsAPConfigured, FALSE, 0, 0, ApIdx, NULL, 0, AP_MODE);
			DBGPRINT(RT_DEBUG_TRACE, ("WscOnOff - ON.\n"));
		}
	}
	DBGPRINT(RT_DEBUG_TRACE, ("WscOnOff - bWpsEnable = %d\n", pWpsV2Info->bWpsEnable));
}
Exemple #2
0
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;
}
Exemple #3
0
INT Set_NfcConfigurationToken_Proc(
	IN RTMP_ADAPTER		*pAd,
	IN PSTRING			arg)
{
	POS_COOKIE	pObj = (POS_COOKIE) pAd->OS_Cookie;
	PWSC_CTRL	pWscCtrl = &pAd->ApCfg.MBSSID[pObj->ioctl_if].WscControl;
	PUCHAR pBuf = NULL;
	USHORT BufLen = 0;
	/*
		Action: b¡¦<7:6>: 0x00 ¡V Request, 0x01 ¡V Notify
        		b¡¦<5:0>: 0x00 ¡V Get, 0x01 - Set
	*/
	UCHAR action = 1, type = TYPE_CONFIGURATION;

	os_alloc_mem(pAd, (UCHAR **)&pBuf, (NFC_WSC_TLV_SIZE*sizeof(UCHAR)));
	if (pBuf == NULL)
	{
		return FALSE;
	}

	NfcBuildWscProfileTLV(pAd, pWscCtrl, pBuf, &BufLen);
	if (pBuf && (BufLen != 0))
	{
		NfcCommand(pAd, action, type, BufLen, pBuf);
		os_free_mem(NULL, pBuf);
	}

	if ((pAd->OpMode == OPMODE_AP) && (pWscCtrl->WscConfStatus == WSC_SCSTATE_UNCONFIGURED))
	{				
		pWscCtrl->WscConfStatus = WSC_SCSTATE_CONFIGURED;
		WscBuildBeaconIE(pAd, WSC_SCSTATE_CONFIGURED, FALSE, 0, 0, 0, NULL, 0,AP_MODE);
		WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, WSC_SCSTATE_CONFIGURED, FALSE, 0, 0, 0, NULL, 0,AP_MODE);
		APUpdateAllBeaconFrame(pAd);
		
	}
	if (pWscCtrl->WscUpdatePortCfgTimerRunning)
	{
		BOOLEAN bCancel;
		RTMPCancelTimer(&pWscCtrl->WscUpdatePortCfgTimer, &bCancel);
	}
	else
		pWscCtrl->WscUpdatePortCfgTimerRunning = TRUE;
	RTMPSetTimer(&pWscCtrl->WscUpdatePortCfgTimer, 1000);
	return TRUE;
}
Exemple #4
0
VOID	NfcParseRspCommand(
	IN  PRTMP_ADAPTER	pAd,
	IN  PUCHAR pData,
	IN  USHORT DataLen)
{
	NFC_CMD_INFO *pNfcCmdInfo = NULL;
	BOOLEAN bSetFromNfc = FALSE;
	PWSC_CTRL pWscCtrl = &pAd->ApCfg.MBSSID[0].WscControl;
	
	DBGPRINT(RT_DEBUG_TRACE, ("====> %s\n", __FUNCTION__));
	hex_dump("Packet", pData, DataLen);

	os_alloc_mem(pAd, (UCHAR **)&pNfcCmdInfo, (DataLen*sizeof(UCHAR)));
	if (pNfcCmdInfo)
	{
		NdisMoveMemory(pNfcCmdInfo, pData, DataLen);		
		hex_dump("Packet", &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len);
		bSetFromNfc = ((pNfcCmdInfo->action & 0x41) == 0x41);
		DBGPRINT(RT_DEBUG_TRACE, ("==> vendor_id: 0x%04x, action = 0x%0x, type = %d, data_len = %u, bSetFromNfc = %d\n", 
								pNfcCmdInfo->vendor_id, pNfcCmdInfo->action, pNfcCmdInfo->type, pNfcCmdInfo->data_len, bSetFromNfc));
		switch(pNfcCmdInfo->type)
		{
			case TYPE_CMD_RESULT:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_CMD_RESULT(=%d): Command result = %d\n", pNfcCmdInfo->type, pNfcCmdInfo->data[0]));
				break;
			case TYPE_CONFIGURATION:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_CONFIGURATION(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data_len != 1)
					{						
						/* 
							Receive Configuration from NFC daemon. 
						*/
						if (WscProcessCredential(pAd, &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len, pWscCtrl) == FALSE)
						{
							DBGPRINT(RT_DEBUG_TRACE, ("ProcessCredential fail..\n"));
						}
						else
						{							
							if ((pAd->OpMode == OPMODE_AP) && (pWscCtrl->WscConfStatus == WSC_SCSTATE_UNCONFIGURED))
							{				
								pWscCtrl->WscConfStatus = WSC_SCSTATE_CONFIGURED;
								WscBuildBeaconIE(pAd, WSC_SCSTATE_CONFIGURED, FALSE, 0, 0, 0, NULL, 0, AP_MODE);
								WscBuildProbeRespIE(pAd, WSC_MSGTYPE_AP_WLAN_MGR, WSC_SCSTATE_CONFIGURED, FALSE, 0, 0, 0, NULL, 0, AP_MODE);
								APUpdateAllBeaconFrame(pAd);
								
							}
							if (pWscCtrl->WscUpdatePortCfgTimerRunning)
							{
								BOOLEAN bCancel;
								RTMPCancelTimer(&pWscCtrl->WscUpdatePortCfgTimer, &bCancel);
							}
							else
								pWscCtrl->WscUpdatePortCfgTimerRunning = TRUE;
							RTMPSetTimer(&pWscCtrl->WscUpdatePortCfgTimer, 1000);
						}
					}
				}
				else
				{
					Set_NfcConfigurationToken_Proc(pAd, "1");
				}
				break;
			case TYPE_PASSWORD:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_PASSWORD(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data_len != 1)
					{
						/* 
							Receive Passwd from NFC daemon. 
						*/
						NfcProcessPasswdTV(pAd, &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len, pWscCtrl, FALSE);
						WscGetConfWithoutTrigger(pAd, pWscCtrl, FALSE);
						pWscCtrl->bTriggerByNFC = TRUE;
						pWscCtrl->NfcModel = MODEL_PASSWORD_TOKEN;
					}
				}
				else
				{
					Set_NfcPasswdToken_Proc(pAd, "1");
				}
				break;
	 		/* New type for Handover */				
			case TYPE_PASSWDHO_S:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_PASSWDHO_S(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data_len != 1)
					{
						/* 
							Receive Passwd from NFC daemon. "So far" no this case.
							Due to AP always as Registrar in handover procedure, 
							AP only receive "Handover Request Message".
						*/
						NfcProcessPasswdTV(pAd, &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len, pWscCtrl, TRUE);
						WscGetConfWithoutTrigger(pAd, pWscCtrl, FALSE);
						pWscCtrl->bTriggerByNFC = TRUE;
						pWscCtrl->NfcModel = MODEL_HANDOVER; /* 2 */
					}
				}
				else
				{
					Set_NfcPasswdToken_Proc(pAd, "2");
				}
				break;	
			case TYPE_PASSWDHO_R:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_PASSWDHO_R(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data_len != 1)
					{
						/* 
							Receive Passwd from NFC daemon. 
						*/
						NfcProcessPasswdTV(pAd, &pNfcCmdInfo->data[0], pNfcCmdInfo->data_len, pWscCtrl, TRUE);
						WscGetConfWithoutTrigger(pAd, pWscCtrl, FALSE);
						pWscCtrl->bTriggerByNFC = TRUE;
						pWscCtrl->NfcModel = MODEL_HANDOVER; /* 2 */
					}
				}
				else
				{
					/*
						"So far" no this case.
						Due to AP always as Registrar in handover procedure, 
						AP only send  "Handover Select Message".
					*/
					Set_NfcPasswdToken_Proc(pAd, "3");
				}
				break;
			case TYPE_NFC_STATUS:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_NFC_STATUS(=%d): NFC Status = %d\n", pNfcCmdInfo->type, pNfcCmdInfo->data[0]));
				pWscCtrl->NfcStatus = pNfcCmdInfo->data[0];
				break;
			case TYPE_WIFI_RADIO_STATUS:
				DBGPRINT(RT_DEBUG_TRACE, ("TYPE_WIFI_RADIO_STATUS(=%d)\n", pNfcCmdInfo->type));
				if (bSetFromNfc)
				{
					if (pNfcCmdInfo->data[0] == 1)
						MlmeRadioOn(pAd);
					else
						MlmeRadioOff(pAd);
				}
				else
				{
					UCHAR RadioStatus = 0;
					if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))
						RadioStatus = 0;
					else
						RadioStatus = 1;
					NfcCommand(pAd, 0x01, TYPE_WIFI_RADIO_STATUS, 1, &RadioStatus);
				}
				break;
			default:
				DBGPRINT(RT_DEBUG_TRACE, ("Unknow type(=%d)\n", pNfcCmdInfo->type));
				break;
		}
		os_free_mem(NULL, pNfcCmdInfo);
	}
	DBGPRINT(RT_DEBUG_TRACE, ("<==== %s\n", __FUNCTION__));
	return;
}
Exemple #5
0
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;
}
Exemple #6
0
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);
	}
}