batman-adv: fix upstream latency bug
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de> git-svn-id: svn://svn.openwrt.org/openwrt/packages/net/batman-adv@28315 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
parent
e60dda15d5
commit
ad9f006cf0
2 changed files with 51 additions and 1 deletions
3
Makefile
3
Makefile
|
@ -78,10 +78,11 @@ PATCH_BATCTL = $(call Build/DoPatch,"$(PKG_BATCTL_BUILD_DIR)","$(PATCH_DIR)","*b
|
||||||
BUILD_BATCTL = $(MAKE) -C $(PKG_TOOL_BUILD_DIR) $(MAKE_BATCTL_ARGS)
|
BUILD_BATCTL = $(MAKE) -C $(PKG_TOOL_BUILD_DIR) $(MAKE_BATCTL_ARGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
KPATCH ?= $(PATCH)
|
||||||
define Build/DoPatch
|
define Build/DoPatch
|
||||||
@if [ -d "$(2)" ]; then \
|
@if [ -d "$(2)" ]; then \
|
||||||
if [ "$$$$(ls $(2) | grep -Ec $(3))" -gt 0 ]; then \
|
if [ "$$$$(ls $(2) | grep -Ec $(3))" -gt 0 ]; then \
|
||||||
$(PATCH) "$(1)" "$(2)" "$(3)"; \
|
$(KPATCH) "$(1)" "$(2)" "$(3)"; \
|
||||||
fi; \
|
fi; \
|
||||||
fi
|
fi
|
||||||
endef
|
endef
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
From: Antonio Quartulli <ordex@autistici.org>
|
||||||
|
|
||||||
|
corrects a critical bug of the GW feature. This bug made all the unicast
|
||||||
|
packets destined to a GW to be sent as broadcast. This bug is present even if
|
||||||
|
the sender GW feature is configured as OFF. It's an urgent bug fix and should
|
||||||
|
be committed as soon as possible.
|
||||||
|
|
||||||
|
This was a regression introduced by 43676ab590c3f8686fd047d34c3e33803eef71f0
|
||||||
|
|
||||||
|
Signed-off-by: Antonio Quartulli <ordex@autistici.org>
|
||||||
|
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
|
||||||
|
---
|
||||||
|
soft-interface.c | 10 +++++-----
|
||||||
|
1 files changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
--- a/soft-interface.c
|
||||||
|
+++ b/soft-interface.c
|
||||||
|
@@ -565,7 +565,7 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
|
||||||
|
struct orig_node *orig_node = NULL;
|
||||||
|
int data_len = skb->len, ret;
|
||||||
|
short vid = -1;
|
||||||
|
- bool do_bcast = false;
|
||||||
|
+ bool do_bcast;
|
||||||
|
|
||||||
|
if (atomic_read(&bat_priv->mesh_state) != MESH_ACTIVE)
|
||||||
|
goto dropped;
|
||||||
|
@@ -598,15 +598,15 @@ static int interface_tx(struct sk_buff *skb, struct net_device *soft_iface)
|
||||||
|
tt_local_add(soft_iface, ethhdr->h_source);
|
||||||
|
|
||||||
|
orig_node = transtable_search(bat_priv, ethhdr->h_dest);
|
||||||
|
- if (is_multicast_ether_addr(ethhdr->h_dest) ||
|
||||||
|
- (orig_node && orig_node->gw_flags)) {
|
||||||
|
+ do_bcast = is_multicast_ether_addr(ethhdr->h_dest);
|
||||||
|
+ if (do_bcast || (orig_node && orig_node->gw_flags)) {
|
||||||
|
ret = gw_is_target(bat_priv, skb, orig_node);
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
|
goto dropped;
|
||||||
|
|
||||||
|
- if (ret == 0)
|
||||||
|
- do_bcast = true;
|
||||||
|
+ if (ret)
|
||||||
|
+ do_bcast = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ethernet packet should be broadcasted */
|
||||||
|
--
|
||||||
|
1.7.5.4
|
||||||
|
|
Loading…
Reference in a new issue