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

📄 ixethacccodeletswbridgewifi.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 C
📖 第 1 页 / 共 2 页
字号:
/** * @file IxEthAccCodeletSwBridgeWiFi.c * * @date 25 August 2004 * * @brief This file contains the implementation of the Ethernet Access Codelet. * * This file implements a simple bridge between two Ethernet ports with a  * 802.3 <=> 802.11 frame header conversion set up at NPE level. * *  * @par * IXP400 SW Release version 2.1 *  * -- Copyright Notice -- *  * @par * Copyright (c) 2001-2005, Intel Corporation. * All rights reserved. *  * @par * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the Intel Corporation nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. *  *  * @par * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``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 THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *  *  * @par * -- End of Copyright Notice --*//* * Put the system defined include files required. *//* * Put the user defined include files required. */#include "IxEthAcc.h"#include "IxEthDB.h"#include "IxOsal.h"#include "IxEthAccCodelet.h"#include "IxEthAccCodelet_p.h"/* prototypes */void ixEthAccCodeletWiFiBridgeRxCB(UINT32 cbTag, IX_OSAL_MBUF* mBufPtr, UINT32 reserved);IX_STATUS ixEthAccCodeletSwWiFiBridgeStart(IxEthAccPortId wifiPortId, IxEthAccPortId bridgedPortId);UINT32 ixEthAccCodeletWiFiAddressCompare(UINT8 *mac1, UINT8 *mac2);PRIVATE IxEthDBMacAddr ixEthAccCodeletWiFiStaMacAddress   = { {0x00, 0x00, 0x11, 0x22, 0x33, 0x44} };PRIVATE IxEthDBMacAddr ixEthAccCodeletWiFiApMacAddress    = { {0x00, 0x00, 0xA1, 0xA2, 0xA3, 0xA4} };PRIVATE IxEthDBMacAddr ixEthAccCodeletWiFiGwMacAddress    = { {0x00, 0x00, 0xF9, 0xF8, 0xF7, 0xF6} };PRIVATE IxEthDBMacAddr ixEthAccCodeletWiFiBSSIDMacAddress = { {0x00, 0xFF, 0xFE, 0xFD, 0xFC, 0xFB} };PRIVATE UINT16 ixEthAccCodeletWiFiDurationID   = 0x1234;PRIVATE UINT16 ixEthAccCodeletWiFiFrameControl = 0xABCD;PRIVATE IxEthDBMacAddr ixEthAccCodeletWiFiRecStaAddress   = { {0x00, 0x00, 0x55, 0x66, 0x77, 0x88} };PRIVATE IxEthDBMacAddr ixEthAccCodeletWiFiRecApAddress    = { {0x00, 0x00, 0xB1, 0xB2, 0xB3, 0xB4} };IxEthDBWiFiRecData  ixEthAccCodeletWiFiRecStaData;IxEthDBWiFiRecData  ixEthAccCodeletWiFiRecApData;extern const char *mac2string(const unsigned char *mac);/* * Function definition: ixEthAccCodeletSwBridgeWiFiStart() * * Configure WiFi header conversion and Start bridge datapath */IX_STATUS ixEthAccCodeletSwBridgeWiFiStart(IxEthAccPortId wifiPortId, 					       IxEthAccPortId bridgedPortId){    IxEthDBFeature featureSet = 0;    ixEthAccCodeletWiFiRecStaData.recType = IX_ETH_DB_WIFI_AP_TO_STA;    ixEthAccCodeletWiFiRecStaData.vlanTagFlag = IX_ETH_DB_WIFI_VLAN_NOTAG;    ixEthAccCodeletWiFiRecStaData.padLength = IX_ETH_DB_WIFI_MIN_PAD_SIZE;     ixEthAccCodeletWiFiRecStaData.logicalPortID = 0x0E;     memset(ixEthAccCodeletWiFiRecStaData.gatewayMacAddr, 0, IX_IEEE803_MAC_ADDRESS_SIZE);    memcpy(ixEthAccCodeletWiFiRecStaData.bssid, &ixEthAccCodeletWiFiBSSIDMacAddress, IX_IEEE803_MAC_ADDRESS_SIZE);    ixEthAccCodeletWiFiRecApData.recType = IX_ETH_DB_WIFI_AP_TO_AP;    ixEthAccCodeletWiFiRecApData.vlanTagFlag = IX_ETH_DB_WIFI_VLAN_NOTAG;     ixEthAccCodeletWiFiRecApData.padLength = IX_ETH_DB_WIFI_MIN_PAD_SIZE;     ixEthAccCodeletWiFiRecApData.logicalPortID = 0x0E;     memcpy(ixEthAccCodeletWiFiRecApData.gatewayMacAddr, &ixEthAccCodeletWiFiGwMacAddress, IX_IEEE803_MAC_ADDRESS_SIZE);    memcpy(ixEthAccCodeletWiFiRecApData.bssid, &ixEthAccCodeletWiFiBSSIDMacAddress, IX_IEEE803_MAC_ADDRESS_SIZE);    if (wifiPortId == bridgedPortId)    {	printf("SwBridgeWiFi: Cannot configure a Bridge Operation between port %u and port %u (ports must be different)\n",	       wifiPortId,                bridgedPortId);	return (IX_FAIL);    }    /* Perform basic port configuration (actual callbacks will be registered later,      * in ixEthAccCodeletSwWiFiBridgeStart) */    if ( ixEthAccCodeletPortConfigure(wifiPortId,                                      ixEthAccCodeletBridgeRxCB,                                      NULL,                                      ixEthAccCodeletBridgeTxCB,                                      0 /* no callback tag */) != IX_SUCCESS)    {        printf("SwBridgeWiFi: Failed to configure Port %u\n",               wifiPortId);        return (IX_FAIL);    }    if ( ixEthAccCodeletPortConfigure(bridgedPortId,                                      ixEthAccCodeletBridgeRxCB,                                      NULL,                                      ixEthAccCodeletBridgeTxCB,                                      0 /* no callback tag */) != IX_SUCCESS)    {        printf("SwBridgeWiFi: Failed to configure Port %u\n",               bridgedPortId);        return (IX_FAIL);    }    /* Enable the Port in EthDB in order to configure and download the     * WiFi Database      */     if (ixEthDBPortEnable(wifiPortId) != IX_ETH_DB_SUCCESS)    {        printf("SwBridgeWiFi: Cannot enable port %u\n", wifiPortId);        return (IX_FAIL);    }    if (ixEthDBPortEnable(bridgedPortId) != IX_ETH_DB_SUCCESS)    {        printf("SwBridgeWiFi: Cannot enable port %u\n", bridgedPortId);        return (IX_FAIL);    }    /* check feature */    if (IX_ETH_DB_SUCCESS != ixEthDBFeatureCapabilityGet(wifiPortId, &featureSet))    {        printf("SwBridgeWiFi: Could not get the feature capabilities of the selected WiFi port (%d)\n", wifiPortId);        return IX_FAIL;    }    if ((featureSet & IX_ETH_DB_WIFI_HEADER_CONVERSION) == 0)    {        printf("SwBridgeWiFi: Selected WiFi port (%d) does not have an NPE image capable of 802.11 header conversion\n", wifiPortId);        return IX_FAIL;    }    featureSet = 0;    if (IX_ETH_DB_SUCCESS != ixEthDBFeatureCapabilityGet(bridgedPortId, &featureSet))    {        printf("SwBridgeWiFi: Could not get the feature capabilities of the selected bridge port (%d)\n", bridgedPortId);        return IX_FAIL;    }    if ((featureSet & IX_ETH_DB_WIFI_HEADER_CONVERSION) != 0)    {        printf("SwBridgeWiFi: Selected bridge port (%d) should not have an NPE image capable of 802.11 header conversion\n", bridgedPortId);        return IX_FAIL;    }    /* enable feature */    if (IX_ETH_DB_SUCCESS != ixEthDBFeatureEnable(wifiPortId, IX_ETH_DB_WIFI_HEADER_CONVERSION, TRUE))    {        printf("SwBridgeWiFi: Failed to enable the WiFi header conversion feature, exiting\n");        return IX_FAIL;    }    /* set the conversion table */    if (IX_ETH_DB_SUCCESS != ixEthDBWiFiBSSIDSet(wifiPortId, &ixEthAccCodeletWiFiBSSIDMacAddress))    {        printf("SwBridgeWiFi: Failed to set the BSSID value, exiting\n");        return IX_FAIL;    }    if (IX_ETH_DB_SUCCESS != ixEthDBWiFiStationEntryAdd(wifiPortId, &ixEthAccCodeletWiFiStaMacAddress))    {        printf("SwBridgeWiFi: Failed to add Station address, exiting\n");        return IX_FAIL;    }    if (IX_ETH_DB_SUCCESS != ixEthDBWiFiAccessPointEntryAdd(wifiPortId,         &ixEthAccCodeletWiFiApMacAddress,         &ixEthAccCodeletWiFiGwMacAddress))    {        printf("SwBridgeWiFi: Failed to add AccessPoint address, exiting\n");        return IX_FAIL;    }    if (IX_ETH_DB_SUCCESS != ixEthDBWiFiRecordEntryAdd(wifiPortId,         &ixEthAccCodeletWiFiRecStaAddress,         &ixEthAccCodeletWiFiRecStaData))    {        printf("SwBridgeWiFi: Failed to add Station address, exiting\n");        return IX_FAIL;    }    if (IX_ETH_DB_SUCCESS != ixEthDBWiFiRecordEntryAdd(wifiPortId,         &ixEthAccCodeletWiFiRecApAddress,         &ixEthAccCodeletWiFiRecApData))

⌨️ 快捷键说明

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