summaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-6.6/151-net-bridge-do-not-send-arp-replies-if-src-and-target.patch
diff options
context:
space:
mode:
authorWeijie Gao <hackpascal@gmail.com>2024-01-03 19:57:28 +0800
committerRobert Marko <robimarko@gmail.com>2024-03-11 20:17:25 +0100
commit8a9273d51ede02fe66816ad2132198d592b1491e (patch)
tree8eb933b7aa50d41ac452fce46ea2947bc468907e /target/linux/generic/pending-6.6/151-net-bridge-do-not-send-arp-replies-if-src-and-target.patch
parent71360660e68bbc5bdc9cde89fd66ba5104e59106 (diff)
downloadopenwrt-8a9273d51ede02fe66816ad2132198d592b1491e.tar.gz
openwrt-8a9273d51ede02fe66816ad2132198d592b1491e.tar.bz2
openwrt-8a9273d51ede02fe66816ad2132198d592b1491e.zip
generic: copy backport, hack, pending patch and config from 6.1 to 6.6
Copy backport, hack, pending patch and config from 6.1 to 6.6. Signed-off-by: Weijie Gao <hackpascal@gmail.com>
Diffstat (limited to 'target/linux/generic/pending-6.6/151-net-bridge-do-not-send-arp-replies-if-src-and-target.patch')
-rw-r--r--target/linux/generic/pending-6.6/151-net-bridge-do-not-send-arp-replies-if-src-and-target.patch37
1 files changed, 37 insertions, 0 deletions
diff --git a/target/linux/generic/pending-6.6/151-net-bridge-do-not-send-arp-replies-if-src-and-target.patch b/target/linux/generic/pending-6.6/151-net-bridge-do-not-send-arp-replies-if-src-and-target.patch
new file mode 100644
index 0000000000..f420d210c2
--- /dev/null
+++ b/target/linux/generic/pending-6.6/151-net-bridge-do-not-send-arp-replies-if-src-and-target.patch
@@ -0,0 +1,37 @@
+From: Felix Fietkau <nbd@nbd.name>
+Date: Thu, 4 Jan 2024 15:21:21 +0100
+Subject: [PATCH] net: bridge: do not send arp replies if src and target hw
+ addr is the same
+
+There are broken devices in the wild that handle duplicate IP address
+detection by sending out ARP requests for the IP that they received from a
+DHCP server and refuse the address if they get a reply.
+When proxyarp is enabled, they would go into a loop of requesting an address
+and then NAKing it again.
+
+Link: https://github.com/openwrt/openwrt/issues/14309
+Signed-off-by: Felix Fietkau <nbd@nbd.name>
+---
+
+--- a/net/bridge/br_arp_nd_proxy.c
++++ b/net/bridge/br_arp_nd_proxy.c
+@@ -204,7 +204,10 @@ void br_do_proxy_suppress_arp(struct sk_
+ if ((p && (p->flags & BR_PROXYARP)) ||
+ (f->dst && (f->dst->flags & (BR_PROXYARP_WIFI |
+ BR_NEIGH_SUPPRESS)))) {
+- if (!vid)
++ replied = true;
++ if (!memcmp(n->ha, sha, dev->addr_len))
++ replied = false;
++ else if (!vid)
+ br_arp_send(br, p, skb->dev, sip, tip,
+ sha, n->ha, sha, 0, 0);
+ else
+@@ -212,7 +215,6 @@ void br_do_proxy_suppress_arp(struct sk_
+ sha, n->ha, sha,
+ skb->vlan_proto,
+ skb_vlan_tag_get(skb));
+- replied = true;
+ }
+
+ /* If we have replied or as long as we know the