linux/net/batman-adv
Antonio Quartulli 3275e7cc84 batman-adv: improve unicast packet (re)routing
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 <ordex@autistici.org>
2012-05-13 19:06:38 +02:00
..
bat_algo.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
bat_debugfs.c batman-adv: replace HZ calculations with jiffies_to_msecs() 2012-05-11 10:08:13 +02:00
bat_debugfs.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
bat_iv_ogm.c batman-adv: fix checkpatch string complaint 2012-05-11 13:56:06 +02:00
bat_sysfs.c batman-adv: Adding hard_iface specific sysfs wrapper macros for UINT 2012-05-11 13:56:03 +02:00
bat_sysfs.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
bitarray.c batman-adv: Replace bitarray operations with bitmap 2012-04-11 14:28:58 +02:00
bitarray.h batman-adv: Replace bitarray operations with bitmap 2012-04-11 14:28:58 +02:00
bridge_loop_avoidance.c batman-adv: update copyright years 2012-05-11 13:56:07 +02:00
bridge_loop_avoidance.h batman-adv: update copyright years 2012-05-11 13:56:07 +02:00
gateway_client.c batman-adv: fix wrong dhcp option list browsing 2012-05-11 10:08:08 +02:00
gateway_client.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
gateway_common.c batman-adv: Ignore 80-chars per line limits for strings 2012-03-11 06:29:44 +08:00
gateway_common.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
hard-interface.c batman-adv: refactoring API: find generalized name for bat_ogm_update_mac callback 2012-05-11 13:56:01 +02:00
hard-interface.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
hash.c batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
hash.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
icmp_socket.c batman-adv: use ETH_HLEN instead of sizeof(struct ethhdr) 2012-04-18 09:54:01 +02:00
icmp_socket.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
Kconfig batman-adv: add bridge loop avoidance compile option 2012-04-11 14:29:00 +02:00
main.c batman-adv: refactoring API: find generalized name for bat_ogm_update_mac callback 2012-05-11 13:56:01 +02:00
main.h batman-adv: introduce packet type handler array for incoming packets 2012-05-11 10:08:10 +02:00
Makefile batman-adv: add bridge loop avoidance compile option 2012-04-11 14:29:00 +02:00
originator.c batman-adv: split neigh_new function into generic and batman iv specific parts 2012-05-11 13:55:57 +02:00
originator.h batman-adv: split neigh_new function into generic and batman iv specific parts 2012-05-11 13:55:57 +02:00
packet.h batman-adv: avoid temporary routing loops by being strict on forwarded OGMs 2012-05-11 13:56:05 +02:00
ring_buffer.c batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
ring_buffer.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
routing.c batman-adv: improve unicast packet (re)routing 2012-05-13 19:06:38 +02:00
routing.h batman-adv: register batman ogm receive function during protocol init 2012-05-11 10:08:11 +02:00
send.c batman-adv: replace HZ calculations with jiffies_to_msecs() 2012-05-11 10:08:13 +02:00
send.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
soft-interface.c batman-adv: use ETH_HLEN instead of sizeof(struct ethhdr) 2012-04-18 09:54:01 +02:00
soft-interface.h batman-adv: remove old bridge loop avoidance code 2012-04-11 14:28:58 +02:00
translation-table.c batman-adv: improve unicast packet (re)routing 2012-05-13 19:06:38 +02:00
translation-table.h batman-adv: improve unicast packet (re)routing 2012-05-13 19:06:38 +02:00
types.h batman-adv: refactoring API: find generalized name for bat_ogm_update_mac callback 2012-05-11 13:56:01 +02:00
unicast.c batman-adv: improve unicast packet (re)routing 2012-05-13 19:06:38 +02:00
unicast.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00
vis.c batman-adv: use ETH_HLEN instead of sizeof(struct ethhdr) 2012-04-18 09:54:01 +02:00
vis.h batman-adv: Update copyright years 2012-02-17 02:50:21 +08:00