26 Jan, 2017
1 commit
-
Signed-off-by: Sven Eckelmann
Signed-off-by: Simon Wunderlich
09 Aug, 2016
2 commits
-
This adds the commands BATADV_CMD_GET_TRANSTABLE_LOCAL and
BATADV_CMD_GET_TRANSTABLE_GLOBAL, which correspond to the transtable_local
and transtable_global debugfs files.The batadv_tt_client_flags enum is moved to the UAPI to expose it as part
of the netlink API.Signed-off-by: Matthias Schiffer
Signed-off-by: Andrew Lunn
[sven.eckelmann@open-mesh.com: add policy for attributes, fix includes]
Signed-off-by: Sven Eckelmann
[sw@simonwunderlich.de: fix VID attributes content]
Signed-off-by: Simon Wunderlich
Signed-off-by: Marek Lindner -
The translation table (global, local) is usually the part of batman-adv
which has the most dynamical allocated objects. Most of them
(tt_local_entry, tt_global_entry, tt_orig_list_entry, tt_change_node,
tt_req_node, tt_roam_node) are equally sized. So it makes sense to have
them allocated from a kmem_cache for each type.This approach allowed a small wireless router (TP-Link TL-841NDv8; SLUB
allocator) to store 34% more translation table entries compared to the
current implementation.[1] https://open-mesh.org/projects/batman-adv/wiki/Kmalloc-kmem-cache-tests
Reported-by: Linus Lüssing
Signed-off-by: Sven Eckelmann
Signed-off-by: Marek Lindner
Signed-off-by: Simon Wunderlich
02 Feb, 2016
1 commit
-
Signed-off-by: Sven Eckelmann
Signed-off-by: Marek Lindner
Signed-off-by: Antonio Quartulli
25 Aug, 2015
2 commits
-
main.h is included in every file and is the only way to access types.h.
This makes forward declarations for all types defined in types.h
unnecessary.Signed-off-by: Sven Eckelmann
Signed-off-by: Marek Lindner
Signed-off-by: Antonio Quartulli -
(s|u)(8|16|32|64) are the preferred types in the kernel. The use of the
standard C99 types u?int(8|16|32|64)_t are objected by some people and even
checkpatch now warns about using them.Signed-off-by: Sven Eckelmann
Signed-off-by: Marek Lindner
Signed-off-by: Antonio Quartulli
07 Jun, 2015
1 commit
-
The header files could not be build indepdent from each other. This is
happened because headers didn't include the files for things they've used.
This was problematic because the success of a build depended on the
knowledge about the right order of local includes.Also source files were not including everything they've used explicitly.
Instead they required that transitive includes are always stable. This is
problematic because some transitive includes are not obvious, depend on
config settings and may not be stable in the future.The order for include blocks are:
* primary headers (main.h and the *.h file of a *.c file)
* global linux headers
* required local headers
* extra forward declarations for pointers in function/struct declarationsThe only exceptions are linux/bitops.h and linux/if_ether.h in packet.h.
This header file is shared with userspace applications like batctl and must
therefore build together with userspace applications. The header
linux/bitops.h is not part of the uapi headers and linux/if_ether.h
conflicts with the musl implementation of netinet/if_ether.h. The
maintainers rejected the use of __KERNEL__ preprocessor checks and thus
these two headers are only in main.h. All files using packet.h first have
to include main.h to work correctly.Reported-by: Markus Pargmann
Signed-off-by: Sven Eckelmann
Signed-off-by: Marek Lindner
29 May, 2015
1 commit
-
Signed-off-by: Sven Eckelmann
Signed-off-by: Marek Lindner
22 Mar, 2014
1 commit
-
With this patch a multicast packet is not always simply flooded anymore,
the behaviour for the following cases is changed to reduce
unnecessary overhead:If all nodes within the horizon of a certain node have signalized
multicast listener announcement capability then an IPv6 multicast packet
with a destination of IPv6 link-local scope (excluding ff02::1) coming
from the upstream of this node...* ...is dropped if there is no according multicast listener in the
translation table,
* ...is forwarded via unicast if there is a single node with interested
multicast listeners
* ...and otherwise still gets flooded.Signed-off-by: Linus Lüssing
Signed-off-by: Marek Lindner
Signed-off-by: Antonio Quartulli
12 Jan, 2014
1 commit
-
Signed-off-by: Simon Wunderlich
Signed-off-by: Marek Lindner
Signed-off-by: Antonio Quartulli
09 Jan, 2014
3 commits
-
If a broadcast packet is coming from a client marked as
isolated, then mark the skb using the isolation mark so
that netfilter (or any other application) can recognise
them.The mark is written in the skb based on the mask value:
only bits set in the mask are substitued by those in the
mark valueSigned-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner -
A client sending packets which mark matches the value
configured via sysfs has to be identified as isolated using
the TT_CLIENT_ISOLA flag.The match is mask based, meaning that only bits set in the
mask are compared with those in the mark value.If the configured mask is equal to 0 no operation is
performed.Such flag is then advertised within the classic client
announcement mechanism.Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner -
As suggested by checkpatch, remove all the references to the
FSF address since the kernel already has one reference in
its documentation.In this way it is easier to update it in case of future
changes.Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner
23 Oct, 2013
1 commit
-
The local translation table size is limited by what can be
transferred from one node to another via a full table request.The number of entries fitting into a full table request depend
on whether the fragmentation is enabled or not. Therefore this
patch introduces a max table size check and refuses to add
more local clients when that size is reached. Moreover, if the
max full table packet size changes (MTU change or fragmentation
is disabled) the local table is downsized instantaneously.Signed-off-by: Marek Lindner
Acked-by: Antonio Quartulli
20 Oct, 2013
1 commit
-
Instead of unconditionally removing all the TT entries
served by a given originator, make tt_global_orig_del()
remove only entries matching a given VLAN identifier
provided as argument.If such argument is negative all the global entries
served by the originator are removed.This change is used into the BLA code to purge entries
served by a newly discovered Backbone node, but limiting
the operation only to those connected to the VLAN where the
backbone has been discovered.Cc: Simon Wunderlich
Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner
19 Oct, 2013
2 commits
-
AP isolation has to be enabled on one VLAN interface only.
This patch moves the AP isolation attribute to the per-vlan
interface attribute set, enabling it to have a different
value depending on the selected vlan.Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner -
To make the translation table code VLAN-aware, each entry
must carry the VLAN ID which it belongs to. This patch adds
such attribute to the related TT structures.Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner
12 Oct, 2013
2 commits
-
batadv_tt_global_add_orig is neither used nor implemented
anymore, therefore it is possible to remove its declarationSigned-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner -
batadv_tt_global_add is not used anymore outside of the TT
code thanks to the TVLV implementation. It can therefore be
declared as staticLast user has been removed by 3de4e64df0f1326db7cc0ef25f5af8522850252d
("batman-adv: tvlv - convert roaming adv packet to use tvlv unicast packets")Moreover make it return bool since its result can be either 0 or 1.
Reported-by: Simon Wunderlich
Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner
10 Oct, 2013
2 commits
-
Instead of generating TT specific packets the TVLV unicast API is used
to send translation table data.Signed-off-by: Marek Lindner
Signed-off-by: Antonio Quartulli -
The translation table meta data (version number, crc checksum, etc)
as well as the translation table diff propgated within OGMs now uses
the newly introduced tvlv infrastructure.Signed-off-by: Marek Lindner
Signed-off-by: Antonio Quartulli
29 May, 2013
1 commit
-
it may be the case that we want to store some local TT client flags in a global
entry, therefore the tt_global_add needs to get a proper argument for thisSigned-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner
19 Jan, 2013
1 commit
-
Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner
15 Nov, 2012
1 commit
-
tt_poss_change is a node-wide flag which tells whether the node is in a roaming
state (a client recently moved to/away from it) in order to let it apply special
re-routing rules. However this flag does not give a clear idea of the current
state because it is not possible to understand *which client* is actually
involved in the roaming. For this reason a better approach has been chosen:
instead of using a node-wide variable, the roaming state is now given by a
per-tt_entry ROAM flag which, in case of packet coming through the node, tells
the node whether the real destination is in roaming state or not.With this flag change, batadv_check_unicast_ttvn() has also been rearranged in
order to better fit the new re-routing logic and to be much more readable.Signed-off-by: Antonio Quartulli
29 Oct, 2012
1 commit
-
in case of client roaming a new global entry is added while a corresponding
local one is still present. In this case the node can safely pass the WIFI flag
from the local to the global entry.This change is required to let the AP-isolation correctly working in case of
roaming: if a generic WIFI client C roams from node A to B, A adds a global
entry for C without adding any WIFI flag. The latter will be set only later,
once A has received C's advertisement from B. In this time period the
AP-Isolation (if enabled) would not correctly work since C is not marked as
WIFI, so allowing it to communicate with other WIFI clients.Signed-off-by: Antonio Quartulli
23 Aug, 2012
1 commit
-
With the current TT mechanism a new client joining the network is not
immediately able to communicate with other hosts because its MAC address has not
been announced yet. This situation holds until the first OGM containing its
joining event will be spread over the mesh network.This behaviour can be acceptable in networks where the originator interval is a
small value (e.g. 1sec) but if that value is set to an higher time (e.g. 5secs)
the client could suffer from several malfunctions like DHCP client timeouts,
etc.This patch adds an early detection mechanism that makes nodes in the network
able to recognise "not yet announced clients" by means of the broadcast packets
they emitted on connection (e.g. ARP or DHCP request). The added client will
then be confirmed upon receiving the OGM claiming it or purged if such OGM
is not received within a fixed amount of time.Signed-off-by: Antonio Quartulli
02 Jul, 2012
2 commits
-
Reported-by: Martin Hundebøll
Signed-off-by: Sven Eckelmann -
Reported-by: Martin Hundebøll
Signed-off-by: Sven Eckelmann
28 Jun, 2012
1 commit
-
Instead of adding a new bool argument each time it is needed, it is better (and
simpler) to pass an 8bit flag argument which contains all the needed flagsSigned-off-by: Antonio Quartulli
Signed-off-by: Sven Eckelmann
21 Jun, 2012
2 commits
-
batman-adv doesn't follow the style for multiline comments that David S. Miller
prefers. All comments should be reformatted to follow this consistent style to
make the code slightly more readable.Signed-off-by: Sven Eckelmann
-
batman-adv can be compiled as part of the kernel instead of an module. In that
case the linker will see all non-static symbols of batman-adv and all other
non-static symbols of the kernel. This could lead to symbol collisions. A
prefix for the batman-adv symbols that defines their private namespace avoids
such a problem.Reported-by: David Miller
Signed-off-by: Sven Eckelmann
19 Jun, 2012
1 commit
-
Prior to this patch the translation table code made assumptions about how
the routing protocol works and where its buffers are stored (to directly
modify them).
Each protocol now calls the tt code with the relevant pointers, thereby
abstracting the code.Signed-off-by: Marek Lindner
Acked-by: Antonio Quartulli
Signed-off-by: Sven Eckelmann
14 May, 2012
1 commit
-
In case of a client X roaming from a generic node A to another node B, it is
possible that a third node C gets A's OGM but not B's. At this point in time, if
C wants to send data to X it will send a unicast packet destined to A. The
packet header will contain A's last ttvn (C got A's OGM and so it knows it).The packet will travel towards A without being intercepted because the ttvn
contained in its header is the newest for A.Once A will receive the packet, A's state will not report to be in a "roaming
phase" (because, after a roaming, once A sends out its OGM, all the changes are
committed and the node is considered not to be in the roaming state anymore)
and it will match the ttvn carried by the packet. Therefore there is no reason
for A to try to alter the packet's route, thus dropping the packet because the
destination client is not there anymore.However, C is well aware that it's routing information towards the client X is
outdated as it received an OGM from A saying that the client roamed away.
Thanks to this detail, this patch introduces a small change in behaviour: as
long as C is in the state of not knowing the new location of client X it will
forward the traffic to its last known location using ttvn-1 of the destination.
By using an older ttvn node A will be forced to re-route the packet.
Intermediate nodes are also allowed to update the packet's destination as long
as they have the information about the client's new location.Signed-off-by: Antonio Quartulli
11 May, 2012
1 commit
-
translation_table.{c,h} have been heavily modified by another contributor and
for legal purposes it is better to include his name into the contributor listSigned-off-by: Antonio Quartulli
11 Apr, 2012
1 commit
-
Signed-off-by: Sven Eckelmann
Acked-by: Antonio Quartulli
Signed-off-by: Antonio Quartulli
17 Feb, 2012
1 commit
-
Signed-off-by: Sven Eckelmann
Signed-off-by: Marek Lindner
22 Aug, 2011
4 commits
-
Signed-off-by: Marek Lindner
-
If a node has to send a packet issued by a WIFI client to another WIFI client,
the packet is dropped.Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner -
When a node receives a unicast packet it checks if the source and the
destination client can communicate or not due to the AP isolationSigned-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner -
Clients connected through a 802.11 device are now marked with the
TT_CLIENT_WIFI flag. This flag is also advertised with the tt
announcement.Signed-off-by: Antonio Quartulli
Signed-off-by: Marek Lindner