summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Olbrich2016-10-29 12:25:32 +0200
committerKevin Olbrich2016-10-29 12:29:24 +0200
commit2ae35f63f05189ba4ab8289ab293549a8b9734ec (patch)
tree96268aafd1979690f52b9551d9941535962b0a54
downloadaur-2ae35f63f05189ba4ab8289ab293549a8b9734ec.tar.gz
first package release
-rw-r--r--.SRCINFO27
-rw-r--r--0001-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch35
-rw-r--r--1001-batman-adv-introduce-no_rebroadcast-option.patch189
-rw-r--r--1002-batman-adv-decrease-maximum-fragment-size.patch28
-rw-r--r--PKGBUILD54
-rw-r--r--batman-adv-optimized.install10
6 files changed, 343 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..90b05ef6b306
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,27 @@
+# Generated by mksrcinfo v8
+# Thu Jun 23 07:01:52 UTC 2016
+pkgbase = batman-adv-optimized
+ pkgdesc = batman kernel module
+ pkgver = 2016.4
+ pkgrel = 0
+ epoch = 1
+ url = https://www.open-mesh.net/
+ install = batman-adv-optimized.install
+ arch = i686
+ arch = x86_64
+ license = GPL
+ makedepends = linux-headers
+ depends = linux
+ source = https://downloads.open-mesh.org/batman/releases/batman-adv-2016.4/batman-adv-2016.4.tar.gz
+ source = batman-adv-optimized.install
+ source = 0001-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch
+ source = 1001-batman-adv-introduce-no_rebroadcast-option.patch
+ source = 1002-batman-adv-decrease-maximum-fragment-size.patch
+ sha256sums = bc1236dd83209db51a09368b7ed1dd3a1ce5f5b933e09260c4d6f107c0a150eb
+ sha256sums = 347599c02426a905690002885c277f91b82da2b29d3372348e5f02d03c435c37
+ sha256sums = b1425b0fa6268fc67b3f35b443c382d86ac0e8513b3f786a06695f90b36774ee
+ sha256sums = 7a876cccdb287fb9929cf1b33361334d78b6cd7cbb3f3fb0a3c9c261f335edaf
+ sha256sums = 1501d6fef6497461d2439505eeeb264f02f2ecfb06e7101908d72fc4d1953c14
+
+pkgname = batman-adv-optimized
+
diff --git a/0001-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch b/0001-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch
new file mode 100644
index 000000000000..e63b782f4f82
--- /dev/null
+++ b/0001-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch
@@ -0,0 +1,35 @@
+From: Sven Eckelmann <sven@narfation.org>
+Date: Sun, 12 Jun 2016 10:43:19 +0200
+Subject: [PATCH] batman-adv: Fix speedy join in gateway client mode
+
+Speedy join only works when the received packet is either broadcast or an
+4addr unicast packet. Thus packets converted from broadcast to unicast via
+the gateway handling code have to be converted to 4addr packets to allow
+the receiving gateway server to add the sender address as temporary entry
+to the translation table.
+
+Not doing it will make the batman-adv gateway server drop the DHCP response
+in many situations because it doesn't yet have the TT entry for the
+destination of the DHCP response.
+
+Fixes: 9cbc67d9da47 ("batman-adv: change interface_rx to get orig node")
+Signed-off-by: Sven Eckelmann <sven@narfation.org>
+---
+ net/batman-adv/send.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
+index f2f1256..0103976 100644
+--- a/net/batman-adv/send.c
++++ b/net/batman-adv/send.c
+@@ -424,8 +424,8 @@ int batadv_send_skb_via_gw(struct batadv_priv *bat_priv, struct sk_buff *skb,
+ struct batadv_orig_node *orig_node;
+
+ orig_node = batadv_gw_get_selected_orig(bat_priv);
+- return batadv_send_skb_unicast(bat_priv, skb, BATADV_UNICAST, 0,
+- orig_node, vid);
++ return batadv_send_skb_unicast(bat_priv, skb, BATADV_UNICAST_4ADDR,
++ BATADV_P_DATA, orig_node, vid);
+ }
+
+ void batadv_schedule_bat_ogm(struct batadv_hard_iface *hard_iface)
diff --git a/1001-batman-adv-introduce-no_rebroadcast-option.patch b/1001-batman-adv-introduce-no_rebroadcast-option.patch
new file mode 100644
index 000000000000..e9f5ffb4408f
--- /dev/null
+++ b/1001-batman-adv-introduce-no_rebroadcast-option.patch
@@ -0,0 +1,189 @@
+From bb66988dc6972d5400b4ff4f0b49ed090007d635 Mon Sep 17 00:00:00 2001
+Message-Id: <bb66988dc6972d5400b4ff4f0b49ed090007d635.1466049319.git.mschiffer@universe-factory.net>
+From: =?UTF-8?q?Linus=20L=C3=BCssing?= <linus.luessing@web.de>
+Date: Tue, 24 Sep 2013 04:36:27 +0200
+Subject: [PATCH 1/2] batman-adv: introduce 'no_rebroadcast' option
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch introduces a new sysfs option named "no_rebroadcast" on
+a per hard interface basis. It allows manually enabling a split-horizon
+like behaviour for the layer 2 multicast payload frames, in that
+incoming multicast payload frames on such a hard interface are only
+being rebroadcasted on all interfaces except the incoming one instead
+of being rebroadcasted on all interfaces.
+
+Such an option should only be enabled if you are certain that these
+rebroadcasts are unnecessary. This is usually the case for instance
+for point-to-point wifi longshots or wired links.
+
+This option can especially safe a significant amount of upload overhead
+if the neighbourhood on a link is rather large, for instance in some
+transitive, symmetric VPN configurations.
+
+Using this option wrongly will break your mesh network, use this option
+wisely and at your own risk!
+
+Signed-off-by: Linus Lüssing <linus.luessing@web.de>
+---
+ .../ABI/testing/sysfs-class-net-batman-adv | 11 ++++
+ net/batman-adv/hard-interface.c | 2 +
+ net/batman-adv/send.c | 4 ++
+ net/batman-adv/sysfs.c | 59 ++++++++++++++++++++++
+ net/batman-adv/types.h | 1 +
+ 5 files changed, 77 insertions(+)
+
+diff --git a/Documentation/ABI/testing/sysfs-class-net-batman-adv b/Documentation/ABI/testing/sysfs-class-net-batman-adv
+index 518f6a1..896c480 100644
+--- a/Documentation/ABI/testing/sysfs-class-net-batman-adv
++++ b/Documentation/ABI/testing/sysfs-class-net-batman-adv
+@@ -28,3 +28,14 @@ Description:
+ The /sys/class/net/<iface>/batman-adv/mesh_iface file
+ displays the batman mesh interface this <iface>
+ currently is associated with.
++
++What: /sys/class/net/<iface>/batman-adv/no_rebroadcast
++Date: Sep 2013
++Contact: Linus Lüssing <linus.luessing@web.de>
++Description:
++ With this option set incoming multicast payload frames on
++ <iface> are not being rebroadcasted on <iface> again. This
++ option should be set on links which are known to be transitive
++ and symmetric only, for instance point-to-point wifi longshots
++ or wired links. Using this option wrongly is going to
++ break your mesh network, use at your own risk!
+diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
+index 8c2f399..48e53d0 100644
+--- a/net/batman-adv/hard-interface.c
++++ b/net/batman-adv/hard-interface.c
+@@ -690,6 +690,8 @@ batadv_hardif_add_interface(struct net_device *net_dev)
+ kref_init(&hard_iface->refcount);
+ kref_get(&hard_iface->refcount);
+
++ atomic_set(&hard_iface->no_rebroadcast, 0);
++
+ batadv_check_known_mac_addr(hard_iface->net_dev);
+ list_add_tail_rcu(&hard_iface->list, &batadv_hardif_list);
+
+diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c
+index f2f1256..3736d75 100644
+--- a/net/batman-adv/send.c
++++ b/net/batman-adv/send.c
+@@ -578,6 +578,10 @@ static void batadv_send_outstanding_bcast_packet(struct work_struct *work)
+ if (forw_packet->num_packets >= hard_iface->num_bcasts)
+ continue;
+
++ if (atomic_read(&hard_iface->no_rebroadcast) &&
++ forw_packet->skb->dev == hard_iface->net_dev)
++ continue;
++
+ if (!kref_get_unless_zero(&hard_iface->refcount))
+ continue;
+
+diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c
+index 414b207..9aa043f 100644
+--- a/net/batman-adv/sysfs.c
++++ b/net/batman-adv/sysfs.c
+@@ -134,6 +134,17 @@ struct batadv_attribute batadv_attr_vlan_##_name = { \
+ .store = _store, \
+ }
+
++/* Use this, if you have customized show and store functions
++ * for hard interface attrs
++ */
++#define BATADV_ATTR_HIF(_name, _mode, _show, _store) \
++struct batadv_attribute batadv_attr_hif_##_name = { \
++ .attr = {.name = __stringify(_name), \
++ .mode = _mode }, \
++ .show = _show, \
++ .store = _store, \
++};
++
+ /* Use this, if you have customized show and store functions */
+ #define BATADV_ATTR(_name, _mode, _show, _store) \
+ struct batadv_attribute batadv_attr_##_name = { \
+@@ -293,6 +304,52 @@ ssize_t batadv_show_##_name(struct kobject *kobj, \
+ static BATADV_ATTR(_name, _mode, batadv_show_##_name, \
+ batadv_store_##_name)
+
++#define BATADV_ATTR_HIF_STORE_BOOL(_name, _post_func) \
++ssize_t batadv_store_hif_##_name(struct kobject *kobj, \
++ struct attribute *attr, char *buff, \
++ size_t count) \
++{ \
++ struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
++ struct batadv_hard_iface *hard_iface; \
++ size_t res; \
++ \
++ hard_iface = batadv_hardif_get_by_netdev(net_dev); \
++ if (!hard_iface) \
++ return 0; \
++ \
++ res = __batadv_store_bool_attr(buff, count, _post_func, \
++ attr, &hard_iface->_name, \
++ hard_iface->soft_iface); \
++ batadv_hardif_put(hard_iface); \
++ return res; \
++}
++
++#define BATADV_ATTR_HIF_SHOW_BOOL(_name) \
++ssize_t batadv_show_hif_##_name(struct kobject *kobj, \
++ struct attribute *attr, char *buff) \
++{ \
++ struct net_device *net_dev = batadv_kobj_to_netdev(kobj); \
++ struct batadv_hard_iface *hard_iface; \
++ size_t res; \
++ \
++ hard_iface = batadv_hardif_get_by_netdev(net_dev); \
++ if (!hard_iface) \
++ return 0; \
++ \
++ res = sprintf(buff, "%s\n", \
++ atomic_read(&hard_iface->_name) == 0 ? \
++ "disabled" : "enabled"); \
++ batadv_hardif_put(hard_iface); \
++ return res; \
++}
++
++/* Use this, if you are going to turn a [name] in the vlan struct on or off */
++#define BATADV_ATTR_HIF_BOOL(_name, _mode, _post_func) \
++ static BATADV_ATTR_HIF_STORE_BOOL(_name, _post_func) \
++ static BATADV_ATTR_HIF_SHOW_BOOL(_name) \
++ static BATADV_ATTR_HIF(_name, _mode, batadv_show_hif_##_name, \
++ batadv_store_hif_##_name)
++
+ static int batadv_store_bool_attr(char *buff, size_t count,
+ struct net_device *net_dev,
+ const char *attr_name, atomic_t *attr,
+@@ -993,6 +1050,7 @@ static ssize_t batadv_show_throughput_override(struct kobject *kobj,
+ static BATADV_ATTR(mesh_iface, S_IRUGO | S_IWUSR, batadv_show_mesh_iface,
+ batadv_store_mesh_iface);
+ static BATADV_ATTR(iface_status, S_IRUGO, batadv_show_iface_status, NULL);
++BATADV_ATTR_HIF_BOOL(no_rebroadcast, S_IRUGO | S_IWUSR, NULL);
+ #ifdef CONFIG_BATMAN_ADV_BATMAN_V
+ BATADV_ATTR_HIF_UINT(elp_interval, bat_v.elp_interval, S_IRUGO | S_IWUSR,
+ 2 * BATADV_JITTER, INT_MAX, NULL);
+@@ -1004,6 +1062,7 @@ static BATADV_ATTR(throughput_override, S_IRUGO | S_IWUSR,
+ static struct batadv_attribute *batadv_batman_attrs[] = {
+ &batadv_attr_mesh_iface,
+ &batadv_attr_iface_status,
++ &batadv_attr_hif_no_rebroadcast,
+ #ifdef CONFIG_BATMAN_ADV_BATMAN_V
+ &batadv_attr_elp_interval,
+ &batadv_attr_throughput_override,
+diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
+index ba846b0..1a596c5 100644
+--- a/net/batman-adv/types.h
++++ b/net/batman-adv/types.h
+@@ -156,6 +156,7 @@ struct batadv_hard_iface {
+ struct hlist_head neigh_list;
+ /* neigh_list_lock protects: neigh_list */
+ spinlock_t neigh_list_lock;
++ atomic_t no_rebroadcast;
+ };
+
+ /**
+--
+2.8.3
+
diff --git a/1002-batman-adv-decrease-maximum-fragment-size.patch b/1002-batman-adv-decrease-maximum-fragment-size.patch
new file mode 100644
index 000000000000..a97146beb82d
--- /dev/null
+++ b/1002-batman-adv-decrease-maximum-fragment-size.patch
@@ -0,0 +1,28 @@
+From 9e7384fde3c5a71f733221a137fdc4593a9638be Mon Sep 17 00:00:00 2001
+Message-Id: <9e7384fde3c5a71f733221a137fdc4593a9638be.1466048916.git.mschiffer@universe-factory.net>
+In-Reply-To: <8e4c2084bbf2a65ad663a2b1ba27144e5dadfd5f.1466048916.git.mschiffer@universe-factory.net>
+References: <8e4c2084bbf2a65ad663a2b1ba27144e5dadfd5f.1466048916.git.mschiffer@universe-factory.net>
+From: Matthias Schiffer <mschiffer@universe-factory.net>
+Date: Thu, 6 Aug 2015 22:27:01 +0200
+Subject: [PATCH 2/2] batman-adv: decrease maximum fragment size
+
+---
+ net/batman-adv/main.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h
+index 7692526..d314e6c 100644
+--- a/net/batman-adv/main.h
++++ b/net/batman-adv/main.h
+@@ -159,7 +159,7 @@ enum batadv_uev_type {
+ /* Maximum number of fragments for one packet */
+ #define BATADV_FRAG_MAX_FRAGMENTS 16
+ /* Maxumim size of each fragment */
+-#define BATADV_FRAG_MAX_FRAG_SIZE 1400
++#define BATADV_FRAG_MAX_FRAG_SIZE 1280
+ /* Time to keep fragments while waiting for rest of the fragments */
+ #define BATADV_FRAG_TIMEOUT 10000
+
+--
+2.8.3
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..b44806e5d383
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,54 @@
+# Maintainer: Kevin Olbrich <kevin.olbrich@dolphin-it.de>
+# Contributor: Thomas Weißschuh <thomas t-8ch de>
+# Contributor: Andrea Scarpino <andrea@archlinux.org>
+# Contributor: RubenKelevra
+
+pkgname=batman-adv-optimized
+_pkgname=batman-adv
+pkgver=2016.4
+pkgrel=0
+epoch=1
+pkgdesc='batman kernel module'
+conflicts=batman-adv
+provides=batman-adv
+arch=('i686' 'x86_64')
+url='https://www.open-mesh.net/'
+license=('GPL')
+install='${pkgname}.install'
+source=("https://downloads.open-mesh.org/batman/releases/${_pkgname}-${pkgver}/${_pkgname}-${pkgver}.tar.gz"
+ '${pkgname}.install'
+ '0001-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch'
+ '1001-batman-adv-introduce-no_rebroadcast-option.patch'
+ '1002-batman-adv-decrease-maximum-fragment-size.patch'
+)
+depends=('linux')
+makedepends=('linux-headers')
+
+prepare() {
+ cd "${srcdir}/${_pkgname}-${pkgver}"
+
+ for s in "${source[@]}"
+ do
+ case "$s" in
+ (*.patch)
+ patch -p1 < "${srcdir}/${s}"
+ esac
+ done
+}
+
+build() {
+ cd "${srcdir}/${_pkgname}-${pkgver}"
+ make KERNELPATH=/usr/lib/modules/$(uname -r)/build
+}
+
+package() {
+ cd "${srcdir}/${_pkgname}-${pkgver}"
+ install -D -m644 net/batman-adv/batman-adv.ko "${pkgdir}/usr/lib/modules/$(uname -r)/updates/net/batman-adv/batman_adv.ko"
+ install -D -m644 README "${pkgdir}/usr/share/doc/batman-adv/README"
+}
+
+sha256sums=('bc1236dd83209db51a09368b7ed1dd3a1ce5f5b933e09260c4d6f107c0a150eb'
+ '347599c02426a905690002885c277f91b82da2b29d3372348e5f02d03c435c37'
+ 'b1425b0fa6268fc67b3f35b443c382d86ac0e8513b3f786a06695f90b36774ee'
+ '7a876cccdb287fb9929cf1b33361334d78b6cd7cbb3f3fb0a3c9c261f335edaf'
+ '1501d6fef6497461d2439505eeeb264f02f2ecfb06e7101908d72fc4d1953c14')
diff --git a/batman-adv-optimized.install b/batman-adv-optimized.install
new file mode 100644
index 000000000000..b4e3268efa34
--- /dev/null
+++ b/batman-adv-optimized.install
@@ -0,0 +1,10 @@
+post_install() {
+ depmod -a
+}
+
+post_upgrade() {
+ depmod -a
+}
+
+
+# vim:set ts=2 sw=2 et: