The following commit has been merged in the master branch: commit 7d3967fa4457d61df3742807d8b8dd676bc3f399 Author: Simon Wunderlich simon.wunderlich@s2003.tu-chemnitz.de Date: Sun Jan 22 20:00:19 2012 +0100
batman-adv: add basic bridge loop avoidance code
This second version of the bridge loop avoidance for batman-adv avoids loops between the mesh and a backbone (usually a LAN).
By connecting multiple batman-adv mesh nodes to the same ethernet segment a loop can be created when the soft-interface is bridged into that ethernet segment. A simple visualization of the loop involving the most common case - a LAN as ethernet segment:
node1 <-- LAN --> node2 | | wifi <-- mesh --> wifi
Packets from the LAN (e.g. ARP broadcasts) will circle forever from node1 or node2 over the mesh back into the LAN.
With this patch, batman recognizes backbone gateways, nodes which are part of the mesh and backbone/LAN at the same time. Each backbone gateway "claims" clients from within the mesh to handle them exclusively. By restricting that only responsible backbone gateways may handle their claimed clients traffic, loops are effectively avoided.
Signed-off-by: Simon Wunderlich siwu@hrz.tu-chemnitz.de
diff --git a/packet.h b/packet.h index 45e75ed..caa12fe 100644 --- a/packet.h +++ b/packet.h @@ -90,6 +90,22 @@ enum tt_client_flags { TT_CLIENT_PENDING = 1 << 10 };
+/* claim frame types for the bridge loop avoidance */ +enum bla_claimframe { + CLAIM_TYPE_ADD = 0x00, + CLAIM_TYPE_DEL = 0x01, + CLAIM_TYPE_ANNOUNCE = 0x02, + CLAIM_TYPE_REQUEST = 0x03 +}; + +/* the destination hardware field in the ARP frame is used to + * transport the claim type and the group id */ +struct bla_claim_dst { + uint8_t magic[3]; /* FF:43:05 */ + uint8_t type; /* bla_claimframe */ + uint16_t group; /* group id */ +} __packed; + struct batman_header { uint8_t packet_type; uint8_t version; /* batman version field */