From ad9f006cf06be51484d5131e753d45947d9c2ba2 Mon Sep 17 00:00:00 2001 From: Marek Lindner Date: Thu, 29 Sep 2011 10:18:17 +0000 Subject: [PATCH] batman-adv: fix upstream latency bug Signed-off-by: Marek Lindner git-svn-id: svn://svn.openwrt.org/openwrt/packages/net/batman-adv@28315 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- Makefile | 3 +- ...o_be_true_for_broadcast_packets_only.patch | 49 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 patches/batman-adv_do_bcast_has_to_be_true_for_broadcast_packets_only.patch diff --git a/Makefile b/Makefile index f09c883..0df2ede 100644 --- a/Makefile +++ b/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) endif +KPATCH ?= $(PATCH) define Build/DoPatch @if [ -d "$(2)" ]; then \ if [ "$$$$(ls $(2) | grep -Ec $(3))" -gt 0 ]; then \ - $(PATCH) "$(1)" "$(2)" "$(3)"; \ + $(KPATCH) "$(1)" "$(2)" "$(3)"; \ fi; \ fi endef diff --git a/patches/batman-adv_do_bcast_has_to_be_true_for_broadcast_packets_only.patch b/patches/batman-adv_do_bcast_has_to_be_true_for_broadcast_packets_only.patch new file mode 100644 index 0000000..12d0a6a --- /dev/null +++ b/patches/batman-adv_do_bcast_has_to_be_true_for_broadcast_packets_only.patch @@ -0,0 +1,49 @@ +From: Antonio Quartulli + +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 +Signed-off-by: Marek Lindner +--- + 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 + -- 2.30.2