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

📄 ixethacccodeletswbridgewifi.c

📁 有关ARM开发板上的IXP400网络驱动程序的源码以。
💻 C
📖 第 1 页 / 共 2 页
字号:
    {        printf("SwBridgeWiFi: Failed to add AccessPoint address, exiting\n");        return IX_FAIL;    }    if (IX_ETH_DB_SUCCESS != ixEthDBWiFiConversionTableDownload(wifiPortId))    {        printf("SwBridgeWiFi: Failed to download WiFi frame header conversion table, exiting\n");        return IX_FAIL;    }    if (IX_ETH_DB_SUCCESS != ixEthDBWiFiFrameControlSet(wifiPortId, ixEthAccCodeletWiFiFrameControl))    {        printf("SwBridgeWiFi: Failed to set the FrameControl value, exiting\n");        return IX_FAIL;    }    if (IX_ETH_DB_SUCCESS != ixEthDBWiFiDurationIDSet(wifiPortId, ixEthAccCodeletWiFiDurationID))    {        printf("SwBridgeWiFi: Failed to set the Duration/ID value, exiting\n");        return IX_FAIL;    }    /* display user instructions */    printf("\n");    printf("-------------------------------------------------------------------------------\n");    printf("| Sending packets to port %d using [%s] as the destination MAC  |\n", wifiPortId, mac2string(ixEthAccCodeletWiFiRecStaAddress.macAddress));    printf("| will convert their headers to 802.11 STA->AP frames. Capture the frames on  |\n");    printf("| port %d with your test equipment to view the conversion result.              |\n", bridgedPortId);    printf("|                                                                             |\n");    printf("| Sending packets to port %d using [%s] as the destination MAC  |\n", wifiPortId, mac2string(ixEthAccCodeletWiFiRecApAddress.macAddress));    printf("| will convert their headers to 802.11 AP->AP frames. The conversion uses     |\n");    printf("| [%s] as gateway MAC address. Capture the frames on port %d    |\n", mac2string(ixEthAccCodeletWiFiGwMacAddress.macAddress), bridgedPortId);    printf("| with your test equipment to view the conversion result.                     |\n");    printf("|                                                                             |\n");    printf("| Sending 802.11 frames generated as above to port %d, when bridged to port %d, |\n", bridgedPortId, wifiPortId);    printf("| will convert them to 802.3 frames. Observe the output on port %d.            |\n", wifiPortId);    printf("|                                                                             |\n");    printf("| This test is using : [%s] as BSSID                           |\n", mac2string(ixEthAccCodeletWiFiBSSIDMacAddress.macAddress));    printf("|                      0x%4x as FrameControl                                 |\n", ixEthAccCodeletWiFiFrameControl);    printf("|                      0x%4x as Duration/ID                                  |\n", ixEthAccCodeletWiFiDurationID);    printf("-------------------------------------------------------------------------------\n");            return ixEthAccCodeletSwWiFiBridgeStart(wifiPortId, bridgedPortId);}/* * Function definition: ixEthAccCodeletSwBridgeStart() * * Start bridge datapath */IX_STATUS ixEthAccCodeletSwWiFiBridgeStart(IxEthAccPortId wifiPortId, 				       IxEthAccPortId bridgedPortId){    UINT32 firstPortCbTag = wifiPortId | (bridgedPortId << 16);    UINT32 secondPortCbTag = bridgedPortId | (wifiPortId << 16);    /* Configure and register the traffic callbacks for both ports */    if ( ixEthAccCodeletPortConfigure(wifiPortId, 				      ixEthAccCodeletBridgeRxCB, 				      (IxEthAccPortMultiBufferRxCallback) NULL,				      ixEthAccCodeletBridgeTxCB,                                      firstPortCbTag) != IX_SUCCESS)    {	printf("SwBridge: Failed to configure Port %u\n", wifiPortId);	return (IX_FAIL);    }    if ( ixEthAccCodeletPortConfigure(bridgedPortId, 				      ixEthAccCodeletWiFiBridgeRxCB, 				      (IxEthAccPortMultiBufferRxCallback) NULL,				      ixEthAccCodeletBridgeTxCB,                                      secondPortCbTag) != IX_SUCCESS)    {	printf("SwBridge: Failed to configure Port %u\n", bridgedPortId);	return (IX_FAIL);    }    /* Enable the traffic over both ports */    if ( ixEthAccPortEnable(wifiPortId) != IX_SUCCESS)    {	printf("SwBridge: Failed to enable Port %u\n", wifiPortId);	return (IX_FAIL);    }    if ( ixEthAccPortEnable(bridgedPortId) != IX_SUCCESS)    {	printf("SwBridge: Failed to enable Port %u\n", bridgedPortId);	return (IX_FAIL);    }    return (IX_SUCCESS);}UINT32 ixEthAccCodeletWiFiAddressCompare(UINT8 *mac1, UINT8 *mac2){    UINT32 local_index;    for (local_index = 0 ; local_index < IX_IEEE803_MAC_ADDRESS_SIZE ; local_index++)    {        if (mac1[local_index] > mac2[local_index])        {            return 1;        }        else if (mac1[local_index] < mac2[local_index])        {            return -1;        }    }    return 0;}/** * Function definition: ixEthAccCodeletWiFiBridgeRxCB() * * Receive callback for Bridge Operation. Received frames are retransmitted * on the port loaded with the WiFi header conversion image, and 802.11 * frames are configured (by setting the link_prot flag) to be converted * into 802.3 format. */void ixEthAccCodeletWiFiBridgeRxCB(UINT32 cbTag, 			       IX_OSAL_MBUF* mBufPtr, 			       UINT32 reserved){    /* Transmit the buffer on the other port */    UINT16 frameControl;    UINT16 durationID;    UINT16 logicalPortID;    UINT8 *firstAddr;    UINT16 linkProt = 0;    IxEthAccPortId wifiPortId    = cbTag >> 16;    IxEthAccPortId bridgedPortId = cbTag & 0xFFFF;    ixEthAccCodeletStats[bridgedPortId].rxCount++;    /* 802.11 frames generated by the codelet can be detected by     * inspecting the Frame Control, Duration/ID and first 802.11 address */    IX_OSAL_CACHE_INVALIDATE(IX_OSAL_MBUF_MDATA(mBufPtr), IX_OSAL_MBUF_MLEN(mBufPtr));    frameControl  = IX_OSAL_SWAP_BE_SHARED_SHORT(* ((UINT16 *) IX_OSAL_MBUF_MDATA(mBufPtr)));    durationID    = IX_OSAL_SWAP_BE_SHARED_SHORT(*(((UINT16 *) IX_OSAL_MBUF_MDATA(mBufPtr)) + 2));    firstAddr     = ((UINT8 *) IX_OSAL_MBUF_MDATA(mBufPtr)) + 4;    logicalPortID = (UINT16) IX_ETHACC_NE_DESTPORTID(mBufPtr);    if ((frameControl == ixEthAccCodeletWiFiFrameControl) && (durationID == ixEthAccCodeletWiFiDurationID) && (logicalPortID == 0x0E))    {        if (ixEthAccCodeletWiFiAddressCompare(firstAddr, ixEthAccCodeletWiFiGwMacAddress.macAddress) == 0)        {            /* AP to AP frame, set link_prot to 11b << 4*/            linkProt = IX_ETHACC_RX_APTYPE;        }        else if (ixEthAccCodeletWiFiAddressCompare(firstAddr, ixEthAccCodeletWiFiRecStaAddress.macAddress) == 0)        {            /* AP to STA frame, set link_prot to 10b << 4 */            linkProt = IX_ETHACC_RX_STATYPE;        }        IX_ETHACC_NE_FLAGS(mBufPtr) &= ~IX_ETHACC_NE_LINKMASK;        IX_ETHACC_NE_FLAGS(mBufPtr) |= linkProt;    }    if(ixEthAccPortTxFrameSubmit(wifiPortId, mBufPtr, IX_ETH_ACC_TX_DEFAULT_PRIORITY) != IX_ETH_ACC_SUCCESS)    {        ixOsalLog(IX_OSAL_LOG_LVL_ERROR, IX_OSAL_LOG_DEV_STDOUT,	    "Tx Buffer submission failed on port 1\n", 0, 0, 0, 0, 0, 0);    }}/* * Function definition: ixEthAccCodeletSwBridgeWiFiStop() * * Unconfigure WiFi and Stop bridge datapath */IX_STATUS ixEthAccCodeletSwBridgeWiFiStop(IxEthAccPortId firstPortId,                                           IxEthAccPortId secondPortId){    /* Stop the data bridge */    if (ixEthAccCodeletSwBridgeStop(firstPortId, secondPortId)        != IX_SUCCESS)    {        printf("SwBridgeWiFi: Failed to unconfigure the bridge ports\n");        return (IX_FAIL);    }    /* Enable the EthDB ports to clear the firewall configuration */    if ((ixEthDBPortEnable(firstPortId)) != IX_ETH_DB_SUCCESS)    {        printf("Cannot enable port %u\n", firstPortId);        return (IX_FAIL);    }    /* clears the WiFi address table */    if (IX_ETH_DB_SUCCESS != ixEthDBDatabaseClear(firstPortId, IX_ETH_DB_WIFI_RECORD))    {	printf("Failed to clear the WiFi database\n");	return IX_FAIL;    }    if (IX_ETH_DB_SUCCESS != ixEthDBFeatureEnable(firstPortId, IX_ETH_DB_WIFI_HEADER_CONVERSION, FALSE))    {        printf("Failed to disable the WiFi header conversion feature\n");        return IX_FAIL;    }    /* disable the ethDB port */    if ((ixEthDBPortDisable(firstPortId)) != IX_ETH_DB_SUCCESS)    {        printf("SwBridgeFirewall: Cannot disable port %u\n", firstPortId);        return (IX_FAIL);    }    if ((ixEthDBPortDisable(secondPortId)) != IX_ETH_DB_SUCCESS)    {        printf("SwBridgeFirewall: Cannot disable port %u\n", secondPortId);        return (IX_FAIL);    }    return IX_SUCCESS;} 

⌨️ 快捷键说明

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