mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-27 03:07:43 +02:00
rtl8xxx: remove ipx from realtek wlan modules
kernel 5.15 remove the ipx headers. ipx itself was removed many years ago. Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
This commit is contained in:
319
src/patches/rtl8189es/remove-ipx.patch
Normal file
319
src/patches/rtl8189es/remove-ipx.patch
Normal file
@@ -0,0 +1,319 @@
|
||||
diff -Naur rtl8189ES_linux-03ac413135a355b55b693154c44b70f86a39732e.org/core/rtw_br_ext.c rtl8189ES_linux-03ac413135a355b55b693154c44b70f86a39732e/core/rtw_br_ext.c
|
||||
--- rtl8189ES_linux-03ac413135a355b55b693154c44b70f86a39732e.org/core/rtw_br_ext.c 2021-03-02 18:42:47.000000000 +0100
|
||||
+++ rtl8189ES_linux-03ac413135a355b55b693154c44b70f86a39732e/core/rtw_br_ext.c 2021-11-04 18:21:00.965922215 +0100
|
||||
@@ -22,7 +22,6 @@
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/if_arp.h>
|
||||
#include <net/ip.h>
|
||||
-#include <net/ipx.h>
|
||||
#include <linux/atalk.h>
|
||||
#include <linux/udp.h>
|
||||
#include <linux/if_pppox.h>
|
||||
@@ -171,39 +170,6 @@
|
||||
}
|
||||
|
||||
|
||||
-static __inline__ void __nat25_generate_ipx_network_addr_with_node(unsigned char *networkAddr,
|
||||
- unsigned int *ipxNetAddr, unsigned char *ipxNodeAddr)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_IPX;
|
||||
- memcpy(networkAddr+1, (unsigned char *)ipxNetAddr, 4);
|
||||
- memcpy(networkAddr+5, ipxNodeAddr, 6);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-static __inline__ void __nat25_generate_ipx_network_addr_with_socket(unsigned char *networkAddr,
|
||||
- unsigned int *ipxNetAddr, unsigned short *ipxSocketAddr)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_IPX;
|
||||
- memcpy(networkAddr+1, (unsigned char *)ipxNetAddr, 4);
|
||||
- memcpy(networkAddr+5, (unsigned char *)ipxSocketAddr, 2);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-static __inline__ void __nat25_generate_apple_network_addr(unsigned char *networkAddr,
|
||||
- unsigned short *network, unsigned char *node)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_APPLE;
|
||||
- memcpy(networkAddr+1, (unsigned char *)network, 2);
|
||||
- networkAddr[3] = *node;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static __inline__ void __nat25_generate_pppoe_network_addr(unsigned char *networkAddr,
|
||||
unsigned char *ac_mac, unsigned short *sid)
|
||||
{
|
||||
@@ -929,267 +895,6 @@
|
||||
}
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
- /* 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))
|
||||
- {
|
||||
- DBG_871X("NAT25: Protocol=IPX (Ethernet II)\n");
|
||||
- ipx = (struct ipxhdr *)framePtr;
|
||||
- }
|
||||
- else //if(protocol <= __constant_htons(ETH_FRAME_LEN))
|
||||
- {
|
||||
- if(!memcmp(ipx_header, framePtr, 2))
|
||||
- {
|
||||
- DBG_871X("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
|
||||
-
|
||||
- DBG_871X("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))
|
||||
- {
|
||||
- DBG_871X("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))
|
||||
- {
|
||||
- DBG_871X("NAT25: Check IPX skb_copy\n");
|
||||
- return 0;
|
||||
- }
|
||||
- return -1;
|
||||
-
|
||||
- case NAT25_INSERT:
|
||||
- {
|
||||
- DBG_871X("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))
|
||||
- {
|
||||
- DBG_871X("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))
|
||||
- {
|
||||
- DBG_871X("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);
|
||||
-
|
||||
- DBG_871X("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:
|
||||
- {
|
||||
- DBG_871X("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:
|
||||
- {
|
||||
- DBG_871X("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:
|
||||
- {
|
||||
- DBG_871X("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 */
|
||||
/*---------------------------------------------------*/
|
||||
else if((protocol == __constant_htons(ETH_P_PPP_DISC)) ||
|
||||
280
src/patches/rtl8812au/remove-ipx.patch
Normal file
280
src/patches/rtl8812au/remove-ipx.patch
Normal file
@@ -0,0 +1,280 @@
|
||||
diff -Naur rtl8812au-0b87ed921a8682856aed5a3e68344b0087f3c93c.org/core/rtw_br_ext.c rtl8812au-0b87ed921a8682856aed5a3e68344b0087f3c93c/core/rtw_br_ext.c
|
||||
--- rtl8812au-0b87ed921a8682856aed5a3e68344b0087f3c93c.org/core/rtw_br_ext.c 2021-05-21 22:58:44.000000000 +0200
|
||||
+++ rtl8812au-0b87ed921a8682856aed5a3e68344b0087f3c93c/core/rtw_br_ext.c 2021-11-04 18:54:19.917603371 +0100
|
||||
@@ -17,7 +17,6 @@
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/if_arp.h>
|
||||
#include <net/ip.h>
|
||||
- #include <net/ipx.h>
|
||||
#include <linux/atalk.h>
|
||||
#include <linux/udp.h>
|
||||
#include <linux/if_pppox.h>
|
||||
@@ -168,40 +167,6 @@
|
||||
memcpy(networkAddr + 7, (unsigned char *)ipAddr, 4);
|
||||
}
|
||||
|
||||
-
|
||||
-static __inline__ void __nat25_generate_ipx_network_addr_with_node(unsigned char *networkAddr,
|
||||
- unsigned int *ipxNetAddr, unsigned char *ipxNodeAddr)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_IPX;
|
||||
- memcpy(networkAddr + 1, (unsigned char *)ipxNetAddr, 4);
|
||||
- memcpy(networkAddr + 5, ipxNodeAddr, 6);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-static __inline__ void __nat25_generate_ipx_network_addr_with_socket(unsigned char *networkAddr,
|
||||
- unsigned int *ipxNetAddr, unsigned short *ipxSocketAddr)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_IPX;
|
||||
- memcpy(networkAddr + 1, (unsigned char *)ipxNetAddr, 4);
|
||||
- memcpy(networkAddr + 5, (unsigned char *)ipxSocketAddr, 2);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-static __inline__ void __nat25_generate_apple_network_addr(unsigned char *networkAddr,
|
||||
- unsigned short *network, unsigned char *node)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_APPLE;
|
||||
- memcpy(networkAddr + 1, (unsigned char *)network, 2);
|
||||
- networkAddr[3] = *node;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static __inline__ void __nat25_generate_pppoe_network_addr(unsigned char *networkAddr,
|
||||
unsigned char *ac_mac, unsigned short *sid)
|
||||
{
|
||||
@@ -890,227 +855,6 @@
|
||||
}
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
- /* 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;
|
||||
- }
|
||||
-
|
||||
- /*---------------------------------------------------*/
|
||||
/* Handle PPPoE frame */
|
||||
/*---------------------------------------------------*/
|
||||
else if ((protocol == __constant_htons(ETH_P_PPP_DISC)) ||
|
||||
280
src/patches/rtl8822bu/remove-ipx.patch
Normal file
280
src/patches/rtl8822bu/remove-ipx.patch
Normal file
@@ -0,0 +1,280 @@
|
||||
diff -Naur 88x2bu-fd0b735e2e30d32f4d91497242cf6af288bdd082.org/core/rtw_br_ext.c 88x2bu-fd0b735e2e30d32f4d91497242cf6af288bdd082/core/rtw_br_ext.c
|
||||
--- 88x2bu-fd0b735e2e30d32f4d91497242cf6af288bdd082.org/core/rtw_br_ext.c 2021-09-30 20:27:33.000000000 +0200
|
||||
+++ 88x2bu-fd0b735e2e30d32f4d91497242cf6af288bdd082/core/rtw_br_ext.c 2021-11-04 18:57:11.853953556 +0100
|
||||
@@ -17,7 +17,6 @@
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/if_arp.h>
|
||||
#include <net/ip.h>
|
||||
- #include <net/ipx.h>
|
||||
#include <linux/atalk.h>
|
||||
#include <linux/udp.h>
|
||||
#include <linux/if_pppox.h>
|
||||
@@ -168,40 +167,6 @@
|
||||
memcpy(networkAddr + 7, (unsigned char *)ipAddr, 4);
|
||||
}
|
||||
|
||||
-
|
||||
-static __inline__ void __nat25_generate_ipx_network_addr_with_node(unsigned char *networkAddr,
|
||||
- unsigned int *ipxNetAddr, unsigned char *ipxNodeAddr)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_IPX;
|
||||
- memcpy(networkAddr + 1, (unsigned char *)ipxNetAddr, 4);
|
||||
- memcpy(networkAddr + 5, ipxNodeAddr, 6);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-static __inline__ void __nat25_generate_ipx_network_addr_with_socket(unsigned char *networkAddr,
|
||||
- unsigned int *ipxNetAddr, unsigned short *ipxSocketAddr)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_IPX;
|
||||
- memcpy(networkAddr + 1, (unsigned char *)ipxNetAddr, 4);
|
||||
- memcpy(networkAddr + 5, (unsigned char *)ipxSocketAddr, 2);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-static __inline__ void __nat25_generate_apple_network_addr(unsigned char *networkAddr,
|
||||
- unsigned short *network, unsigned char *node)
|
||||
-{
|
||||
- memset(networkAddr, 0, MAX_NETWORK_ADDR_LEN);
|
||||
-
|
||||
- networkAddr[0] = NAT25_APPLE;
|
||||
- memcpy(networkAddr + 1, (unsigned char *)network, 2);
|
||||
- networkAddr[3] = *node;
|
||||
-}
|
||||
-
|
||||
-
|
||||
static __inline__ void __nat25_generate_pppoe_network_addr(unsigned char *networkAddr,
|
||||
unsigned char *ac_mac, unsigned short *sid)
|
||||
{
|
||||
@@ -890,227 +855,6 @@
|
||||
}
|
||||
|
||||
/*---------------------------------------------------*/
|
||||
- /* 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;
|
||||
- }
|
||||
-
|
||||
- /*---------------------------------------------------*/
|
||||
/* Handle PPPoE frame */
|
||||
/*---------------------------------------------------*/
|
||||
else if ((protocol == __constant_htons(ETH_P_PPP_DISC)) ||
|
||||
Reference in New Issue
Block a user