Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit c7d7afd922b9a2dce094814ba7065268d015417a
Author: Simon Wunderlich <sw(a)simonwunderlich.de>
Date: Tue Apr 10 22:03:13 2012 +0000
doc: batman-adv/Multi-link-optimizations-technical
>---------------------------------------------------------------
c7d7afd922b9a2dce094814ba7065268d015417a
.../Multi-link-optimizations-…
[View More]technical.textile | 62 ++++++++++++++++------
1 file changed, 46 insertions(+), 16 deletions(-)
diff --git a/batman-adv/Multi-link-optimizations-technical.textile b/batman-adv/Multi-link-optimizations-technical.textile
index 00a826b7..fac833e4 100644
--- a/batman-adv/Multi-link-optimizations-technical.textile
+++ b/batman-adv/Multi-link-optimizations-technical.textile
@@ -1,42 +1,72 @@
h1. Bonding and interface alternating
+Mesh nodes with multiple physical links to other mesh nodes can use this capability to gain various benefits, for example:
-On mesh nodes with multiple wifi radios (or even other interfaces) participating in the mesh network, we can use these multiple interfaces to gain more bandwidth or more stability in the links. The standard BATMAN algorithm considers all neighbors equally, and does not distinguish whether neighbors belong to the same physical nodes or not. The bonding and interface alternating mechanisms detect that some neighbors belong to the same physical node and use this information.
+ * bonding: use multiple links for the same data stream to boost bandwidth
+ * interface alternating: send on other interfaces (and therefore other channels, if configured correctly) to minimize multihop bandwidth degradation
+These features are based on two facts:
-h2. Multiple interface detection
+ * multiple links exist between two neighbors, and
+ * the routing decision is independent of the link a packet is received
+Notably, these multi-interface features are independent of B.A.T.M.A.N. and could work with any routing algorithm/metric. The routing software only needs to detect that multiple peers belong to the same neighbor mesh node. This is also not related to Multi Path Routing, which would require multiple independent links.
-The first step is to detect that a peer has multiple interfaces, and we have multiple connections to it.
+Bonding and Interface Alternating works in following steps:
-!interface_detection.dia.jpg!
+# detect that a neighbor is reachable via multiple links
+# select suitable candidates among the the available links
+# use these multiple links for various manipulations
-As seen in the illustration, we have a node A with 2 interfaces A1,A2. Both of its interfaces can reach different neighbors. By evaluating OGM packets from B with a new "PRIMARIES FIRST HOP" flag (which is only set in the first hop, obviously), we recognize that B2 is belonging to the same node B1. OGMs from the primary interface (B1) are sent on all available interfaces (B1 and B2), and we can therefore detect that the B2 is a secondary interface and B1 is the primary interface of the node it belongs to.
+h2. Link detection
-With this information, we know that we can send packets via each links (A1->B1 or A2->B2) without disturbing or changing the routing algorithm - we send from and to the same nodes after all. Since we are going to use both links at the same time and not only the best, we need to make sure that both have a similar quality. Otherwise the performance might be worse instead of improving the situation.
+The detection part is specific to batman-adv. The first interface in batman-adv is the primary interface - it's MAC address (Originator address) is known throughout the mesh. The mesh node sends out the OGMs from the primary interface on *all* interfaces, with a high TTL. In this way, also mesh nodes only reachable via the secondary interfaces will know about this host. Secondary interfaces are all other interfaces. The secondary interfaces send out their own OGMs with low TTL, which only serve the purpose of local link detection, and are only sent on their respective interfaces.
+Note that it does not matter which interface is the primary interface, it is only used to have a single Originator known in the mesh (and thus avoid too much OGM overhead).
-h2. Interface alternating
+!primary_flag.dia.png!
+The PRIMARIES_FIRST_HOP flag is only set for OGMs of the primary interface, and only on the first hop - it is unset when rebroadcasted by another node.
-One application for our multiple detection is "interface alternating": The algorithm tries to avoid forwarding packets on the interface which just received the packet. That way the typical store & forward mechanism of wifi which halfs the bandwidth with each hop can be worked around.
+When OGMs with PRIMARIES_FIRST_HOP flag are received on different interfaces, a mesh node knows that it can reach his neighbor via multiple links. In the illustration, A receives the OGM via A1 (sent out by B1) and A2 (sent out by B2) - and detects that these two Links A1-B1, A2-B2 exist. These link candidates are stored and further filtered
-!alternation_chain.dia.jpg!
+h2. Candidate selection
-In the illustration, we can see 4 nodes with 2 interfaces each. A stream is sent from node A to node D. There are 2 candidates for each node to reach the next hop, but only one is used - if possible, not the one which received the packets in the first place.
+To be usable for the target features, the links must have a similar quality and should operate on a different frequency. Therefore, in batman-adv only links are further considered if:
-If a packet comes in, we have two links available for the next hop. We can now search through the list of candidates and can choose a candidate which is not going over the receiving interface.
+ * the link quality is not much worse than the best link within a certain TQ threshold (now: 50)
+ * the link destination is different from the other already selected candidates - e.g. if A1-B1 was selected, A2-B1 would be forbidden as they would operate on the same frequency and therefore would interfere with each other
-This mechanism should avoid interferences and congestion of a wifi channel, and thus should avoid problems with the half-duplex nature of WiFi hardware. As we currently don't see any scenarios where the interface alternating could cause disadvantages, we set it to default in the upcoming batman-adv 0.3.0 release.
+In the illustration below, A1-B1 and A2-B2 meet this criteria and are therefore selected as candidates.
+
+!interface_detection.dia.jpg!
+Implementation note: Detected links are internally stored within the originator structure of the primary originator. The candidates are internally called "bonding candidates"
-h2. Bonding
+h2. Using the candidates
+Once a neighbor mesh node has been selected by the classic routing algorithm, the individual links can now be equally be selected to send data to the next neighbor without tampering with routing. Possible mechanisms exploiting this fact are described below.
-In bonding, we split a single stream and distribute the packets over multiple links. Packets are sent in a round-robin fashion over the available candidates. This can be used to increase the throughput for data streams from node A to node B. In a perfect environemt the throughput is n times higher, where n is the number of candidates.
+Implementation note: the manipulations are hooked in the tx path when selecting a neighbor in find_router()
+
+h3. Interface Alternating
+
+Interface Alternating basically tries to forward a packet on another interface than on which the frame was received. This is only done if suitable candidate with another source interface exists.
+
+!alternation_chain.dia.jpg!
+
+This feature is always enabled.
+
+h3. Bonding
+
+In bonding, we split a single stream and distribute the packets over multiple links. Packets are sent in a round-robin fashion over the available candidates. This can be used to increase the throughput for data streams from node A to node B. In a perfect environment the throughput is n times higher, where n is the number of candidates.
!bonding_roundrobin.dia.jpg!
-However, with the round-robin way of sending packets, the actual throughput is limited by the link with the worst bandwidth. Also the errors and instabilities of all links are aggregated, which makes the link more fragile. For this reason, the bonding feature can be enabled optionally, and should be enabled in setups with high quality links.
+Practice shows however that the theoretical bandwidth gain is not reached - even if the links are physically disjoint. E.g. using a 2.4 GHz and a 5 GHz with a modulation of 54 Mbit/s both has shown to gain 150%25 bandwith boost over a single link, not 200%25 as expected in theory. Possible reasons may be the packet reordering and slightly different queue load caused by random backoffs, retries, etc. For these reasons, bonding must be enabled explicitly.
+
+h2. Discussion and further work
+
+As explained, the bonding mode stays behind the theoretical expectations. The packet loss based TQ metric is also not optimal for selecting bonding candidates - a bandwidth based metric would be more suitable for this task, as slow links will slow down the whole aggregated connection.
-There are already ideas how to improve the situation with links of differend bandwidth, e.g. sending packets packets on interfaces where the queue has the least packets. Comments and patches [[open-mesh:MailingList| are appreciated]].
+These shortcomings would be subject to further improvements of this featureset.
\ No newline at end of file
[View Less]
Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit b1c6dd77b55d957fa5522019e42a9f83484dfca1
Author: Simon Wunderlich <sw(a)simonwunderlich.de>
Date: Tue Apr 10 22:04:11 2012 +0000
doc: batman-adv/Multi-link-optimizations-technical
>---------------------------------------------------------------
b1c6dd77b55d957fa5522019e42a9f83484dfca1
batman-adv/Multi-link-…
[View More]optimizations-technical.textile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/batman-adv/Multi-link-optimizations-technical.textile b/batman-adv/Multi-link-optimizations-technical.textile
index fac833e4..9c3dbd5c 100644
--- a/batman-adv/Multi-link-optimizations-technical.textile
+++ b/batman-adv/Multi-link-optimizations-technical.textile
@@ -24,7 +24,7 @@ The detection part is specific to batman-adv. The first interface in batman-adv
Note that it does not matter which interface is the primary interface, it is only used to have a single Originator known in the mesh (and thus avoid too much OGM overhead).
-!primary_flag.dia.png!
+!primary_flag.png!
The PRIMARIES_FIRST_HOP flag is only set for OGMs of the primary interface, and only on the first hop - it is unset when rebroadcasted by another node.
[View Less]
Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit 15968fbec2c4b81068667c89a0096053c71ce444
Author: Marek Lindner <mareklindner(a)neomailbox.ch>
Date: Wed Apr 4 11:21:19 2012 +0000
doc: batman-adv/Release-todo
>---------------------------------------------------------------
15968fbec2c4b81068667c89a0096053c71ce444
batman-adv/Release-todo.textile | 4 +---
1 file …
[View More]changed, 1 insertion(+), 3 deletions(-)
diff --git a/batman-adv/Release-todo.textile b/batman-adv/Release-todo.textile
index 2a142c49..50f9f885 100644
--- a/batman-adv/Release-todo.textile
+++ b/batman-adv/Release-todo.textile
@@ -25,9 +25,7 @@ h2. Code
* [x] remove dead code (if any)
* [x] check against kernel versions
* [x] check that maint branch is merged in next
-* [ ] check for open patches on the ml
-** batman-adv: unset the TT_CLIENT_PENDING flag if the new local entry already exists
-** batman-adv: Add routing_algo to README
+* [x] check for open patches on the ml
* [x] git tag release
[View Less]
Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit 61552069b2389aa512cfe9c1d3ca572e21268546
Author: Antonio Quartulli <a(a)unstable.cc>
Date: Tue Apr 3 00:58:35 2012 +0000
doc: batman-adv/SubmittingLinux
>---------------------------------------------------------------
61552069b2389aa512cfe9c1d3ca572e21268546
batman-adv/SubmittingLinux.textile | 2 +-
1 file …
[View More]changed, 1 insertion(+), 1 deletion(-)
diff --git a/batman-adv/SubmittingLinux.textile b/batman-adv/SubmittingLinux.textile
index ab235bfd..4770d482 100644
--- a/batman-adv/SubmittingLinux.textile
+++ b/batman-adv/SubmittingLinux.textile
@@ -257,7 +257,7 @@ Switched to branch 'patches'
h2. check if all patches build cleanly
-It must be checked whether it builds with allnoconfig (@+NET@,@+CRC16@,@+/-MODULES@) as module/builtin and allyesconfig as module/builtin
+It must be checked whether it builds with allnoconfig (@+NET@,@+CRC16@,@+/-MODULES@) as module/builtin and allyesconfig as module/builtin. If you are compiling with BLA or DAT you need to specify @+INET@ as well.
<pre>
'-(%25)-(patches)> make
[View Less]
Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit dcec334bbc12a6ea73328472216186c79367263f
Author: Sven Eckelmann <sven(a)narfation.org>
Date: Fri Mar 30 18:49:30 2012 +0000
doc: batman-adv/Release-todo
>---------------------------------------------------------------
dcec334bbc12a6ea73328472216186c79367263f
batman-adv/Release-todo.textile | 6 +++---
1 file …
[View More]changed, 3 insertions(+), 3 deletions(-)
diff --git a/batman-adv/Release-todo.textile b/batman-adv/Release-todo.textile
index 2c6ff14b..e7ba8ad3 100644
--- a/batman-adv/Release-todo.textile
+++ b/batman-adv/Release-todo.textile
@@ -47,8 +47,8 @@ h2. Distributions
h2. Aftershow
-* [ ] Merge next into master branch (to get changes on README, CHANGELOG, ...)
-* [ ] Merge current git tag into maint (must be fast-forward or pre-tagging steps were done wrong)
-* [ ] Merge patches from master into next (to get all the fancy new features)
+* [x] Merge next into master branch (to get changes on README, CHANGELOG, ...)
+* [x] Merge current git tag into maint (must be fast-forward or pre-tagging steps were done wrong)
+* [x] Merge patches from master into next (to get all the fancy new features)
* [ ] Rebase patches in next on top of last linux -rc1 and send it to kernel maintainers for future kernels ([[SubmittingLinux]])
* [ ] Enable daily check for next/master (symbol check, cppcheck, feature check)
\ No newline at end of file
[View Less]
Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit 7aacb927c20a0795bb9e8df31a0dc3e170a946ed
Author: Antonio Quartulli <a(a)unstable.cc>
Date: Tue Apr 3 00:59:42 2012 +0000
doc: batman-adv/SubmittingLinux
>---------------------------------------------------------------
7aacb927c20a0795bb9e8df31a0dc3e170a946ed
batman-adv/SubmittingLinux.textile | 4 ++--
1 file …
[View More]changed, 2 insertions(+), 2 deletions(-)
diff --git a/batman-adv/SubmittingLinux.textile b/batman-adv/SubmittingLinux.textile
index 4770d482..b6210e43 100644
--- a/batman-adv/SubmittingLinux.textile
+++ b/batman-adv/SubmittingLinux.textile
@@ -206,7 +206,7 @@ Successfully rebased and updated refs/heads/patches
h2. check if all patches compile cleanly against our linux tree with sparse (cgcc)
-We assume that the linux-merge tree was already build with @make allnoconfig@ and then enabling @CONFIG_NET=y@, @CONFIG_MODULES=y@ and @CONFIG_CRC16=y@
+We assume that the linux-merge tree was already build with @make allnoconfig@ and then enabling @CONFIG_NET=y@, @CONFIG_MODULES=y@ and @CONFIG_CRC16=y@ (enable CONFIG_INET=y if you want to compile also DAT or BLA)
<pre>
'-(%25)-(patches)> git rev-list --reverse origin/merge/master..
@@ -257,7 +257,7 @@ Switched to branch 'patches'
h2. check if all patches build cleanly
-It must be checked whether it builds with allnoconfig (@+NET@,@+CRC16@,@+/-MODULES@) as module/builtin and allyesconfig as module/builtin. If you are compiling with BLA or DAT you need to specify @+INET@ as well.
+It must be checked whether it builds with allnoconfig (@+NET@,@+CRC16@,@+/-MODULES@,@+INET@) as module/builtin and allyesconfig as module/builtin
<pre>
'-(%25)-(patches)> make
[View Less]
Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit 907e3a46b7f509c6c2d8a4a8e0067a3aa09a7f15
Author: Sven Eckelmann <sven(a)narfation.org>
Date: Fri Mar 30 19:41:11 2012 +0000
doc: batman-adv/Release-todo
>---------------------------------------------------------------
907e3a46b7f509c6c2d8a4a8e0067a3aa09a7f15
batman-adv/Release-todo.textile | 6 +++---
1 file …
[View More]changed, 3 insertions(+), 3 deletions(-)
diff --git a/batman-adv/Release-todo.textile b/batman-adv/Release-todo.textile
index e7ba8ad3..2a142c49 100644
--- a/batman-adv/Release-todo.textile
+++ b/batman-adv/Release-todo.textile
@@ -37,12 +37,12 @@ h2. Release
* [x] move packages/checksums to stable/sources / create symlinks from releases
* [x] update download links in the redmine downloads page
* [ ] send release mail
-* [ ] update IRC channel topic
+* [x] update IRC channel topic
h2. Distributions
* [ ] update openwrt package
-* [ ] update debian package
+* [x] update debian package
h2. Aftershow
@@ -51,4 +51,4 @@ h2. Aftershow
* [x] Merge current git tag into maint (must be fast-forward or pre-tagging steps were done wrong)
* [x] Merge patches from master into next (to get all the fancy new features)
* [ ] Rebase patches in next on top of last linux -rc1 and send it to kernel maintainers for future kernels ([[SubmittingLinux]])
-* [ ] Enable daily check for next/master (symbol check, cppcheck, feature check)
\ No newline at end of file
+* [x] Enable daily check for next/master (symbol check, cppcheck, feature check)
\ No newline at end of file
[View Less]
Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit bebb236e1d5864fd47e19d2d2391d78ea1039d3a
Author: Sven Eckelmann <sven(a)narfation.org>
Date: Mon Apr 9 09:35:41 2012 +0000
doc: open-mesh/FAQ
>---------------------------------------------------------------
bebb236e1d5864fd47e19d2d2391d78ea1039d3a
open-mesh/FAQ.textile | 2 +-
1 file changed, 1 insertion(+), 1 …
[View More]deletion(-)
diff --git a/open-mesh/FAQ.textile b/open-mesh/FAQ.textile
index ac9fca85..7f6b3bf9 100644
--- a/open-mesh/FAQ.textile
+++ b/open-mesh/FAQ.textile
@@ -15,7 +15,7 @@ h2. How to make my mesh network secure ?
What kind of security do you need? Security is a big field. Maybe you just mean encryption and authentication.....
-When you only want to make the whole wlan stuff unreadable for the outside, you could just use WPA_NONE. But this doesn't resolve the problem that the key could leak and make the mesh attackable - but that is something which could always happen. So it is probably not a solution for wifi community projects, but for mesh networks controlled by a company.
+When you only want to make the whole wlan stuff unreadable for the outside, you could just use WPA_NONE or IBSS RSN. But this doesn't resolve the problem that the key could leak and make the mesh attackable - but that is something which could always happen. So it is probably not a solution for wifi community projects, but for mesh networks controlled by a company.
There are other ideas for traffic over batman-adv. Just forget about encrypting your data on the wifi layer, but instead do everything some layers above. Some people experimented with the idea of implementing the needed authentication and encryption over IPsec.
[View Less]
Repository : ssh://git@open-mesh.org/doc
On branches: backup-redmine/2017-07-13,master
>---------------------------------------------------------------
commit 9a1f4e0fcbfbc8286e3e164ec5aeab304c616f98
Author: Simon Wunderlich <sw(a)simonwunderlich.de>
Date: Fri Mar 30 18:45:25 2012 +0000
doc: open-mesh/Download
>---------------------------------------------------------------
9a1f4e0fcbfbc8286e3e164ec5aeab304c616f98
open-mesh/Download.textile | 5 +++--
1 file changed, 3 …
[View More]insertions(+), 2 deletions(-)
diff --git a/open-mesh/Download.textile b/open-mesh/Download.textile
index 0a7cbd66..cca1c58b 100644
--- a/open-mesh/Download.textile
+++ b/open-mesh/Download.textile
@@ -7,8 +7,8 @@ Please use the maint branch for your public infrastructure unless you know exact
h2. Download Released Source Code
-* The latest version of [[batman-adv:Wiki|batman-adv]] is "batman-adv-2012.0.0.tar.gz":http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2012.0.0.tar.gz "md5":http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2012.0.0.tar.gz.md5 "sha1":http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2012.0.0.tar.gz.sha1 "asc":http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2012.0.0.tar.gz.asc
-* The latest version of batctl (management and control tool for batman-adv) is "batctl-2012.0.0.tar.gz":http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2012.0.0.tar.gz "md5":http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2012.0.0.tar.gz.md5 "sha1":http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2012.0.0.tar.gz.sha1 "asc":http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2012.0.0.tar.gz.asc
+* The latest version of [[batman-adv:Wiki|batman-adv]] is "batman-adv-2012.1.0.tar.gz":http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2012.1.0.tar.gz "md5":http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2012.1.0.tar.gz.md5 "sha1":http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2012.1.0.tar.gz.sha1 "asc":http://downloads.open-mesh.org/batman/stable/sources/batman-adv/batman-adv-2012.1.0.tar.gz.asc
+* The latest version of batctl (management and control tool for batman-adv) is "batctl-2012.1.0.tar.gz":http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2012.1.0.tar.gz "md5":http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2012.1.0.tar.gz.md5 "sha1":http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2012.1.0.tar.gz.sha1 "asc":http://downloads.open-mesh.org/batman/stable/sources/batctl/batctl-2012.1.0.tar.gz.asc
* The latest stable version of batmand ([[open-mesh:BranchesExplained#batmand|unmaintained]]) is "batman-0.3.2.tar.gz":http://downloads.open-mesh.org/batman/releases/batman-0.3.2/batman-0.3.2.tar.gz "md5":http://downloads.open-mesh.org/batman/releases/batman-0.3.2/batman-0.3.2.tar.gz.md5 "sha1":http://downloads.open-mesh.org/batman/releases/batman-0.3.2/batman-0.3.2.tar.gz.sha1 "asc":http://downloads.open-mesh.org/batman/releases/batman-0.3.2/batman-0.3.2.tar.gz.asc
* The latest version of the vis server for the batmand (package not needed for batman-adv) is "vis-0.3.2.tar.gz":http://downloads.open-mesh.org/batman/releases/batman-0.3.2/vis-0.3.2.tar.gz "md5":http://downloads.open-mesh.org/batman/releases/batman-0.3.2/vis-0.3.2.tar.gz.md5 "sha1":http://downloads.open-mesh.org/batman/releases/batman-0.3.2/vis-0.3.2.tar.gz.sha1 "asc":http://downloads.open-mesh.org/batman/releases/batman-0.3.2/vis-0.3.2.tar.gz.asc
@@ -41,6 +41,7 @@ It follows an overview of linux versions and the batman-adv version they contain
* linux 3.1 => batman-adv 2011.3.x (get batctl 2011.3.x from "here":http://downloads.open-mesh.org/batman/stable/sources/batctl/)
* linux 3.2 => batman-adv 2011.4.x (get batctl 2011.4.x from "here":http://downloads.open-mesh.org/batman/stable/sources/batctl/)
* linux 3.3 => batman-adv 2012.0.x (get batctl 2012.0.x from "here":http://downloads.open-mesh.org/batman/stable/sources/batctl/)
+* linux 3.4 => batman-adv 2012.1.x (get batctl 2012.1.x from "here":http://downloads.open-mesh.org/batman/stable/sources/batctl/)
h2. Debian
[View Less]