📄 zddebug.c
字号:
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 + -