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

📄 hostap.c

📁 VIA VT6656 USB linux source code.
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
 * All rights reserved.
 *
 * This software is copyrighted by and is the sole property of
 * VIA Networking Technologies, Inc. This software may only be used
 * in accordance with the corresponding license agreement. Any unauthorized
 * use, duplication, transmission, distribution, or disclosure of this
 * software is expressly forbidden.
 *
 * This software is provided by VIA Networking Technologies, Inc. "as is"
 * and any express or implied warranties, including, but not limited to, the
 * implied warranties of merchantability and fitness for a particular purpose
 * are disclaimed. In no event shall VIA Networking Technologies, Inc.
 * be liable for any direct, indirect, incidental, special, exemplary, or
 * consequential damages.
 *   * File: hostap.c * * Purpose: handle hostap deamon ioctl input/out functions * * Author: Lyndon Chen * * Date: Oct. 20, 2003 * * Functions:  * * Revision History: * */ #if !defined(__HOSTAP_H__)#include "hostap.h"#endif#if !defined(__IOCMD_H__)#include "iocmd.h"#endif#if !defined(__MAC_H__)#include "mac.h"#endif#if !defined(__CARD_H__)#include "card.h"#endif#if !defined(__BASEBAND_H__)#include "baseband.h"#endif#if !defined(__WPACTL_H__)#include "wpactl.h"#endif#if !defined(__KEY_H__)#include "key.h"#endif#if !defined(__MAC_H__)#include "mac.h"#endif#if !defined(__DATARATE_H__)#include "datarate.h"#endif#define VIAWGET_HOSTAPD_MAX_BUF_SIZE 1024#define HOSTAP_CRYPT_FLAG_SET_TX_KEY BIT0#define HOSTAP_CRYPT_FLAG_PERMANENT BIT1#define HOSTAP_CRYPT_ERR_UNKNOWN_ALG 2#define HOSTAP_CRYPT_ERR_UNKNOWN_ADDR 3#define HOSTAP_CRYPT_ERR_CRYPT_INIT_FAILED 4#define HOSTAP_CRYPT_ERR_KEY_SET_FAILED 5#define HOSTAP_CRYPT_ERR_TX_KEY_SET_FAILED 6#define HOSTAP_CRYPT_ERR_CARD_CONF_FAILED 7/*---------------------  Static Definitions -------------------------*//*---------------------  Static Classes  ----------------------------*//*---------------------  Static Variables  --------------------------*///static int          msglevel                =MSG_LEVEL_DEBUG;static int          msglevel                =MSG_LEVEL_INFO;/*---------------------  Static Functions  --------------------------*//*---------------------  Export Variables  --------------------------*//* * Description: *      register net_device (AP) for hostap deamon  * * Parameters: *  In: *      pDevice             -  *      rtnl_locked         -  *  Out: * * Return Value:  * */ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked){	struct net_device *dev = pDevice->dev;	int ret;    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name);		pDevice->apdev = (struct net_device *)kmalloc(sizeof(struct net_device), GFP_KERNEL);    if (pDevice->apdev == NULL)		return -ENOMEM;	memset(pDevice->apdev, 0, sizeof(struct net_device));		pDevice->apdev->priv = pDevice;	memcpy(pDevice->apdev->dev_addr, dev->dev_addr, ETH_ALEN);	pDevice->apdev->hard_start_xmit = pDevice->tx_80211;	pDevice->apdev->type = ARPHRD_IEEE80211;	pDevice->apdev->base_addr = dev->base_addr;	pDevice->apdev->irq = dev->irq;	pDevice->apdev->mem_start = dev->mem_start;	pDevice->apdev->mem_end = dev->mem_end;	sprintf(pDevice->apdev->name, "%sap", dev->name);	if (rtnl_locked)		ret = register_netdevice(pDevice->apdev);	else		ret = register_netdev(pDevice->apdev);	if (ret) {		DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: register_netdevice(AP) failed!\n",		       dev->name);		return -1;	}	    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Registered netdevice %s for AP management\n",	       dev->name, pDevice->apdev->name);	           KeyvInitTable(pDevice,&pDevice->sKey);    	return 0;}/* * Description: *      unregister net_device(AP) * * Parameters: *  In: *      pDevice             -  *      rtnl_locked         -  *  Out: * * Return Value:  * */static int hostap_disable_hostapd(PSDevice pDevice, int rtnl_locked){    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: disabling hostapd mode\n", pDevice->dev->name);    if (pDevice->apdev && pDevice->apdev->name && pDevice->apdev->name[0]) {		if (rtnl_locked)			unregister_netdevice(pDevice->apdev);		else			unregister_netdev(pDevice->apdev);            DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Netdevice %s unregistered\n",		       pDevice->dev->name, pDevice->apdev->name);	}	kfree(pDevice->apdev);	pDevice->apdev = NULL;    pDevice->bEnable8021x = FALSE;    pDevice->bEnableHostWEP = FALSE;     pDevice->bEncryptionEnable = FALSE;    	return 0;}/* * Description: *      Set enable/disable hostapd mode * * Parameters: *  In: *      pDevice             -  *      rtnl_locked         -  *  Out: * * Return Value:  * */int hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked){	if (val < 0 || val > 1)		return -EINVAL;	if (pDevice->bEnableHostapd == val)		return 0;	pDevice->bEnableHostapd = val;	if (val)		return hostap_enable_hostapd(pDevice, rtnl_locked);	else		return hostap_disable_hostapd(pDevice, rtnl_locked);} /* * Description: *      remove station function supported for hostap deamon * * Parameters: *  In: *      pDevice   -  *      param     -  *  Out: * * Return Value:  * */ static int hostap_remove_sta(PSDevice pDevice,				     struct viawget_hostapd_param *param){	UINT uNodeIndex;		    if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {        BSSvRemoveOneNode(pDevice, uNodeIndex);    }    else {        return -ENOENT;    }		return 0;}/* * Description: *      add a station from hostap deamon * * Parameters: *  In: *      pDevice   -  *      param     -  *  Out: * * Return Value:  * */ static int hostap_add_sta(PSDevice pDevice,				  struct viawget_hostapd_param *param){    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);	UINT uNodeIndex;	    	    if (!BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {        BSSvCreateOneNode((PSDevice)pDevice, &uNodeIndex);    }     memcpy(pMgmt->sNodeDBTable[uNodeIndex].abyMACAddr, param->sta_addr, WLAN_ADDR_LEN);    pMgmt->sNodeDBTable[uNodeIndex].eNodeState = NODE_ASSOC;    pMgmt->sNodeDBTable[uNodeIndex].wCapInfo = param->u.add_sta.capability;// TODO listenInterval//    pMgmt->sNodeDBTable[uNodeIndex].wListenInterval = 1;    pMgmt->sNodeDBTable[uNodeIndex].bPSEnable = FALSE;    pMgmt->sNodeDBTable[uNodeIndex].bySuppRate = param->u.add_sta.tx_supp_rates;    // set max tx rate                         pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate =            pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate;    // set max basic rate    pMgmt->sNodeDBTable[uNodeIndex].wMaxBasicRate = RATE_2M;    // Todo: check sta preamble, if ap can't support, set status code    pMgmt->sNodeDBTable[uNodeIndex].bShortPreamble =            WLAN_GET_CAP_INFO_SHORTPREAMBLE(pMgmt->sNodeDBTable[uNodeIndex].wCapInfo);    pMgmt->sNodeDBTable[uNodeIndex].wAID = (WORD)param->u.add_sta.aid;    pMgmt->sNodeDBTable[uNodeIndex].ulLastRxJiffer = jiffies;    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Add STA AID= %d \n", pMgmt->sNodeDBTable[uNodeIndex].wAID);    DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "MAC=%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X \n",               param->sta_addr[0],               param->sta_addr[1],               param->sta_addr[2],               param->sta_addr[3],               param->sta_addr[4],               param->sta_addr[5]              ) ;     DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Max Support rate = %d \n",                pMgmt->sNodeDBTable[uNodeIndex].wMaxSuppRate);	return 0;}     /* * Description: *      get station info * * Parameters: *  In: *      pDevice   -  *      param     -  *  Out: * * Return Value:  * */ static int hostap_get_info_sta(PSDevice pDevice,				       struct viawget_hostapd_param *param){    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);    	UINT uNodeIndex;		    if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {		    param->u.get_info_sta.inactive_sec = 	        (jiffies - pMgmt->sNodeDBTable[uNodeIndex].ulLastRxJiffer) / HZ;	    //param->u.get_info_sta.txexc = pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts;	}	else {    	    return -ENOENT;	}	return 0;}/* * Description: *      reset txexec * * Parameters: *  In: *      pDevice   -  *      param     -  *  Out: *      TURE, FALSE * * Return Value:  * */ /*static int hostap_reset_txexc_sta(PSDevice pDevice,					  struct viawget_hostapd_param *param){    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);    	UINT uNodeIndex;	    if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {	        pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts = 0;	}	else {    	    return -ENOENT;	}		return 0;}*//* * Description: *      set station flag * * Parameters: *  In: *      pDevice   -  *      param     -  *  Out: * * Return Value:  * */ static int hostap_set_flags_sta(PSDevice pDevice,					struct viawget_hostapd_param *param){    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);    	UINT uNodeIndex;	    if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) {			pMgmt->sNodeDBTable[uNodeIndex].dwFlags |= param->u.set_flags_sta.flags_or;		pMgmt->sNodeDBTable[uNodeIndex].dwFlags &= param->u.set_flags_sta.flags_and;		DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " dwFlags = %x \n",		            (UINT)pMgmt->sNodeDBTable[uNodeIndex].dwFlags);	}	else {    	    return -ENOENT;	}		return 0;}/* * Description: *      set generic element (wpa ie) * * Parameters: *  In: *      pDevice   -  *      param     -  *  Out: * * Return Value:  * */ static int hostap_set_generic_element(PSDevice pDevice,					struct viawget_hostapd_param *param){    PSMgmtObject    pMgmt = &(pDevice->sMgmtObj);        memcpy( pMgmt->abyWPAIE,             param->u.generic_elem.data,            param->u.generic_elem.len                        );               pMgmt->wWPAIELen = 	param->u.generic_elem.len;        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"pMgmt->wWPAIELen = %d\n",  pMgmt->wWPAIELen);    // disable wpa    if (pMgmt->wWPAIELen == 0) {        pMgmt->eAuthenMode = WMAC_AUTH_OPEN;		DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " No WPAIE, Disable WPA \n");    } else  {        // enable wpa        if ((pMgmt->abyWPAIE[0] == WLAN_EID_RSN_WPA) ||             (pMgmt->abyWPAIE[0] == WLAN_EID_RSN)) {              pMgmt->eAuthenMode = WMAC_AUTH_WPANONE;               DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Set WPAIE enable WPA\n");        } else             return -EINVAL;		                }    		return 0;}

⌨️ 快捷键说明

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