mirror of
https://github.com/aircrack-ng/rtl8812au.git
synced 2024-11-22 21:34:37 +00:00
Optimize kernel v5.15 support
This commit is contained in:
parent
959f3b61e0
commit
2f52f84096
@ -18,9 +18,6 @@
|
|||||||
#include <linux/if_arp.h>
|
#include <linux/if_arp.h>
|
||||||
#include <net/ip.h>
|
#include <net/ip.h>
|
||||||
#include <linux/version.h>
|
#include <linux/version.h>
|
||||||
//#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 15, 0)
|
|
||||||
// #include <net/ipx.h>
|
|
||||||
//#endif
|
|
||||||
#include <linux/atalk.h>
|
#include <linux/atalk.h>
|
||||||
#include <linux/udp.h>
|
#include <linux/udp.h>
|
||||||
#include <linux/if_pppox.h>
|
#include <linux/if_pppox.h>
|
||||||
@ -919,229 +916,6 @@ int nat25_db_handle(_adapter *priv, struct sk_buff *skb, int method)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _NET_INET_IPX_H_
|
|
||||||
/*---------------------------------------------------*/
|
|
||||||
/* 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_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;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
/* Handle PPPoE frame */
|
/* Handle PPPoE frame */
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
PACKAGE_NAME="realtek-rtl88xxau"
|
PACKAGE_NAME="realtek-rtl88xxau"
|
||||||
PACKAGE_VERSION="5.6.4.2~20211212"
|
PACKAGE_VERSION="5.6.4.2~20220405"
|
||||||
CLEAN="'make' clean"
|
CLEAN="'make' clean"
|
||||||
BUILT_MODULE_NAME[0]=88XXau
|
BUILT_MODULE_NAME[0]=88XXau
|
||||||
PROCS_NUM=`nproc`
|
PROCS_NUM=`nproc`
|
||||||
|
Loading…
Reference in New Issue
Block a user