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

📄 80211mgr.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: 80211mgr.c * * Purpose: Handles the managment frame parsing functions * * Author: Lyndon Chen * * Date: May 8, 2002 * * Functions: *      vMgrEncodeBeacon - Encode the Beacon frame *      vMgrDecodeBeacon - Decode the Beacon frame *      vMgrEncodeIBSSATIM - Encode the IBSS ATIM frame *      vMgrDecodeIBSSATIM - Decode the IBSS ATIM frame *      vMgrEncodeDisassociation - Encode the Disassociation frame *      vMgrDecodeDisassociation - Decode the Disassociation frame *      vMgrEncodeAssocRequest - Encode the Association request frame *      vMgrDecodeAssocRequest - Decode the Association request frame *      vMgrEncodeAssocResponse - Encode the Association response frame *      vMgrDecodeAssocResponse - Decode the Association response frame *      vMgrEncodeReAssocRequest - Encode the ReAssociation request frame *      vMgrDecodeReAssocRequest - Decode the ReAssociation request frame *      vMgrEncodeProbeRequest - Encode the Probe request frame *      vMgrDecodeProbeRequest - Decode the Probe request frame *      vMgrEncodeProbeResponse - Encode the Probe response frame *      vMgrDecodeProbeResponse - Decode the Probe response frame *      vMgrEncodeAuthen - Encode the Authentication frame *      vMgrDecodeAuthen - Decode the Authentication frame *      vMgrEncodeDeauthen - Encode the DeAuthentication frame *      vMgrDecodeDeauthen - Decode the DeAuthentication frame *      vMgrEncodeReassocResponse - Encode the Reassociation response frame *      vMgrDecodeReassocResponse - Decode the Reassociation response frame * * Revision History: * */#if !defined(__TMACRO_H__)#include "tmacro.h"#endif#if !defined(__TETHER_H__)#include "tether.h"#endif#if !defined(__80211MGR_H__)#include "80211mgr.h"#endif#if !defined(__80211HDR_H__)#include "80211hdr.h"#endif#if !defined(__DEVICE_H__)#include "device.h"#endif#if !defined(__WPA_H__)#include "wpa.h"#endif/*---------------------  Static Definitions -------------------------*//*---------------------  Static Classes  ----------------------------*//*---------------------  Static Variables  --------------------------*/static int          msglevel                =MSG_LEVEL_INFO;//static int          msglevel                =MSG_LEVEL_DEBUG;/*---------------------  Static Functions  --------------------------*//*---------------------  Export Variables  --------------------------*//*---------------------  Export Functions  --------------------------*//*+ *  * Routine Description: * Encode Beacon frame body offset * * Return Value: *    None. *-*/        VOIDvMgrEncodeBeacon(    IN  PWLAN_FR_BEACON  pFrame     ){    pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;    // Fixed Fields    pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                    + WLAN_BEACON_OFF_TS);    pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                        + WLAN_BEACON_OFF_BCN_INT);    pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                 + WLAN_BEACON_OFF_CAPINFO);                                    pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_BEACON_OFF_SSID;    return;}/*+ *  * Routine Description: * Decode Beacon frame body offset * * * Return Value: *    None. *-*/        VOIDvMgrDecodeBeacon(    IN  PWLAN_FR_BEACON  pFrame     ){    PWLAN_IE        pItem;    pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;    // Fixed Fields    pFrame->pqwTimestamp = (PQWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                    + WLAN_BEACON_OFF_TS);    pFrame->pwBeaconInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                        + WLAN_BEACON_OFF_BCN_INT);    pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                + WLAN_BEACON_OFF_CAPINFO);    // Information elements    pItem = (PWLAN_IE)((PBYTE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3)))                        + WLAN_BEACON_OFF_SSID);    while( ((PBYTE)pItem) < (pFrame->pBuf + pFrame->len) ){                switch (pItem->byElementID) {            case WLAN_EID_SSID:                if (pFrame->pSSID == NULL)                     pFrame->pSSID = (PWLAN_IE_SSID)pItem;                break;            case WLAN_EID_SUPP_RATES:                if (pFrame->pSuppRates == NULL)                    pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;                break;            case WLAN_EID_FH_PARMS:                //pFrame->pFHParms = (PWLAN_IE_FH_PARMS)pItem;                break;            case WLAN_EID_DS_PARMS:                if (pFrame->pDSParms == NULL)                                pFrame->pDSParms = (PWLAN_IE_DS_PARMS)pItem;                break;            case WLAN_EID_CF_PARMS:                if (pFrame->pCFParms == NULL)                    pFrame->pCFParms = (PWLAN_IE_CF_PARMS)pItem;                break;            case WLAN_EID_IBSS_PARMS:                if (pFrame->pIBSSParms == NULL)                    pFrame->pIBSSParms = (PWLAN_IE_IBSS_PARMS)pItem;                break;            case WLAN_EID_TIM:                if (pFrame->pTIM == NULL)                     pFrame->pTIM = (PWLAN_IE_TIM)pItem;                break;                            case WLAN_EID_RSN:                if (pFrame->pRSN == NULL) {                    pFrame->pRSN = (PWLAN_IE_RSN)pItem;                }                break;            case WLAN_EID_RSN_WPA:                if (pFrame->pRSNWPA == NULL) {                    if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == TRUE)                        pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;                }                break;                                            case WLAN_EID_ERP:                if (pFrame->pERP == NULL)                    pFrame->pERP = (PWLAN_IE_ERP)pItem;                break;            case WLAN_EID_EXTSUPP_RATES:                if (pFrame->pExtSuppRates == NULL)                    pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;                break;                            case WLAN_EID_COUNTRY:      //7                if (pFrame->pIE_Country == NULL)                    pFrame->pIE_Country = (PWLAN_IE_COUNTRY)pItem;                break;                            case WLAN_EID_PWR_CONSTRAINT:   //32                if (pFrame->pIE_PowerConstraint == NULL)                    pFrame->pIE_PowerConstraint = (PWLAN_IE_PW_CONST)pItem;                break;                            case WLAN_EID_CH_SWITCH:    //37                if (pFrame->pIE_CHSW == NULL)                    pFrame->pIE_CHSW = (PWLAN_IE_CH_SW)pItem;                break;                            case WLAN_EID_QUIET:        //40                 if (pFrame->pIE_Quiet == NULL)                    pFrame->pIE_Quiet = (PWLAN_IE_QUIET)pItem;                break;                                                   case WLAN_EID_IBSS_DFS:                if (pFrame->pIE_IBSSDFS == NULL)                    pFrame->pIE_IBSSDFS = (PWLAN_IE_IBSS_DFS)pItem;                break;                            default:                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in beacon decode.\n", pItem->byElementID);                break;                        }        pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);    }        return;}/*+ *  * Routine Description: *  Encode IBSS ATIM * * * Return Value: *    None. *-*/        VOIDvMgrEncodeIBSSATIM(    IN  PWLAN_FR_IBSSATIM   pFrame    ){    pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;    pFrame->len = WLAN_HDR_ADDR3_LEN;    return;}/*+ *  * Routine Description: *  Decode IBSS ATIM * * * Return Value: *    None. *-*/VOIDvMgrDecodeIBSSATIM(    IN  PWLAN_FR_IBSSATIM   pFrame    ){    pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;    return;}/*+ *  * Routine Description: *  Encode Disassociation * * * Return Value: *    None. *-*/VOIDvMgrEncodeDisassociation(    IN  PWLAN_FR_DISASSOC  pFrame    ){    pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;    // Fixed Fields     pFrame->pwReason = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                + WLAN_DISASSOC_OFF_REASON);    pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_DISASSOC_OFF_REASON + sizeof(*(pFrame->pwReason));    return;}/*+ *  * Routine Description: *  Decode Disassociation * * * Return Value: *    None. *-*/VOIDvMgrDecodeDisassociation(    IN  PWLAN_FR_DISASSOC  pFrame    ){    pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;        // Fixed Fields     pFrame->pwReason = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                               + WLAN_DISASSOC_OFF_REASON);    return;}/*+ *  * Routine Description: *  Encode Association Request * * * Return Value: *    None. *-*/VOIDvMgrEncodeAssocRequest(    IN  PWLAN_FR_ASSOCREQ  pFrame    ){    pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;    // Fixed Fields     pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                + WLAN_ASSOCREQ_OFF_CAP_INFO);    pFrame->pwListenInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                       + WLAN_ASSOCREQ_OFF_LISTEN_INT);    pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCREQ_OFF_LISTEN_INT + sizeof(*(pFrame->pwListenInterval));    return;}/*+ *  * Routine Description: (AP) *  Decode Association Request * * * Return Value: *    None. *-*/VOID vMgrDecodeAssocRequest(    IN  PWLAN_FR_ASSOCREQ  pFrame    ){    PWLAN_IE   pItem;     pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;    // Fixed Fields     pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                + WLAN_ASSOCREQ_OFF_CAP_INFO);    pFrame->pwListenInterval = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                + WLAN_ASSOCREQ_OFF_LISTEN_INT);    // Information elements    pItem = (PWLAN_IE)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                            + WLAN_ASSOCREQ_OFF_SSID);                                while (((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) {        switch (pItem->byElementID){            case WLAN_EID_SSID:                if (pFrame->pSSID == NULL)                    pFrame->pSSID = (PWLAN_IE_SSID)pItem;                break;            case WLAN_EID_SUPP_RATES:                if (pFrame->pSuppRates == NULL)                    pFrame->pSuppRates = (PWLAN_IE_SUPP_RATES)pItem;                break;                            case WLAN_EID_RSN:                if (pFrame->pRSN == NULL) {                    pFrame->pRSN = (PWLAN_IE_RSN)pItem;                }                break;            case WLAN_EID_RSN_WPA:                if (pFrame->pRSNWPA == NULL) {                    if (WPAb_Is_RSN((PWLAN_IE_RSN_EXT)pItem) == TRUE)                        pFrame->pRSNWPA = (PWLAN_IE_RSN_EXT)pItem;                }                break;                            case WLAN_EID_EXTSUPP_RATES:                if (pFrame->pExtSuppRates == NULL)                                pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;                break;                                            default:                DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Unrecognized EID=%dd in assocreq decode.\n",                        pItem->byElementID);                break;        }        pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);    }    return;}/*+ *  * Routine Description: (AP) *  Encode Association Response  * * * Return Value: *    None. *-*/VOIDvMgrEncodeAssocResponse(    IN  PWLAN_FR_ASSOCRESP  pFrame     ){    pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;        // Fixed Fields     pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                + WLAN_ASSOCRESP_OFF_CAP_INFO);    pFrame->pwStatus = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                               + WLAN_ASSOCRESP_OFF_STATUS);    pFrame->pwAid = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                            + WLAN_ASSOCRESP_OFF_AID);    pFrame->len = WLAN_HDR_ADDR3_LEN + WLAN_ASSOCRESP_OFF_AID                  + sizeof(*(pFrame->pwAid));    return;}/*+ *  * Routine Description:  *  Decode Association Response  * * * Return Value: *    None. *-*/VOIDvMgrDecodeAssocResponse(    IN PWLAN_FR_ASSOCRESP  pFrame     ){    PWLAN_IE   pItem;        pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf;    // Fixed Fields     pFrame->pwCapInfo = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                                + WLAN_ASSOCRESP_OFF_CAP_INFO);    pFrame->pwStatus = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                               + WLAN_ASSOCRESP_OFF_STATUS);    pFrame->pwAid = (PWORD)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                            + WLAN_ASSOCRESP_OFF_AID);    // Information elements     pFrame->pSuppRates  = (PWLAN_IE_SUPP_RATES)(WLAN_HDR_A3_DATA_PTR(&(pFrame->pHdr->sA3))                           + WLAN_ASSOCRESP_OFF_SUPP_RATES);                               pItem = (PWLAN_IE)(pFrame->pSuppRates);    pItem = (PWLAN_IE)(((PBYTE)pItem) + 2 + pItem->len);    if ((((PBYTE)pItem) < (pFrame->pBuf + pFrame->len)) && (pItem->byElementID == WLAN_EID_EXTSUPP_RATES)) {        pFrame->pExtSuppRates = (PWLAN_IE_SUPP_RATES)pItem;        DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "pFrame->pExtSuppRates=[%p].\n", pItem);    }    else {        pFrame->pExtSuppRates = NULL;    }            return;}/*+ *  * Routine Description:  *  Encode Reassociation Request * *

⌨️ 快捷键说明

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