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

📄 iwctl.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 5 页
字号:
	PSMgmtObject	pMgmt = &(pDevice->sMgmtObj);	int ret=0;	if(wrq->length){		if ((wrq->length < 2) || (extra[1]+2 != wrq->length)) {			ret = -EINVAL;			goto out;		}		if(wrq->length > MAX_WPA_IE_LEN){			ret = -ENOMEM;			goto out;		}		memset(pMgmt->abyWPAIE, 0, MAX_WPA_IE_LEN);		if(copy_from_user(pMgmt->abyWPAIE, extra, wrq->length)){			ret = -EFAULT;			goto out;		}		pMgmt->wWPAIELen = wrq->length;	}else {		memset(pMgmt->abyWPAIE, 0, MAX_WPA_IE_LEN);		pMgmt->wWPAIELen = 0;	}		out://not completely ...not necessary in wpa_supplicant 0.5.8	return 0;}int iwctl_giwgenie(struct net_device *dev,			  struct iw_request_info *info,			  struct iw_point *wrq,			  char *extra){	PSDevice			pDevice = (PSDevice)dev->priv;	PSMgmtObject	pMgmt = &(pDevice->sMgmtObj);	int ret=0;	int space = wrq->length;	wrq->length = 0;	if(pMgmt->wWPAIELen > 0){		wrq->length = pMgmt->wWPAIELen;		if(pMgmt->wWPAIELen <= space){			if(copy_to_user(extra, pMgmt->abyWPAIE, pMgmt->wWPAIELen)){				ret = -EFAULT;			}		}else 			ret = -E2BIG;	}		return ret;}int iwctl_siwencodeext(struct net_device *dev,             struct iw_request_info *info,             struct iw_point *wrq,             char *extra){    PSDevice	        pDevice = (PSDevice)dev->priv;      PSMgmtObject	pMgmt = &(pDevice->sMgmtObj);	struct iw_encode_ext *ext = (struct iw_encode_ext*)extra;    struct viawget_wpa_param *param=NULL;//original member    wpa_alg alg_name;    u8  addr[6];    int key_idx, set_tx;    u8  seq[IW_ENCODE_SEQ_MAX_SIZE];    u8 key[64];    size_t seq_len,key_len=0;//   // int ii;    u8 *buf;    size_t blen;    u8 key_array[64];    int ret=0;printk("SIOCSIWENCODEEXT...... \n");blen = sizeof(*param);buf = kmalloc((int)blen, (int)GFP_KERNEL);if (buf == NULL)    return -ENOMEM;memset(buf, 0, blen);param = (struct viawget_wpa_param *) buf;//recover alg_nameswitch (ext->alg) {    case IW_ENCODE_ALG_NONE:                  alg_name = WPA_ALG_NONE;		break;    case IW_ENCODE_ALG_WEP:                  alg_name = WPA_ALG_WEP;		break;    case IW_ENCODE_ALG_TKIP:                  alg_name = WPA_ALG_TKIP;		break;    case IW_ENCODE_ALG_CCMP:                  alg_name = WPA_ALG_CCMP;		break;    default:		printk("Unknown alg = %d\n",ext->alg);		ret= -ENOMEM;		goto error;		}//recover addr memcpy(addr, ext->addr.sa_data, ETH_ALEN);//recover key_idx  key_idx = (wrq->flags&IW_ENCODE_INDEX) - 1;//recover set_txif(ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY)   set_tx = 1;//recover seq,seq_len	if(ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) {   seq_len=IW_ENCODE_SEQ_MAX_SIZE;   memcpy(seq, ext->rx_seq, seq_len);		}//recover key,key_lenif(ext->key_len) {  key_len=ext->key_len;  memcpy(key, &ext->key[0], key_len);	}memset(key_array, 0, 64);	if ( key_len > 0) {     memcpy(key_array, key, key_len);    if (key_len == 32) {          // notice ! the oder 	  memcpy(&key_array[16], &key[24], 8);	  memcpy(&key_array[24], &key[16], 8);	}	}/**************Translate iw_encode_ext to viawget_wpa_param****************/memcpy(param->addr, addr, ETH_ALEN);param->u.wpa_key.alg_name = (int)alg_name;param->u.wpa_key.set_tx = set_tx;param->u.wpa_key.key_index = key_idx;param->u.wpa_key.key_len = key_len;param->u.wpa_key.key = (u8 *)key_array; param->u.wpa_key.seq = (u8 *)seq;param->u.wpa_key.seq_len = seq_len;#if 0printk("param->u.wpa_key.alg_name =%d\n",param->u.wpa_key.alg_name);printk("param->addr=%02x:%02x:%02x:%02x:%02x:%02x\n",	      param->addr[0],param->addr[1],param->addr[2],	      param->addr[3],param->addr[4],param->addr[5]);printk("param->u.wpa_key.set_tx =%d\n",param->u.wpa_key.set_tx);printk("param->u.wpa_key.key_index =%d\n",param->u.wpa_key.key_index);printk("param->u.wpa_key.key_len =%d\n",param->u.wpa_key.key_len);printk("param->u.wpa_key.key =");for(ii=0;ii<param->u.wpa_key.key_len;ii++)	printk("%02x:",param->u.wpa_key.key[ii]);         printk("\n");printk("param->u.wpa_key.seq_len =%d\n",param->u.wpa_key.seq_len);printk("param->u.wpa_key.seq =");for(ii=0;ii<param->u.wpa_key.seq_len;ii++)	printk("%02x:",param->u.wpa_key.seq[ii]);         printk("\n");printk("...........\n");#endif//****set if current action is Network Manager count??//****this method is so foolish,but there is no other way???if(param->u.wpa_key.alg_name == WPA_ALG_NONE) {   if(param->u.wpa_key.key_index ==0) {     pDevice->bwextstep0 = TRUE;    }   if((pDevice->bwextstep0 = TRUE)&&(param->u.wpa_key.key_index ==1)) {     pDevice->bwextstep0 = FALSE;     pDevice->bwextstep1 = TRUE;    }	   if((pDevice->bwextstep1 = TRUE)&&(param->u.wpa_key.key_index ==2)) {     pDevice->bwextstep1 = FALSE;     pDevice->bwextstep2 = TRUE;	}   if((pDevice->bwextstep2 = TRUE)&&(param->u.wpa_key.key_index ==3)) {     pDevice->bwextstep2 = FALSE;     pDevice->bwextstep3 = TRUE;        }		 }		  if(pDevice->bwextstep3 == TRUE) {    printk("SIOCSIWENCODEEXT:Enable WPA WEXT SUPPORT!!!!!\n");     pDevice->bwextstep0 = FALSE;     pDevice->bwextstep1 = FALSE;     pDevice->bwextstep2 = FALSE;     pDevice->bwextstep3 = FALSE;	     pDevice->bWPASuppWextEnabled = TRUE;     memset(pMgmt->abyDesireBSSID, 0xFF,6);     KeyvInitTable(pDevice,&pDevice->sKey); 		 }//******			spin_lock_irq(&pDevice->lock);		  ret = wpa_set_keys(pDevice, param, TRUE);		spin_unlock_irq(&pDevice->lock);error:kfree(param);	return ret;}int iwctl_giwencodeext(struct net_device *dev,             struct iw_request_info *info,             struct iw_point *wrq,             char *extra){		return -EOPNOTSUPP;;}int iwctl_siwmlme(struct net_device *dev,				struct iw_request_info * info,				struct iw_point *wrq,				char *extra){		PSDevice			pDevice = (PSDevice)dev->priv;	PSMgmtObject	pMgmt = &(pDevice->sMgmtObj);	struct iw_mlme *mlme = (struct iw_mlme *)extra;	//u16 reason = cpu_to_le16(mlme->reason_code);	int ret = 0;	if(memcmp(pMgmt->abyCurrBSSID, mlme->addr.sa_data, ETH_ALEN)){		ret = -EINVAL;		return ret;	}	switch(mlme->cmd){	case IW_MLME_DEAUTH:		//this command seems to be not complete,please test it --einsnliu		//printk("iwctl_siwmlme--->send DEAUTH\n");		//bScheduleCommand((HANDLE) pDevice, WLAN_CMD_DEAUTH, (PBYTE)&reason);		//break;	case IW_MLME_DISASSOC:		if(pDevice->bLinkPass == TRUE){		  printk("iwctl_siwmlme--->send DISASSOCIATE\n");		  bScheduleCommand((HANDLE)pDevice, WLAN_CMD_DISASSOCIATE, NULL);			}		break;	default:		ret = -EOPNOTSUPP;	}	return ret;}#endif //End Add --//2008-0409-07, <Add> by Einsn Liu/*------------------------------------------------------------------*//* * Structures to export the Wireless Handlers */#if WIRELESS_EXT > 12/*static const iw_handler		iwctl_handler[] ={	(iw_handler) iwctl_commit,      // SIOCSIWCOMMIT 	(iw_handler) iwctl_giwname,     // SIOCGIWNAME     	(iw_handler) NULL,				// SIOCSIWNWID 	(iw_handler) NULL,				// SIOCGIWNWID 	(iw_handler) iwctl_siwfreq,		// SIOCSIWFREQ 	(iw_handler) iwctl_giwfreq,		// SIOCGIWFREQ	(iw_handler) iwctl_siwmode,		// SIOCSIWMODE 	(iw_handler) iwctl_giwmode,		// SIOCGIWMODE 	(iw_handler) NULL,		        // SIOCSIWSENS 	(iw_handler) iwctl_giwsens,		        // SIOCGIWSENS 	(iw_handler) NULL, 		        // SIOCSIWRANGE 	(iw_handler) iwctl_giwrange,		// SIOCGIWRANGE 	(iw_handler) NULL,         		    // SIOCSIWPRIV 	(iw_handler) NULL,             		// SIOCGIWPRIV 	(iw_handler) NULL,             		// SIOCSIWSTATS 	(iw_handler) NULL,                  // SIOCGIWSTATS     (iw_handler) NULL,                  // SIOCSIWSPY 	(iw_handler) NULL,		            // SIOCGIWSPY 	(iw_handler) NULL,				    // -- hole -- 	(iw_handler) NULL,				    // -- hole -- 	(iw_handler) iwctl_siwap,		    // SIOCSIWAP 	(iw_handler) iwctl_giwap,		    // SIOCGIWAP 	(iw_handler) NULL,				    // -- hole -- 0x16	(iw_handler) iwctl_giwaplist,       // SIOCGIWAPLIST #if WIRELESS_EXT > 13		(iw_handler) iwctl_siwscan,         // SIOCSIWSCAN 		(iw_handler) iwctl_giwscan,         // SIOCGIWSCAN 		#else 	(iw_handler) NULL,	(iw_handler) NULL,#endif		(iw_handler) iwctl_siwessid,		// SIOCSIWESSID 	(iw_handler) iwctl_giwessid,		// SIOCGIWESSID 	(iw_handler) NULL,		// SIOCSIWNICKN 	(iw_handler) NULL,		// SIOCGIWNICKN 	(iw_handler) NULL,				    // -- hole -- 	(iw_handler) NULL,				    // -- hole -- 	(iw_handler) iwctl_siwrate,		// SIOCSIWRATE 0x20	(iw_handler) iwctl_giwrate,		// SIOCGIWRATE 	(iw_handler) iwctl_siwrts,		// SIOCSIWRTS 	(iw_handler) iwctl_giwrts,		// SIOCGIWRTS 	(iw_handler) iwctl_siwfrag,		// SIOCSIWFRAG 	(iw_handler) iwctl_giwfrag,		// SIOCGIWFRAG 	(iw_handler) NULL,		// SIOCSIWTXPOW 	(iw_handler) NULL,		// SIOCGIWTXPOW 	(iw_handler) iwctl_siwretry,		// SIOCSIWRETRY 	(iw_handler) iwctl_giwretry,		// SIOCGIWRETRY 	(iw_handler) iwctl_siwencode,		// SIOCSIWENCODE 	(iw_handler) iwctl_giwencode,		// SIOCGIWENCODE 	(iw_handler) iwctl_siwpower,		// SIOCSIWPOWER 	(iw_handler) iwctl_giwpower,		// SIOCGIWPOWER #if WIRELESS_EXT > 17	(iw_handler) NULL,			// -- hole -- 	(iw_handler) NULL,			// -- hole -- 	(iw_handler) iwctl_siwgenie,    // SIOCSIWGENIE 	(iw_handler) iwctl_giwgenie,    // SIOCGIWGENIE 		(iw_handler) iwctl_siwauth,		// SIOCSIWAUTH 	(iw_handler) iwctl_giwauth,		// SIOCGIWAUTH 	(iw_handler) iwctl_siwencodeext,		// SIOCSIWENCODEEXT 	(iw_handler) iwctl_giwencodeext,		// SIOCGIWENCODEEXT 	(iw_handler) NULL,				// SIOCSIWPMKSA 	(iw_handler) NULL,				// -- hole -- #endif // WIRELESS_EXT > 17 	};*/static const iw_handler		iwctl_handler[] ={	(iw_handler) iwctl_commit,      // SIOCSIWCOMMIT     	(iw_handler) NULL,      // SIOCGIWNAME     	(iw_handler) NULL,				// SIOCSIWNWID 	(iw_handler) NULL,				// SIOCGIWNWID 	(iw_handler) NULL,		// SIOCSIWFREQ 	(iw_handler) NULL,		// SIOCGIWFREQ	(iw_handler) NULL,		// SIOCSIWMODE 	(iw_handler) NULL,		// SIOCGIWMODE 	(iw_handler) NULL,		        // SIOCSIWSENS 	(iw_handler) NULL,		        // SIOCGIWSENS 	(iw_handler) NULL, 		        // SIOCSIWRANGE 	(iw_handler) iwctl_giwrange,		// SIOCGIWRANGE 	(iw_handler) NULL,         		    // SIOCSIWPRIV 	(iw_handler) NULL,             		// SIOCGIWPRIV 	(iw_handler) NULL,             		// SIOCSIWSTATS 	(iw_handler) NULL,                  // SIOCGIWSTATS     (iw_handler) NULL,                  // SIOCSIWSPY 	(iw_handler) NULL,		            // SIOCGIWSPY 	(iw_handler) NULL,				    // -- hole -- 	(iw_handler) NULL,				    // -- hole -- 	(iw_handler) NULL,		    // SIOCSIWAP 	(iw_handler) NULL,		    // SIOCGIWAP 	(iw_handler) NULL,				    // -- hole -- 0x16	(iw_handler) NULL,       // SIOCGIWAPLIST #if WIRELESS_EXT > 13		(iw_handler) iwctl_siwscan,         // SIOCSIWSCAN 		(iw_handler) iwctl_giwscan,         // SIOCGIWSCAN 		#else 	(iw_handler) NULL,	(iw_handler) NULL,#endif		(iw_handler) NULL,		// SIOCSIWESSID 	(iw_handler) NULL,		// SIOCGIWESSID 	(iw_handler) NULL,		// SIOCSIWNICKN 	(iw_handler) NULL,		// SIOCGIWNICKN 	(iw_handler) NULL,		// -- hole -- 	(iw_handler) NULL,		// -- hole -- 	(iw_handler) NULL,		// SIOCSIWRATE 0x20	(iw_handler) NULL,		// SIOCGIWRATE 	(iw_handler) NULL,		// SIOCSIWRTS 	(iw_handler) NULL,		// SIOCGIWRTS 	(iw_handler) NULL,		// SIOCSIWFRAG 	(iw_handler) NULL,		// SIOCGIWFRAG 	(iw_handler) NULL,		// SIOCSIWTXPOW 	(iw_handler) NULL,		// SIOCGIWTXPOW 	(iw_handler) NULL,		// SIOCSIWRETRY 	(iw_handler) NULL,		// SIOCGIWRETRY 	(iw_handler) NULL,		// SIOCSIWENCODE 	(iw_handler) NULL,		// SIOCGIWENCODE 	(iw_handler) NULL,		// SIOCSIWPOWER 	(iw_handler) NULL,		// SIOCGIWPOWER //2008-0409-07, <Add> by Einsn Liu#if WIRELESS_EXT > 17 	(iw_handler) NULL,			// -- hole -- 	(iw_handler) NULL,			// -- hole -- 	(iw_handler) NULL,    // SIOCSIWGENIE 	(iw_handler) NULL,    // SIOCGIWGENIE 		(iw_handler) NULL,		// SIOCSIWAUTH 	(iw_handler) NULL,		// SIOCGIWAUTH 	(iw_handler) NULL,		// SIOCSIWENCODEEXT 	(iw_handler) NULL,		// SIOCGIWENCODEEXT 	(iw_handler) NULL,				// SIOCSIWPMKSA 	(iw_handler) NULL,				// -- hole -- #endif // WIRELESS_EXT > 17 };static const iw_handler		iwctl_private_handler[] ={	NULL,				// SIOCIWFIRSTPRIV };    struct iw_priv_args iwctl_private_args[] = {{ IOCTL_CMD_SET,   IW_PRIV_TYPE_CHAR | 1024, 0,  "set"},  };        const struct iw_handler_def	iwctl_handler_def ={#if WIRELESS_EXT > 16	.get_wireless_stats = &iwctl_get_wireless_stats,#endif    	.num_standard	= sizeof(iwctl_handler)/sizeof(iw_handler),	//	.num_private	= sizeof(iwctl_private_handler)/sizeof(iw_handler),//	.num_private_args = sizeof(iwctl_private_args)/sizeof(struct iw_priv_args),	.num_private	= 0,	.num_private_args = 0,		.standard	= (iw_handler *) iwctl_handler,//	.private	= (iw_handler *) iwctl_private_handler,//	.private_args	= (struct iw_priv_args *)iwctl_private_args,	.private	= NULL,	.private_args	= NULL,	};#endif // WIRELESS_EXT > 12 #endif // WIRELESS_EXT 

⌨️ 快捷键说明

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