⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zddebug.c

📁 ZD1211 source code, based on linux 2.44 or linux 2.
💻 C
📖 第 1 页 / 共 4 页
字号:
		printk(KERN_DEBUG "zd1205 read register:  reg = %4x, value = %4x\n",
			zdreq->addr, zdreq->value);
		break;

        case ZD_IOCTL_REG_WRITE16:
		tmp_value = zdreq->value & 0xffff;
		zd1211_writel(zdreq->addr, tmp_value, false);
		printk(KERN_DEBUG "zd1205 write register: reg = %4x, value = %4x\n",
                           zdreq->addr, zdreq->value);
		break;

	case ZD_IOCTL_CAM_READ:
		printk(KERN_ERR "zd1205: cam read, addr: 0x%08x\n", zdreq->addr);
		zd1205_cam_read(macp, zdreq->addr);
		break;

	case ZD_IOCTL_CAM_WRITE:
		printk(KERN_ERR "zd1205: cam write, addr: 0x%08x value: 0x%08x\n", zdreq->addr, zdreq->value);
		zd1205_cam_write(macp, zdreq->addr, zdreq->value);
		break;
	
	case ZD_IOCTL_CAM_RESET:
		printk(KERN_ERR "zd1205: reset cam\n");
		zd1205_cam_rest(macp, zdreq->value);
		break;

#if PRODUCTION == 1
	case ZD_IOCTL_CONT_TX:
		zd1205_cont_tx(macp, zdreq->value);
		break;
#endif
    case ZD_IOCTL_STA_LIST:
        zd1205_list_STAs(macp);
        break;
#if ZDCONF_DBGMSG_NORMAL == 1
    case ZD_IOCTL_CAM_DUMP:
        printk("\n\n");
        {
            int idx,idx2;
            U32 tmp;
            U64 cam_valid_bits;
            U8 mac[100];
            tmp = dot11Obj.GetReg(dot11Obj.reg, 0x708);
            cam_valid_bits = tmp ;
            cam_valid_bits = cam_valid_bits << 32;
            cam_valid_bits += dot11Obj.GetReg(dot11Obj.reg, 0x704);

            for(idx=0;idx<=43;idx++)
            {
                if(idx<40)
                    if(! (cam_valid_bits & (BIT_0 << idx)))
                        continue;
                HW_CAM_GetMAC(&dot11Obj,idx, mac);
                if(idx<40)
                    printk("%02d-", idx);
                else
                    printk("DEF%d-", idx-40);
                tmp = HW_CAM_GetEncryType(&dot11Obj, idx);
                if(tmp == NO_WEP)
                    printk("%6s-", "NO_WEP");
                else if(tmp == WEP128)
                    printk("%6s-", "WEP128");
                else if(tmp == WEP64)
                    printk("%6s-", "WEP64");
                else if(tmp == TKIP)
                    printk("%6s-", "TKIP");
                    else if(tmp == AES)
                        printk("%6s-", "AES");
                    else
                        printk("? ? ? -");

                    if(idx<40)
                    {
                        for(idx2=0;idx2<6;idx2++)
                        {
                            printk("%02x", mac[idx2]);
                            if(idx2!=5) printk(":");
                        }
                    }
                    printk(" ");
                memset(mac,0,sizeof(mac));
                    HW_CAM_GetKey(&dot11Obj, idx,16, mac);
                    for(idx2=0;idx2<16;idx2++)
                        printk("%02x ",  mac[idx2]);
                    printk("\n");
                }
            }
            break;
#endif
	case ZD_IOCTL_SET_MIC_CNT_ENABLE:
		dot11Obj.MIC_CNT = zdreq->value>0?1:0;
        printk("WPA MIC Counter Measure Feature : %s\n",
                dot11Obj.MIC_CNT ? "Enable":"Disalbe");

		break;
	case ZD_IOCTL_GET_MIC_CNT_ENABLE:
		printk("WPA MIC Counter Measure Feature : %s\n",
				dot11Obj.MIC_CNT ? "Enable":"Disalbe");
		break;
#if ZDCONF_RF_UW2453_SUPPORT == 1 || ZDCONF_RF_AR2124_SUPPORT == 1
    case ZD_IOCTL_UW_PWR :
        if(zdreq->addr == 0)
            printk("Current Level : %d\n",dot11Obj.UWCurrentTxLevel);
        else if(zdreq->addr == 1)
        {
            printk("Set Current Level : %d\n", zdreq->value);
            if(zdreq->value < 19 && zdreq->value >= 0)
            {
                dot11Obj.UWCurrentTxLevel = zdreq->value;
                dot11Obj.UWDefaulTxLevel  = zdreq->value;
                PHY_UWTxPower(&dot11Obj, dot11Obj.UWDefaulTxLevel);
            }
        }
        else
            printk("Unknown Command : %d\n", zdreq->addr);
        break;
