batman-adv: fix upstream latency bug
authorMarek Lindner <lindner_marek@yahoo.de>
Thu, 29 Sep 2011 10:18:17 +0000 (10:18 +0000)
committerMarek Lindner <lindner_marek@yahoo.de>
Thu, 29 Sep 2011 10:18:17 +0000 (10:18 +0000)
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

Makefile
patches/batman-adv_do_bcast_has_to_be_true_for_broadcast_packets_only.patch [new file with mode: 0644]

index f09c883971853276681b436bb00d5d8268c955f6..0df2ede97c06628ad275e14d071f5254105af48d 100644 (file)
--- 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 (file)
index 0000000..12d0a6a
--- /dev/null
@@ -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
+