Hi!
Ubiquiti provides OpenWrt based SDK for their firmware. To my
information, it contains some proprietary madwifi-based WiFi drivers
with some older OpenWrt version. My question is how it would be
possible to run Batman on top of their firmware (thus not latest
OpenWrt). As Batman is in kernel, is is enough kernel-backwards
compatible to be able to run also on older (2.6) kernel versions? For
olsrd it is much simpler: you just install olsrd package and this is
it.
Mitar
I have an interesting hardware setup I'd like to explore.
Basically, I would like to take commodity ubiquiti and/or openmesh
hardware and build a mesh with two different node types, some having
just 1 radio and others having multiple radios, a standard node and a
super node.
the standard node is:
a picostation flashed to openwrt running batman-adv and running the
radio in Ad-Hoc mode. Alternately an OM2P flashed to openwrt. This
is the basic client radio
the super node is:
a group of picostations or nanostations, flashed openwrt in adhoc
mode, but acting only as the L2 transport with a router at the center
running batman-adv.
The idea is that the super nodes have multiple radios in multiple
channels and can take advantage of link alternation allowing super
nodes to keep much higher bandwidth between them while the standard
nodes are cheap. The 'router' MIGHT also have a radio for client
access (unifi station flashed to openwrt maybe, or an ALIX board)
The supernode will have more CPU and also be the target of
backhaul/shorthaul links to cut down on hop count. The main router
would also be a batman-adv device, probably an x86 server, and would
be the border router for the mesh.
some questions,
I know that the supernodes will have higher throughput capabilities
due to dual mesh radios, but how will batman-adv know this or how
would I tell it? Is the internal mechanism for determining the best
path going to take this into account? Is there a way to identify a
supernode as being a better path above and beyond the automatic
batman-adv mechanisms?
Is having separate radios connected to a batman-adv router going to
behave how I presume? That multiple node2node connections will be
identified and the links be alternated when appropriate?
If the supernodes have 2 mesh radios, 1 in 5Ghz and 1 in 2.4Ghz, then
the standard nodes will only be able to connect to the 2.4Ghz channel
which might make it inappropriate to do link alternating on these two
links because of the shared traffic. Should batman-adv automatically
stop alternating the tx/rx on these links when one of the channels
starts to get saturated?
some other info:
the supernodes may have a link directly to the main distribution
point, but may also be linked just to another supernode and not to the
main distribution point, or possibly both.
the supernodes are likely to have more than 2 mesh radios as some of
these could be direction antennas. A supernode might have 3x 2.4Ghz
radios for mesh, 2x 5Ghz radios for mesh, and a 2.4Ghz radio for
non-mesh clients. These would most likely all be connected to a
switch port and only be on a single ethernet interface as far as
batman-adv is concerned.
Hello David,
this is the new version of my last pull request (issued on 2012-04-25).
This patchset is intended for net-next/linux-3.5.
Since last series I only removed the biggest_unsigned_int() macro.
Let me know if there is any other problem.
Thank you,
Antonio
===============================================================
The following changes since commit 7a2a66a0ac1cf93d30869c4ecbfc71a2fda19397:
Add linux-next specific files for 20120423 (2012-04-23 16:58:43 +1000)
are available in the git repository at:
git://git.open-mesh.org/linux-merge.git tags/batman-adv-for-davem
for you to fetch changes up to 3ad345e2521ef41500cc0890a717656b975c4321:
batman-adv: split neigh_new function into generic and batman iv specific parts (2012-04-29 10:50:10 +0200)
----------------------------------------------------------------
Included changes:
* a new feature has been introduced: D.A.T. (Distributed ARP Table). It is a
mechanism based on DHT theory that creates a distributed (mesh network wide)
ARP cache in order to speed up ARP resolutions in sparse wireless mesh
networks.
* in order to satisfy DAT requirements a new unicast packet type, namely
UNICAST_4ADDR, has been introduced. Backward compatibility has been kept: not
updated nodes will simply drop the packet and ignore DAT mechanism.
* minor fixes and cleanups
* minor routing protocol API cleanups
----------------------------------------------------------------
Antonio Quartulli (9):
batman-adv: add UNICAST_4ADDR packet type
batman-adv: add a new log level for DAT debugging
batman-adv: add biggest_unsigned_int(x) macro
batman-adv: Distributed ARP Table - create DHT helper functions
batman-adv: Distributed ARP Table - add ARP parsing functions
batman-adv: Distributed ARP Table - add snooping functions for ARP messages
batman-adv: Distributed ARP Table - increase default soft_iface ARP table timeout
batman-adv: Distributed ARP Table - add compile option
batman-adv: fix wrong dhcp option list browsing
Marek Lindner (6):
batman-adv: introduce is_single_hop_neigh variable to increase readability
batman-adv: introduce packet type handler array for incoming packets
batman-adv: register batman ogm receive function during protocol init
batman-adv: rename last_valid to last_seen
batman-adv: replace HZ calculations with jiffies_to_msecs()
batman-adv: split neigh_new function into generic and batman iv specific parts
Documentation/networking/batman-adv.txt | 3 +-
net/batman-adv/Kconfig | 10 +
net/batman-adv/Makefile | 1 +
net/batman-adv/bat_debugfs.c | 4 +-
net/batman-adv/bat_iv_ogm.c | 95 +++--
net/batman-adv/bat_sysfs.c | 2 +-
net/batman-adv/distributed-arp-table.c | 605 +++++++++++++++++++++++++++++++
net/batman-adv/distributed-arp-table.h | 140 +++++++
net/batman-adv/gateway_client.c | 6 +-
net/batman-adv/hard-interface.c | 116 +-----
net/batman-adv/main.c | 124 ++++++-
net/batman-adv/main.h | 21 +-
net/batman-adv/originator.c | 52 +--
net/batman-adv/originator.h | 6 +-
net/batman-adv/packet.h | 30 +-
net/batman-adv/routing.c | 30 +-
net/batman-adv/routing.h | 4 +-
net/batman-adv/send.c | 6 +-
net/batman-adv/soft-interface.c | 17 +-
net/batman-adv/types.h | 33 +-
net/batman-adv/unicast.c | 102 +++++-
net/batman-adv/unicast.h | 21 +-
22 files changed, 1202 insertions(+), 226 deletions(-)
create mode 100644 net/batman-adv/distributed-arp-table.c
create mode 100644 net/batman-adv/distributed-arp-table.h
I would like to organize a kind of collaboration-site on all practical
aspects of batman-adv installation.
It could be a platform to discuss, interchange know how dealing with
all aspects of batman-adv mesh application
As i did switch from AWDS-L2 to batman-adv, i am about to start
gathering some samples of code & information i thought would be viable
to help getting a batman-mesh running.
Anyone interested please respond to discuss how this might be setup.
(example: www.teamlab.com )
In case there exists something like this please notify me.
regards
3zl
I'd like to propose the following changes for net-next/linux-3.5.
The first 8 patches introduce a new feature called D.A.T. (Distributed ARP
Table) which is the resulting implementation of Antonio Quartulli's GSOC 2011
Project[0]. This feature aims to improve reliability of ARP resolutions in
sparse wireless mesh networks by creating either a local and a
network-wide-distributed ARP cache. Major details can be found on its
wikipage[1].
It is an optional feature and it is possible to choose whether to compile it
or not by using the proper Kconfig option (=n by default). We are evaluating the
possibility of introducing a runtime switch to turn the behaviour on an off
without recompiling the module (like for the bridge loop avoidance).
Patch 1 also introduces a new packet type, but backward compatibility is
preserved.
Patch 9 fixes a bug in the "gw propagation" feature introduced so far.
Patch 11 and 12 are yet other improvements for the new
routing-protocol-API.
The others are minor fixes and cleanups.
Thank you very much,
Antonio
[0] http://www.google-melange.com/gsoc/project/google/gsoc2011/ordex/4001
[1] http://www.open-mesh.org/wiki/batman-adv/DistributedArpTable
The following changes since commit 7a2a66a0ac1cf93d30869c4ecbfc71a2fda19397:
Add linux-next specific files for 20120423 (2012-04-23 16:58:43 +1000)
are available in the git repository at:
git://git.open-mesh.org/linux-merge.git tags/batman-adv-for-davem
for you to fetch changes up to cc01b7a1f16291cc48fa6d261aa952d45604f10c:
batman-adv: split neigh_new function into generic and batman iv specific parts (2012-04-24 10:11:31 +0200)
----------------------------------------------------------------
Included changes:
* a new feature has been introduced: D.A.T. (Distributed ARP Table). It is a
mechanism based on DHT theory that creates a distributed (mesh network wide)
ARP cache in order to speed up ARP resolutions in sparse wireless mesh
networks.
* in order to satisfy DAT requirements a new unicast packet type, namely
UNICAST_4ADDR, has been introduced. Backward compatibility has been kept: not
updated nodes will simply drop the packet and ignore DAT mechanism.
* minor fixes and cleanups
* minor routing protocol API cleanups
----------------------------------------------------------------
Antonio Quartulli (9):
batman-adv: add UNICAST_4ADDR packet type
batman-adv: add a new log level for DAT debugging
batman-adv: add biggest_unsigned_int(x) macro
batman-adv: Distributed ARP Table - create DHT helper functions
batman-adv: Distributed ARP Table - add ARP parsing functions
batman-adv: Distributed ARP Table - add snooping functions for ARP messages
batman-adv: Distributed ARP Table - increase default soft_iface ARP table timeout
batman-adv: Distributed ARP Table - add compile option
batman-adv: fix wrong dhcp option list browsing
Marek Lindner (6):
batman-adv: introduce is_single_hop_neigh variable to increase readability
batman-adv: introduce packet type handler array for incoming packets
batman-adv: register batman ogm receive function during protocol init
batman-adv: rename last_valid to last_seen
batman-adv: replace HZ calculations with jiffies_to_msecs()
batman-adv: split neigh_new function into generic and batman iv specific parts
Documentation/networking/batman-adv.txt | 3 +-
net/batman-adv/Kconfig | 10 +
net/batman-adv/Makefile | 1 +
net/batman-adv/bat_debugfs.c | 4 +-
net/batman-adv/bat_iv_ogm.c | 95 +++--
net/batman-adv/bat_sysfs.c | 2 +-
net/batman-adv/distributed-arp-table.c | 605 +++++++++++++++++++++++++++++++
net/batman-adv/distributed-arp-table.h | 140 +++++++
net/batman-adv/gateway_client.c | 6 +-
net/batman-adv/hard-interface.c | 116 +-----
net/batman-adv/main.c | 124 ++++++-
net/batman-adv/main.h | 24 +-
net/batman-adv/originator.c | 52 +--
net/batman-adv/originator.h | 6 +-
net/batman-adv/packet.h | 30 +-
net/batman-adv/routing.c | 30 +-
net/batman-adv/routing.h | 4 +-
net/batman-adv/send.c | 6 +-
net/batman-adv/soft-interface.c | 17 +-
net/batman-adv/types.h | 33 +-
net/batman-adv/unicast.c | 102 +++++-
net/batman-adv/unicast.h | 21 +-
22 files changed, 1205 insertions(+), 226 deletions(-)
create mode 100644 net/batman-adv/distributed-arp-table.c
create mode 100644 net/batman-adv/distributed-arp-table.h
As suggested by David S. Miller, this macro is not very useful. So we can remove
it and use its expanded version instead.
Signed-off-by: Antonio Quartulli <ordex(a)autistici.org>
---
This patch should be committed into next because it has to be sent to David S.
Miller within the next pull request.
Thank you
distributed-arp-table.h | 2 +-
main.h | 3 ---
2 files changed, 1 insertion(+), 4 deletions(-)
diff --git a/distributed-arp-table.h b/distributed-arp-table.h
index 5e23577..6c0acde 100644
--- a/distributed-arp-table.h
+++ b/distributed-arp-table.h
@@ -29,7 +29,7 @@
#include <linux/if_arp.h>
-#define DAT_ADDR_MAX biggest_unsigned_int(dat_addr_t)
+#define DAT_ADDR_MAX ((dat_addr_t)~(dat_addr_t)0)
#define ARP_HW_SRC(skb, hdr_size) ((uint8_t *)(skb->data + hdr_size) + \
ETH_HLEN + sizeof(struct arphdr))
diff --git a/main.h b/main.h
index 97d0258..426a0d5 100644
--- a/main.h
+++ b/main.h
@@ -241,9 +241,6 @@ static inline bool has_timed_out(unsigned long timestamp, unsigned int timeout)
/* Returns the smallest signed integer in two's complement with the sizeof x */
#define smallest_signed_int(x) (1u << (7u + 8u * (sizeof(x) - 1u)))
-/* Returns the biggest unsigned integer with the sizeof x */
-#define biggest_unsigned_int(x) (~(x)0)
-
/* Checks if a sequence number x is a predecessor/successor of y.
* they handle overflows/underflows and can correctly check for a
* predecessor/successor unless the variable sequence number has grown by
--
1.7.9.4