0001 .. SPDX-License-Identifier: GPL-2.0
0002
0003 ==========
0004 batman-adv
0005 ==========
0006
0007 Batman advanced is a new approach to wireless networking which does no longer
0008 operate on the IP basis. Unlike the batman daemon, which exchanges information
0009 using UDP packets and sets routing tables, batman-advanced operates on ISO/OSI
0010 Layer 2 only and uses and routes (or better: bridges) Ethernet Frames. It
0011 emulates a virtual network switch of all nodes participating. Therefore all
0012 nodes appear to be link local, thus all higher operating protocols won't be
0013 affected by any changes within the network. You can run almost any protocol
0014 above batman advanced, prominent examples are: IPv4, IPv6, DHCP, IPX.
0015
0016 Batman advanced was implemented as a Linux kernel driver to reduce the overhead
0017 to a minimum. It does not depend on any (other) network driver, and can be used
0018 on wifi as well as ethernet lan, vpn, etc ... (anything with ethernet-style
0019 layer 2).
0020
0021
0022 Configuration
0023 =============
0024
0025 Load the batman-adv module into your kernel::
0026
0027 $ insmod batman-adv.ko
0028
0029 The module is now waiting for activation. You must add some interfaces on which
0030 batman-adv can operate. The batman-adv soft-interface can be created using the
0031 iproute2 tool ``ip``::
0032
0033 $ ip link add name bat0 type batadv
0034
0035 To activate a given interface simply attach it to the ``bat0`` interface::
0036
0037 $ ip link set dev eth0 master bat0
0038
0039 Repeat this step for all interfaces you wish to add. Now batman-adv starts
0040 using/broadcasting on this/these interface(s).
0041
0042 To deactivate an interface you have to detach it from the "bat0" interface::
0043
0044 $ ip link set dev eth0 nomaster
0045
0046 The same can also be done using the batctl interface subcommand::
0047
0048 batctl -m bat0 interface create
0049 batctl -m bat0 interface add -M eth0
0050
0051 To detach eth0 and destroy bat0::
0052
0053 batctl -m bat0 interface del -M eth0
0054 batctl -m bat0 interface destroy
0055
0056 There are additional settings for each batadv mesh interface, vlan and hardif
0057 which can be modified using batctl. Detailed information about this can be found
0058 in its manual.
0059
0060 For instance, you can check the current originator interval (value
0061 in milliseconds which determines how often batman-adv sends its broadcast
0062 packets)::
0063
0064 $ batctl -M bat0 orig_interval
0065 1000
0066
0067 and also change its value::
0068
0069 $ batctl -M bat0 orig_interval 3000
0070
0071 In very mobile scenarios, you might want to adjust the originator interval to a
0072 lower value. This will make the mesh more responsive to topology changes, but
0073 will also increase the overhead.
0074
0075 Information about the current state can be accessed via the batadv generic
0076 netlink family. batctl provides a human readable version via its debug tables
0077 subcommands.
0078
0079
0080 Usage
0081 =====
0082
0083 To make use of your newly created mesh, batman advanced provides a new
0084 interface "bat0" which you should use from this point on. All interfaces added
0085 to batman advanced are not relevant any longer because batman handles them for
0086 you. Basically, one "hands over" the data by using the batman interface and
0087 batman will make sure it reaches its destination.
0088
0089 The "bat0" interface can be used like any other regular interface. It needs an
0090 IP address which can be either statically configured or dynamically (by using
0091 DHCP or similar services)::
0092
0093 NodeA: ip link set up dev bat0
0094 NodeA: ip addr add 192.168.0.1/24 dev bat0
0095
0096 NodeB: ip link set up dev bat0
0097 NodeB: ip addr add 192.168.0.2/24 dev bat0
0098 NodeB: ping 192.168.0.1
0099
0100 Note: In order to avoid problems remove all IP addresses previously assigned to
0101 interfaces now used by batman advanced, e.g.::
0102
0103 $ ip addr flush dev eth0
0104
0105
0106 Logging/Debugging
0107 =================
0108
0109 All error messages, warnings and information messages are sent to the kernel
0110 log. Depending on your operating system distribution this can be read in one of
0111 a number of ways. Try using the commands: ``dmesg``, ``logread``, or looking in
0112 the files ``/var/log/kern.log`` or ``/var/log/syslog``. All batman-adv messages
0113 are prefixed with "batman-adv:" So to see just these messages try::
0114
0115 $ dmesg | grep batman-adv
0116
0117 When investigating problems with your mesh network, it is sometimes necessary to
0118 see more detailed debug messages. This must be enabled when compiling the
0119 batman-adv module. When building batman-adv as part of the kernel, use "make
0120 menuconfig" and enable the option ``B.A.T.M.A.N. debugging``
0121 (``CONFIG_BATMAN_ADV_DEBUG=y``).
0122
0123 Those additional debug messages can be accessed using the perf infrastructure::
0124
0125 $ trace-cmd stream -e batadv:batadv_dbg
0126
0127 The additional debug output is by default disabled. It can be enabled during
0128 run time::
0129
0130 $ batctl -m bat0 loglevel routes tt
0131
0132 will enable debug messages for when routes and translation table entries change.
0133
0134 Counters for different types of packets entering and leaving the batman-adv
0135 module are available through ethtool::
0136
0137 $ ethtool --statistics bat0
0138
0139
0140 batctl
0141 ======
0142
0143 As batman advanced operates on layer 2, all hosts participating in the virtual
0144 switch are completely transparent for all protocols above layer 2. Therefore
0145 the common diagnosis tools do not work as expected. To overcome these problems,
0146 batctl was created. At the moment the batctl contains ping, traceroute, tcpdump
0147 and interfaces to the kernel module settings.
0148
0149 For more information, please see the manpage (``man batctl``).
0150
0151 batctl is available on https://www.open-mesh.org/
0152
0153
0154 Contact
0155 =======
0156
0157 Please send us comments, experiences, questions, anything :)
0158
0159 IRC:
0160 #batadv on ircs://irc.hackint.org/
0161 Mailing-list:
0162 b.a.t.m.a.n@open-mesh.org (optional subscription at
0163 https://lists.open-mesh.org/mailman3/postorius/lists/b.a.t.m.a.n.lists.open-mesh.org/)
0164
0165 You can also contact the Authors:
0166
0167 * Marek Lindner <mareklindner@neomailbox.ch>
0168 * Simon Wunderlich <sw@simonwunderlich.de>