diff options
author | Kevin Olbrich | 2016-10-29 12:25:32 +0200 |
---|---|---|
committer | Kevin Olbrich | 2016-10-29 12:29:24 +0200 |
commit | 2ae35f63f05189ba4ab8289ab293549a8b9734ec (patch) | |
tree | 96268aafd1979690f52b9551d9941535962b0a54 | |
download | aur-2ae35f63f05189ba4ab8289ab293549a8b9734ec.tar.gz |
first package release
-rw-r--r-- | .SRCINFO | 27 | ||||
-rw-r--r-- | 0001-batman-adv-Fix-speedy-join-in-gateway-client-mode.patch | 35 | ||||
-rw-r--r-- | 1001-batman-adv-introduce-no_rebroadcast-option.patch | 189 | ||||
-rw-r--r-- | 1002-batman-adv-decrease-maximum-fragment-size.patch | 28 | ||||
-rw-r--r-- | PKGBUILD | 54 | ||||
-rw-r--r-- | batman-adv-optimized.install | 10 |
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: |