|
diff --git a/core/rtw_br_ext.c b/core/rtw_br_ext.c |
|
index 9a0effd..28640d4 100755 |
|
--- a/core/rtw_br_ext.c |
|
+++ b/core/rtw_br_ext.c |
|
@@ -17,7 +17,7 @@ |
|
#ifdef __KERNEL__ |
|
#include <linux/if_arp.h> |
|
#include <net/ip.h> |
|
- #include <net/ipx.h> |
|
+ // #include <net/ipx.h> |
|
#include <linux/atalk.h> |
|
#include <linux/udp.h> |
|
#include <linux/if_pppox.h> |
|
@@ -889,226 +889,226 @@ int nat25_db_handle(_adapter *priv, struct sk_buff *skb, int method) |
|
} |
|
} |
|
|
|
- /*---------------------------------------------------*/ |
|
- /* Handle IPX and Apple Talk frame */ |
|
- /*---------------------------------------------------*/ |
|
- else if ((protocol == __constant_htons(ETH_P_IPX)) || |
|
- (protocol == __constant_htons(ETH_P_ATALK)) || |
|
- (protocol == __constant_htons(ETH_P_AARP))) { |
|
- unsigned char ipx_header[2] = {0xFF, 0xFF}; |
|
- struct ipxhdr *ipx = NULL; |
|
- struct elapaarp *ea = NULL; |
|
- struct ddpehdr *ddp = NULL; |
|
- unsigned char *framePtr = skb->data + ETH_HLEN; |
|
- |
|
- if (protocol == __constant_htons(ETH_P_IPX)) { |
|
- RTW_INFO("NAT25: Protocol=IPX (Ethernet II)\n"); |
|
- ipx = (struct ipxhdr *)framePtr; |
|
- } else { /* if(protocol <= __constant_htons(ETH_FRAME_LEN)) */ |
|
- if (!memcmp(ipx_header, framePtr, 2)) { |
|
- RTW_INFO("NAT25: Protocol=IPX (Ethernet 802.3)\n"); |
|
- ipx = (struct ipxhdr *)framePtr; |
|
- } else { |
|
- unsigned char ipx_8022_type = 0xE0; |
|
- unsigned char snap_8022_type = 0xAA; |
|
- |
|
- if (*framePtr == snap_8022_type) { |
|
- unsigned char ipx_snap_id[5] = {0x0, 0x0, 0x0, 0x81, 0x37}; /* IPX SNAP ID */ |
|
- unsigned char aarp_snap_id[5] = {0x00, 0x00, 0x00, 0x80, 0xF3}; /* Apple Talk AARP SNAP ID */ |
|
- unsigned char ddp_snap_id[5] = {0x08, 0x00, 0x07, 0x80, 0x9B}; /* Apple Talk DDP SNAP ID */ |
|
- |
|
- framePtr += 3; /* eliminate the 802.2 header */ |
|
- |
|
- if (!memcmp(ipx_snap_id, framePtr, 5)) { |
|
- framePtr += 5; /* eliminate the SNAP header */ |
|
- |
|
- RTW_INFO("NAT25: Protocol=IPX (Ethernet SNAP)\n"); |
|
- ipx = (struct ipxhdr *)framePtr; |
|
- } else if (!memcmp(aarp_snap_id, framePtr, 5)) { |
|
- framePtr += 5; /* eliminate the SNAP header */ |
|
- |
|
- ea = (struct elapaarp *)framePtr; |
|
- } else if (!memcmp(ddp_snap_id, framePtr, 5)) { |
|
- framePtr += 5; /* eliminate the SNAP header */ |
|
- |
|
- ddp = (struct ddpehdr *)framePtr; |
|
- } else { |
|
- DEBUG_WARN("NAT25: Protocol=Ethernet SNAP %02x%02x%02x%02x%02x\n", framePtr[0], |
|
- framePtr[1], framePtr[2], framePtr[3], framePtr[4]); |
|
- return -1; |
|
- } |
|
- } else if (*framePtr == ipx_8022_type) { |
|
- framePtr += 3; /* eliminate the 802.2 header */ |
|
- |
|
- if (!memcmp(ipx_header, framePtr, 2)) { |
|
- RTW_INFO("NAT25: Protocol=IPX (Ethernet 802.2)\n"); |
|
- ipx = (struct ipxhdr *)framePtr; |
|
- } else |
|
- return -1; |
|
- } |
|
- } |
|
- } |
|
- |
|
- /* IPX */ |
|
- if (ipx != NULL) { |
|
- switch (method) { |
|
- case NAT25_CHECK: |
|
- if (!memcmp(skb->data + ETH_ALEN, ipx->ipx_source.node, ETH_ALEN)) { |
|
- RTW_INFO("NAT25: Check IPX skb_copy\n"); |
|
- return 0; |
|
- } |
|
- return -1; |
|
- |
|
- case NAT25_INSERT: { |
|
- RTW_INFO("NAT25: Insert IPX, Dest=%08x,%02x%02x%02x%02x%02x%02x,%04x Source=%08x,%02x%02x%02x%02x%02x%02x,%04x\n", |
|
- ipx->ipx_dest.net, |
|
- ipx->ipx_dest.node[0], |
|
- ipx->ipx_dest.node[1], |
|
- ipx->ipx_dest.node[2], |
|
- ipx->ipx_dest.node[3], |
|
- ipx->ipx_dest.node[4], |
|
- ipx->ipx_dest.node[5], |
|
- ipx->ipx_dest.sock, |
|
- ipx->ipx_source.net, |
|
- ipx->ipx_source.node[0], |
|
- ipx->ipx_source.node[1], |
|
- ipx->ipx_source.node[2], |
|
- ipx->ipx_source.node[3], |
|
- ipx->ipx_source.node[4], |
|
- ipx->ipx_source.node[5], |
|
- ipx->ipx_source.sock); |
|
- |
|
- if (!memcmp(skb->data + ETH_ALEN, ipx->ipx_source.node, ETH_ALEN)) { |
|
- RTW_INFO("NAT25: Use IPX Net, and Socket as network addr\n"); |
|
- |
|
- __nat25_generate_ipx_network_addr_with_socket(networkAddr, &ipx->ipx_source.net, &ipx->ipx_source.sock); |
|
- |
|
- /* change IPX source node addr to wlan STA address */ |
|
- memcpy(ipx->ipx_source.node, GET_MY_HWADDR(priv), ETH_ALEN); |
|
- } else |
|
- __nat25_generate_ipx_network_addr_with_node(networkAddr, &ipx->ipx_source.net, ipx->ipx_source.node); |
|
+ // /*---------------------------------------------------*/ |
|
+ // /* Handle IPX and Apple Talk frame */ |
|
+ // /*---------------------------------------------------*/ |
|
+ // else if ((protocol == __constant_htons(ETH_P_IPX)) || |
|
+ // (protocol == __constant_htons(ETH_P_ATALK)) || |
|
+ // (protocol == __constant_htons(ETH_P_AARP))) { |
|
+ // unsigned char ipx_header[2] = {0xFF, 0xFF}; |
|
+ // struct ipxhdr *ipx = NULL; |
|
+ // struct elapaarp *ea = NULL; |
|
+ // struct ddpehdr *ddp = NULL; |
|
+ // unsigned char *framePtr = skb->data + ETH_HLEN; |
|
+ |
|
+ // if (protocol == __constant_htons(ETH_P_IPX)) { |
|
+ // RTW_INFO("NAT25: Protocol=IPX (Ethernet II)\n"); |
|
+ // ipx = (struct ipxhdr *)framePtr; |
|
+ // } else { /* if(protocol <= __constant_htons(ETH_FRAME_LEN)) */ |
|
+ // if (!memcmp(ipx_header, framePtr, 2)) { |
|
+ // RTW_INFO("NAT25: Protocol=IPX (Ethernet 802.3)\n"); |
|
+ // ipx = (struct ipxhdr *)framePtr; |
|
+ // } else { |
|
+ // unsigned char ipx_8022_type = 0xE0; |
|
+ // unsigned char snap_8022_type = 0xAA; |
|
+ |
|
+ // if (*framePtr == snap_8022_type) { |
|
+ // unsigned char ipx_snap_id[5] = {0x0, 0x0, 0x0, 0x81, 0x37}; /* IPX SNAP ID */ |
|
+ // unsigned char aarp_snap_id[5] = {0x00, 0x00, 0x00, 0x80, 0xF3}; /* Apple Talk AARP SNAP ID */ |
|
+ // unsigned char ddp_snap_id[5] = {0x08, 0x00, 0x07, 0x80, 0x9B}; /* Apple Talk DDP SNAP ID */ |
|
+ |
|
+ // framePtr += 3; /* eliminate the 802.2 header */ |
|
+ |
|
+ // if (!memcmp(ipx_snap_id, framePtr, 5)) { |
|
+ // framePtr += 5; /* eliminate the SNAP header */ |
|
+ |
|
+ // RTW_INFO("NAT25: Protocol=IPX (Ethernet SNAP)\n"); |
|
+ // ipx = (struct ipxhdr *)framePtr; |
|
+ // } else if (!memcmp(aarp_snap_id, framePtr, 5)) { |
|
+ // framePtr += 5; /* eliminate the SNAP header */ |
|
+ |
|
+ // ea = (struct elapaarp *)framePtr; |
|
+ // } else if (!memcmp(ddp_snap_id, framePtr, 5)) { |
|
+ // framePtr += 5; /* eliminate the SNAP header */ |
|
+ |
|
+ // ddp = (struct ddpehdr *)framePtr; |
|
+ // } else { |
|
+ // DEBUG_WARN("NAT25: Protocol=Ethernet SNAP %02x%02x%02x%02x%02x\n", framePtr[0], |
|
+ // framePtr[1], framePtr[2], framePtr[3], framePtr[4]); |
|
+ // return -1; |
|
+ // } |
|
+ // } else if (*framePtr == ipx_8022_type) { |
|
+ // framePtr += 3; /* eliminate the 802.2 header */ |
|
+ |
|
+ // if (!memcmp(ipx_header, framePtr, 2)) { |
|
+ // RTW_INFO("NAT25: Protocol=IPX (Ethernet 802.2)\n"); |
|
+ // ipx = (struct ipxhdr *)framePtr; |
|
+ // } else |
|
+ // return -1; |
|
+ // } |
|
+ // } |
|
+ // } |
|
+ |
|
+ // /* IPX */ |
|
+ // if (ipx != NULL) { |
|
+ // switch (method) { |
|
+ // case NAT25_CHECK: |
|
+ // if (!memcmp(skb->data + ETH_ALEN, ipx->ipx_source.node, ETH_ALEN)) { |
|
+ // RTW_INFO("NAT25: Check IPX skb_copy\n"); |
|
+ // return 0; |
|
+ // } |
|
+ // return -1; |
|
+ |
|
+ // case NAT25_INSERT: { |
|
+ // RTW_INFO("NAT25: Insert IPX, Dest=%08x,%02x%02x%02x%02x%02x%02x,%04x Source=%08x,%02x%02x%02x%02x%02x%02x,%04x\n", |
|
+ // ipx->ipx_dest.net, |
|
+ // ipx->ipx_dest.node[0], |
|
+ // ipx->ipx_dest.node[1], |
|
+ // ipx->ipx_dest.node[2], |
|
+ // ipx->ipx_dest.node[3], |
|
+ // ipx->ipx_dest.node[4], |
|
+ // ipx->ipx_dest.node[5], |
|
+ // ipx->ipx_dest.sock, |
|
+ // ipx->ipx_source.net, |
|
+ // ipx->ipx_source.node[0], |
|
+ // ipx->ipx_source.node[1], |
|
+ // ipx->ipx_source.node[2], |
|
+ // ipx->ipx_source.node[3], |
|
+ // ipx->ipx_source.node[4], |
|
+ // ipx->ipx_source.node[5], |
|
+ // ipx->ipx_source.sock); |
|
+ |
|
+ // if (!memcmp(skb->data + ETH_ALEN, ipx->ipx_source.node, ETH_ALEN)) { |
|
+ // RTW_INFO("NAT25: Use IPX Net, and Socket as network addr\n"); |
|
+ |
|
+ // __nat25_generate_ipx_network_addr_with_socket(networkAddr, &ipx->ipx_source.net, &ipx->ipx_source.sock); |
|
+ |
|
+ // /* change IPX source node addr to wlan STA address */ |
|
+ // memcpy(ipx->ipx_source.node, GET_MY_HWADDR(priv), ETH_ALEN); |
|
+ // } else |
|
+ // __nat25_generate_ipx_network_addr_with_node(networkAddr, &ipx->ipx_source.net, ipx->ipx_source.node); |
|
+ |
|
+ // __nat25_db_network_insert(priv, skb->data + ETH_ALEN, networkAddr); |
|
+ |
|
+ // __nat25_db_print(priv); |
|
+ // } |
|
+ // return 0; |
|
+ |
|
+ // case NAT25_LOOKUP: { |
|
+ // if (!memcmp(GET_MY_HWADDR(priv), ipx->ipx_dest.node, ETH_ALEN)) { |
|
+ // RTW_INFO("NAT25: Lookup IPX, Modify Destination IPX Node addr\n"); |
|
+ |
|
+ // __nat25_generate_ipx_network_addr_with_socket(networkAddr, &ipx->ipx_dest.net, &ipx->ipx_dest.sock); |
|
+ |
|
+ // __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); |
|
+ |
|
+ // /* replace IPX destination node addr with Lookup destination MAC addr */ |
|
+ // memcpy(ipx->ipx_dest.node, skb->data, ETH_ALEN); |
|
+ // } else { |
|
+ // __nat25_generate_ipx_network_addr_with_node(networkAddr, &ipx->ipx_dest.net, ipx->ipx_dest.node); |
|
+ |
|
+ // __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); |
|
+ // } |
|
+ // } |
|
+ // return 0; |
|
+ |
|
+ // default: |
|
+ // return -1; |
|
+ // } |
|
+ // } |
|
+ |
|
+ // /* AARP */ |
|
+ // else if (ea != NULL) { |
|
+ // /* Sanity check fields. */ |
|
+ // if (ea->hw_len != ETH_ALEN || ea->pa_len != AARP_PA_ALEN) { |
|
+ // DEBUG_WARN("NAT25: Appletalk AARP Sanity check fail!\n"); |
|
+ // return -1; |
|
+ // } |
|
+ |
|
+ // switch (method) { |
|
+ // case NAT25_CHECK: |
|
+ // return 0; |
|
+ |
|
+ // case NAT25_INSERT: { |
|
+ // /* change to AARP source mac address to wlan STA address */ |
|
+ // memcpy(ea->hw_src, GET_MY_HWADDR(priv), ETH_ALEN); |
|
+ |
|
+ // RTW_INFO("NAT25: Insert AARP, Source=%d,%d Destination=%d,%d\n", |
|
+ // ea->pa_src_net, |
|
+ // ea->pa_src_node, |
|
+ // ea->pa_dst_net, |
|
+ // ea->pa_dst_node); |
|
+ |
|
+ // __nat25_generate_apple_network_addr(networkAddr, &ea->pa_src_net, &ea->pa_src_node); |
|
+ |
|
+ // __nat25_db_network_insert(priv, skb->data + ETH_ALEN, networkAddr); |
|
+ |
|
+ // __nat25_db_print(priv); |
|
+ // } |
|
+ // return 0; |
|
+ |
|
+ // case NAT25_LOOKUP: { |
|
+ // RTW_INFO("NAT25: Lookup AARP, Source=%d,%d Destination=%d,%d\n", |
|
+ // ea->pa_src_net, |
|
+ // ea->pa_src_node, |
|
+ // ea->pa_dst_net, |
|
+ // ea->pa_dst_node); |
|
+ |
|
+ // __nat25_generate_apple_network_addr(networkAddr, &ea->pa_dst_net, &ea->pa_dst_node); |
|
+ |
|
+ // __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); |
|
+ |
|
+ // /* change to AARP destination mac address to Lookup result */ |
|
+ // memcpy(ea->hw_dst, skb->data, ETH_ALEN); |
|
+ // } |
|
+ // return 0; |
|
+ |
|
+ // default: |
|
+ // return -1; |
|
+ // } |
|
+ // } |
|
+ |
|
+ // /* DDP */ |
|
+ // else if (ddp != NULL) { |
|
+ // switch (method) { |
|
+ // case NAT25_CHECK: |
|
+ // return -1; |
|
+ |
|
+ // case NAT25_INSERT: { |
|
+ // RTW_INFO("NAT25: Insert DDP, Source=%d,%d Destination=%d,%d\n", |
|
+ // ddp->deh_snet, |
|
+ // ddp->deh_snode, |
|
+ // ddp->deh_dnet, |
|
+ // ddp->deh_dnode); |
|
|
|
- __nat25_db_network_insert(priv, skb->data + ETH_ALEN, networkAddr); |
|
- |
|
- __nat25_db_print(priv); |
|
- } |
|
- return 0; |
|
- |
|
- case NAT25_LOOKUP: { |
|
- if (!memcmp(GET_MY_HWADDR(priv), ipx->ipx_dest.node, ETH_ALEN)) { |
|
- RTW_INFO("NAT25: Lookup IPX, Modify Destination IPX Node addr\n"); |
|
- |
|
- __nat25_generate_ipx_network_addr_with_socket(networkAddr, &ipx->ipx_dest.net, &ipx->ipx_dest.sock); |
|
- |
|
- __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); |
|
- |
|
- /* replace IPX destination node addr with Lookup destination MAC addr */ |
|
- memcpy(ipx->ipx_dest.node, skb->data, ETH_ALEN); |
|
- } else { |
|
- __nat25_generate_ipx_network_addr_with_node(networkAddr, &ipx->ipx_dest.net, ipx->ipx_dest.node); |
|
- |
|
- __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); |
|
- } |
|
- } |
|
- return 0; |
|
- |
|
- default: |
|
- return -1; |
|
- } |
|
- } |
|
- |
|
- /* AARP */ |
|
- else if (ea != NULL) { |
|
- /* Sanity check fields. */ |
|
- if (ea->hw_len != ETH_ALEN || ea->pa_len != AARP_PA_ALEN) { |
|
- DEBUG_WARN("NAT25: Appletalk AARP Sanity check fail!\n"); |
|
- return -1; |
|
- } |
|
+ // __nat25_generate_apple_network_addr(networkAddr, &ddp->deh_snet, &ddp->deh_snode); |
|
|
|
- switch (method) { |
|
- case NAT25_CHECK: |
|
- return 0; |
|
- |
|
- case NAT25_INSERT: { |
|
- /* change to AARP source mac address to wlan STA address */ |
|
- memcpy(ea->hw_src, GET_MY_HWADDR(priv), ETH_ALEN); |
|
- |
|
- RTW_INFO("NAT25: Insert AARP, Source=%d,%d Destination=%d,%d\n", |
|
- ea->pa_src_net, |
|
- ea->pa_src_node, |
|
- ea->pa_dst_net, |
|
- ea->pa_dst_node); |
|
- |
|
- __nat25_generate_apple_network_addr(networkAddr, &ea->pa_src_net, &ea->pa_src_node); |
|
- |
|
- __nat25_db_network_insert(priv, skb->data + ETH_ALEN, networkAddr); |
|
- |
|
- __nat25_db_print(priv); |
|
- } |
|
- return 0; |
|
- |
|
- case NAT25_LOOKUP: { |
|
- RTW_INFO("NAT25: Lookup AARP, Source=%d,%d Destination=%d,%d\n", |
|
- ea->pa_src_net, |
|
- ea->pa_src_node, |
|
- ea->pa_dst_net, |
|
- ea->pa_dst_node); |
|
- |
|
- __nat25_generate_apple_network_addr(networkAddr, &ea->pa_dst_net, &ea->pa_dst_node); |
|
- |
|
- __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); |
|
- |
|
- /* change to AARP destination mac address to Lookup result */ |
|
- memcpy(ea->hw_dst, skb->data, ETH_ALEN); |
|
- } |
|
- return 0; |
|
- |
|
- default: |
|
- return -1; |
|
- } |
|
- } |
|
- |
|
- /* DDP */ |
|
- else if (ddp != NULL) { |
|
- switch (method) { |
|
- case NAT25_CHECK: |
|
- return -1; |
|
- |
|
- case NAT25_INSERT: { |
|
- RTW_INFO("NAT25: Insert DDP, Source=%d,%d Destination=%d,%d\n", |
|
- ddp->deh_snet, |
|
- ddp->deh_snode, |
|
- ddp->deh_dnet, |
|
- ddp->deh_dnode); |
|
- |
|
- __nat25_generate_apple_network_addr(networkAddr, &ddp->deh_snet, &ddp->deh_snode); |
|
- |
|
- __nat25_db_network_insert(priv, skb->data + ETH_ALEN, networkAddr); |
|
- |
|
- __nat25_db_print(priv); |
|
- } |
|
- return 0; |
|
- |
|
- case NAT25_LOOKUP: { |
|
- RTW_INFO("NAT25: Lookup DDP, Source=%d,%d Destination=%d,%d\n", |
|
- ddp->deh_snet, |
|
- ddp->deh_snode, |
|
- ddp->deh_dnet, |
|
- ddp->deh_dnode); |
|
- |
|
- __nat25_generate_apple_network_addr(networkAddr, &ddp->deh_dnet, &ddp->deh_dnode); |
|
- |
|
- __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); |
|
- } |
|
- return 0; |
|
- |
|
- default: |
|
- return -1; |
|
- } |
|
- } |
|
- |
|
- return -1; |
|
- } |
|
+ // __nat25_db_network_insert(priv, skb->data + ETH_ALEN, networkAddr); |
|
+ |
|
+ // __nat25_db_print(priv); |
|
+ // } |
|
+ // return 0; |
|
+ |
|
+ // case NAT25_LOOKUP: { |
|
+ // RTW_INFO("NAT25: Lookup DDP, Source=%d,%d Destination=%d,%d\n", |
|
+ // ddp->deh_snet, |
|
+ // ddp->deh_snode, |
|
+ // ddp->deh_dnet, |
|
+ // ddp->deh_dnode); |
|
+ |
|
+ // __nat25_generate_apple_network_addr(networkAddr, &ddp->deh_dnet, &ddp->deh_dnode); |
|
+ |
|
+ // __nat25_db_network_lookup_and_replace(priv, skb, networkAddr); |
|
+ // } |
|
+ // return 0; |
|
+ |
|
+ // default: |
|
+ // return -1; |
|
+ // } |
|
+ // } |
|
+ |
|
+ // return -1; |
|
+ // } |
|
|
|
/*---------------------------------------------------*/ |
|
/* Handle PPPoE frame */ |
|
diff --git a/os_dep/linux/recv_linux.c b/os_dep/linux/recv_linux.c |
|
index da9a84b..5e85a73 100755 |
|
--- a/os_dep/linux/recv_linux.c |
|
+++ b/os_dep/linux/recv_linux.c |
|
@@ -355,8 +355,9 @@ static int napi_recv(_adapter *padapter, int budget) |
|
|
|
#ifdef CONFIG_RTW_GRO |
|
if (pregistrypriv->en_gro) { |
|
- if (rtw_napi_gro_receive(&padapter->napi, pskb) != GRO_DROP) |
|
- rx_ok = _TRUE; |
|
+ // if (rtw_napi_gro_receive(&padapter->napi, pskb) != GRO_DROP) |
|
+ rtw_napi_gro_receive(&padapter->napi, pskb); |
|
+ rx_ok = _TRUE; |
|
goto next; |
|
} |
|
#endif /* CONFIG_RTW_GRO */ |