#endif
#if ZDCONF_APC == 1
    case ZD_IOCTL_APC:
        if(zdreq->addr == 0)
        {
            U8 NULL_MAC[]={0,0,0,0,0,0};
            int i,j;
            for(i=0;i<sizeof(APC_NT)/6;i++)
            {
                if(memcmp(APC_NT[i], NULL_MAC,6) != 0)
                {
                    for(j=0;j<6;j++)
                        printk("%02x ", (U8)APC_NT[i][j]);
                    printk("\n");
                }
            }
        }
        else if(zdreq->addr == 1)
        {
            macp->wds = zdreq->value;
            if(macp->wds) 
            {
                printk("Turn On WDS\n");
                dot11Obj.SetReg(&dot11Obj, 0x700, 3); 
            }
            else
            {
                printk("Turn Off WDS\n");
                dot11Obj.SetReg(&dot11Obj, 0x700, 1); 
            }
        }
        break; 
#endif

	default :
		printk(KERN_ERR "zd_dbg_ioctl: error command = %x\n", zd_cmd);
		break;
	}

	return 0;
}    

int zd1205_wpa_ioctl(struct zd1205_private *macp, struct zydas_wlan_param *zdparm)
{
	card_Setting_t *pSetting = &macp->cardSetting;
	int ret = 0;
	u8 keylen;
	u8 idx;
	u8 *pkey;
	u8 CamEncryType=0;
	//u8 tmpDynKeyMode;
    u8 bTxKey;
    u8 bClrPerStaKey=0;


#ifdef HOSTAPD_SUPPORT
    u8 mac_addr[80];
#endif

//Test write permission
	switch(zdparm->cmd) {
		case ZD_CMD_SET_ENCRYPT_KEY:
				{// Dump key info:
					WPADEBUG("SET_ENCRYPT_KEY: alg=%s key_idx=%d set_tx=%d key_len=%d ,WPAIeLen=%d, for " MACSTR "\n", zdparm->u.crypt.alg, zdparm->u.crypt.idx, zdparm->u.crypt.flags, zdparm->u.crypt.key_len, macp->cardSetting.WPAIeLen, MAC2STR(zdparm->sta_addr));
				}
                bTxKey = zdparm->u.crypt.flags;
				keylen = zdparm->u.crypt.key_len;
				idx = zdparm->u.crypt.idx;
				pkey = zdparm->u.crypt.key;

				if (!strcmp(zdparm->u.crypt.alg, "NONE")) 
				{
					U8 zero_mac[]={0,0,0,0,0,0};
				
                                        CamEncryType = NO_WEP;
				//	pSetting->DynKeyMode = 0;
                                  //      pSetting->EncryMode=0;
                                    //    mKeyFormat=0;
#if ZDCONF_ADHOC_SUPPORT == 1
                    if (macp->cardSetting.BssType == INDEPENDENT_BSS)
                    {
                        WPADEBUG("Ignore del key request in IBSS\n");
                        return ret;
                    }   
#endif
					
					zd_SetKeyInfo(zdparm->sta_addr, CamEncryType, keylen, idx, pkey);
					if (zdparm->sta_addr[0] & 1)//del group key
					{
                        if ((macp->cardSetting.BssType == INFRASTRUCTURE_BSS) || macp->cardSetting.WPASupport ==0 || macp->cardSetting.WPAIeLen==0)
						{//802.1x dynamic WEP
                            WPADEBUG("deleting Group key\n");
							mDynKeyMode = 0;
							mKeyFormat = 0;
							mPrivacyInvoked=FALSE;
							mCap &= ~CAP_PRIVACY;
                            macp->cardSetting.EncryOnOff=macp->cardSetting.EncryMode = 0;
                            macp->cardSetting.EncryKeyId=0;

						}
						mWpaBcKeyLen = mGkInstalled = 0;
					}
					else
					{
						if (memcmp(zero_mac,zdparm->sta_addr, 6)==0)
						{
							mDynKeyMode=0;
							mKeyFormat=0;
							pSetting->DynKeyMode=0;
							pSetting->EncryMode=0;
							mDynKeyMode=0;
						}
					}
					return ret;
				}
				else if (!strcmp(zdparm->u.crypt.alg, "TKIP")) 
				{
                                        CamEncryType = TKIP;
					//if (idx == 0)
					{// Pairwise key
						mKeyFormat = CamEncryType;
						mDynKeyMode = pSetting->DynKeyMode = DYN_KEY_TKIP;
					}
				}
				else if (!strcmp(zdparm->u.crypt.alg, "CCMP"))
				{
                                        CamEncryType = AES;
					//if (idx == 0)
					{// Pairwise key
						mKeyFormat = CamEncryType;
						mDynKeyMode = pSetting->DynKeyMode = DYN_KEY_AES;
					}
				}
				else if (!strcmp(zdparm->u.crypt.alg, "WEP"))
				{
                    WPADEBUG("**********************Set WEP key\n");
                    mPrivacyInvoked=TRUE;
                    mCap |= CAP_PRIVACY;
                    macp->cardSetting.EncryOnOff=1;

					if (keylen == 5)
					{ // WEP 64
						CamEncryType = WEP64;
						//tmpDynKeyMode=DYN_KEY_WEP64;
					}
                    else if (keylen == 13)
                    {//keylen=13, WEP 128
                        CamEncryType = WEP128;
                        //tmpDynKeyMode=DYN_KEY_WEP128;
                    }
                    else
                    {
                        CamEncryType = WEP256;
                    }

// For Dynamic WEP key (Non-WPA Radius), the key ID range: 0-3
// In WPA/RSN mode, the key ID range: 1-3, usually, a broadcast key.
// For WEP key setting: we set mDynKeyMode and mKeyFormat in following case:
//   1. For 802.1x dynamically generated WEP key method.
//   2. For WPA/RSN mode, but key id == 0. (But this is an impossible case)
// So, only check case 1.
                    if (macp->cardSetting.WPAIeLen==0)
                    //if (macp->cardSetting.WPASupport == 0)
                    {
                        WPADEBUG("set WEP Enc type =%d\n", CamEncryType); 
                        macp->cardSetting.EncryMode = CamEncryType;
                        mKeyFormat = CamEncryType;
                        //mDynKeyMode = pSetting->DynKeyMode = tmpDynKeyMode;
                        if (macp->cardSetting.BssType == INDEPENDENT_BSS)
                        {
                            mDynKeyMode = 0;
                        }
                        else if (bTxKey)
                        {
                            mDynKeyMode = 0;
                            bClrPerStaKey = 1;
                            macp->cardSetting.EncryKeyId = idx;
                        }
                    }

				}
				/* DUMP key context */
#ifdef WPA_DEBUG
				if (keylen > 0)
				{
					int ii;
					printk("zddebug:Key Context:\n");
					for(ii = 0; ii < keylen;) {
						printk("0x%02x ", pkey[ii]);
						if((++ii % 16) == 0)
							printk("\n");
					}
					printk("\n");
				}
#endif
                zd_SetKeyInfo(zdparm->sta_addr, CamEncryType, keylen, idx + (bTxKey << 7) + (bClrPerStaKey << 6), pkey);

				break;

#if 0
				WPADEBUG("zd1205_wpa_ioctl: ZD_CMD_SET_ENCRYPT_KEY\n");

				/* DUMP the Key information set by the upper layer */
				{
					WPADEBUG("alg=%s key_idx=%d set_tx=%d key_len=%d\n",
						zdparm->u.crypt.alg, zdparm->u.crypt.idx,
						zdparm->u.crypt.flags, zdparm->u.crypt.key_len);
				}

				keylen = zdparm->u.crypt.key_len;
				idx = zdparm->u.crypt.idx;
				pkey = zdparm->u.crypt.key;

				if (strcmp(zdparm->u.crypt.alg, "NONE") == 0) {
					/* Reset those settings related to WPA */
                                        mKeyFormat=0;
                                        pSetting->EncryMode=0;
					pSetting->DynKeyMode = 0;
					return ret;
				}
				else if (strcmp(zdparm->u.crypt.alg, "TKIP") == 0) {
					/* Try to change mDynKeyMode here. 4D06 */
					pSetting->DynKeyMode = DYN_KEY_TKIP;
					mDynKeyMode = DYN_KEY_TKIP;
                                        mKeyFormat = TKIP;
				}
				else if (strcmp(zdparm->u.crypt.alg, "CCMP") == 0) {
					/* Try to change mDynKeyMode here. 4D06 */
					pSetting->DynKeyMode = DYN_KEY_AES;
					mDynKeyMode = DYN_KEY_AES;
                                        mKeyFormat = AES;
				}

				/* DUMP key context */
				{
					int ii;

					WPADEBUG("Key Context: ");
					for(ii = 0; ii < keylen;) {
						WPADEBUG("0x%02x ", pkey[ii]);
						
						if((++ii % 16) == 0)
							WPADEBUG("\n");
					}
					WPADEBUG("\n");
				}

				/* If Key Index is 0, this is the unicast key */
				if (idx == 0) {
					/* Set unicast key installed information */
					zd_SetKeyContext(&macp->BSSID[0], pSetting->DynKeyMode, keylen, idx, pkey);
				}
				else {
					/* Set broadcast key installed information */
					u8 bcaddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
					
					zd_SetKeyContext(bcaddr, pSetting->DynKeyMode, keylen, idx, pkey);
				}
				
				break;
#endif
		case ZD_CMD_SET_MLME:
				WPADEBUG("zd1205_wpa_ioctl: ZD_CMD_SET_MLME\n");

                /* Translate STA's address */
                sprintf(mac_addr, "%02x:%02x:%02x:%02x:%02x:%02x", zdparm->sta_addr[0], zdparm->sta_addr[1],
                    zdparm->sta_addr[2], zdparm->sta_addr[3], zdparm->sta_addr[4], zdparm->sta_addr[5]);

                switch(zdparm->u.mlme.cmd) {
                    case MLME_STA_DEAUTH:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -