24 Jul, 2016

1 commit


06 Jul, 2016

1 commit

  • Speedy join only works when the received packet is either broadcast or an
    4addr unicast packet. Thus packets converted from broadcast to unicast via
    the gateway handling code have to be converted to 4addr packets to allow
    the receiving gateway server to add the sender address as temporary entry
    to the translation table.

    Not doing it will make the batman-adv gateway server drop the DHCP response
    in many situations because it doesn't yet have the TT entry for the
    destination of the DHCP response.

    Fixes: 371351731e9c ("batman-adv: change interface_rx to get orig node")
    Signed-off-by: Sven Eckelmann
    Acked-by: Antonio Quartulli
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     

05 Jul, 2016

7 commits

  • The orig_ifinfo reference counter for last_bonding_candidate in
    batadv_orig_node has to be reduced when an originator node is released.
    Otherwise the orig_ifinfo is leaked and the reference counter the netdevice
    is not reduced correctly.

    Fixes: f3b3d9018975 ("batman-adv: add bonding again")
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • The replacement of last_bonding_candidate in batadv_orig_node has to be an
    atomic operation. Otherwise it is possible that the reference counter of a
    batadv_orig_ifinfo is reduced which was no longer the
    last_bonding_candidate when the new candidate is added. This can either
    lead to an invalid memory access or to reference leaks which make it
    impossible to an interface which was added to batman-adv.

    Fixes: f3b3d9018975 ("batman-adv: add bonding again")
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • The pointer batadv_bla_claim::backbone_gw can be changed at any time.
    Therefore, access to it must be protected to ensure that two function
    accessing the same backbone_gw are actually accessing the same. This is
    especially important when the crc_lock is used or when the backbone_gw of a
    claim is exchanged.

    Not doing so leads to invalid memory access and/or reference leaks.

    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Fixes: 5a1dd8a4773d ("batman-adv: lock crc access in bridge loop avoidance")
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • batadv_orig_node_new uses batadv_orig_node_vlan_new to allocate a new
    batadv_orig_node_vlan and add it to batadv_orig_node::vlan_list. References
    to this list have also to be cleaned when the batadv_orig_node is removed.

    Fixes: 7ea7b4a14275 ("batman-adv: make the TT CRC logic VLAN specific")
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • vlan_insert_tag can return NULL on errors. The distributed arp table code
    therefore has to check the return value of vlan_insert_tag for NULL before
    it can safely operate on this pointer.

    Fixes: be1db4f6615b ("batman-adv: make the Distributed ARP Table vlan aware")
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • vlan_insert_tag can return NULL on errors. The bridge loop avoidance code
    therefore has to check the return value of vlan_insert_tag for NULL before
    it can safely operate on this pointer.

    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • Simon Wunderlich says:

    ====================
    This feature patchset includes the following changes:

    - Cleanup work by Markus Pargmann and Sven Eckelmann (six patches)

    - Initial Netlink support by Matthias Schiffer (two patches)

    - Throughput Meter implementation by Antonio Quartulli, a kernel-space
    traffic generator to estimate link speeds. This feature is useful on
    low-end WiFi APs where running iperf or netperf from userspace
    gives wrong results due to heavy userspace/kernelspace overhead.
    (two patches)

    - API clean-up work by Antonio Quartulli (one patch)
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     

04 Jul, 2016

5 commits

  • The routing API data structure contains several function
    pointers that can easily be grouped together based on the
    component they work with.

    Split the API in subobjects in order to improve definition readability.

    At the same time, remove the "bat_" prefix from the API object and
    its fields names. These are batman-adv private structs and there is no
    need to always prepend such prefix, which only makes function invocations
    much much longer.

    Signed-off-by: Antonio Quartulli
    Reviewed-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Antonio Quartulli
     
  • The throughput meter module is a simple, kernel-space replacement for
    throughtput measurements tool like iperf and netperf. It is intended to
    approximate TCP behaviour.

    It is invoked through batctl: the protocol is connection oriented, with
    cumulative acknowledgment and a dynamic-size sliding window.

    The test *can* be interrupted by batctl. A receiver side timeout avoids
    unlimited waitings for sender packets: after one second of inactivity, the
    receiver abort the ongoing test.

    Based on a prototype from Edo Monticelli

    Signed-off-by: Antonio Quartulli
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Antonio Quartulli
     
  • Return the proper netdev TX status along the TX path so that the tp_meter
    can understand when the queue is full and should stop sending packets.

    Signed-off-by: Antonio Quartulli
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Antonio Quartulli
     
  • BATADV_CMD_GET_MESH_INFO is used to query basic information about a
    batman-adv softif (name, index and MAC address for both the softif and
    the primary hardif; routing algorithm; batman-adv version).

    Signed-off-by: Matthias Schiffer
    Signed-off-by: Andrew Lunn
    [sven.eckelmann@open-mesh.com: Reduce the number of changes to
    BATADV_CMD_GET_MESH_INFO, add missing kerneldoc, add policy for attributes]
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Matthias Schiffer
     
  • debugfs is currently severely broken virtually everywhere in the kernel
    where files are dynamically added and removed (see
    http://lkml.iu.edu/hypermail/linux/kernel/1506.1/02196.html for some
    details). In addition to that, debugfs is not namespace-aware.

    Instead of adding new debugfs entries, the whole infrastructure should be
    moved to netlink. This will fix the long standing problem of large buffers
    for debug tables and hard to parse text files.

    Signed-off-by: Matthias Schiffer
    Signed-off-by: Andrew Lunn
    [sven.eckelmann@open-mesh.com: Strip down patch to only add genl family,
    add missing kerneldoc]
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Matthias Schiffer
     

02 Jul, 2016

1 commit

  • Simon Wunderlich says:

    ====================
    This feature patchset includes the following changes:

    - two patches with minimal clean up work by Antonio Quartulli and
    Simon Wunderlich

    - eight patches of B.A.T.M.A.N. V, API and documentation clean
    up work, by Antonio Quartulli and Marek Lindner

    - Andrew Lunn fixed the skb priority adoption when forwarding
    fragmented packets (two patches)

    - Multicast optimization support is now enabled for bridges which
    comes with some protocol updates, by Linus Luessing
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     

30 Jun, 2016

22 commits

  • Several cases of overlapping changes, except the packet scheduler
    conflicts which deal with the addition of the free list parameter
    to qdisc_enqueue().

    Signed-off-by: David S. Miller

    David S. Miller
     
  • The bat_algo.h had some functions declared which were not part of the
    bat_algo.c file. These are instead stored in bat_v.c and bat_iv_ogm.c. The
    declaration should therefore be also in bat_v.h and bat_iv_ogm,h to make
    them easier to find.

    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • This patch adds a debugfs table with originators and their according
    multicast flags to help users figure out why multicast optimizations
    might be enabled or disabled for them.

    Tested-by: Simon Wunderlich
    Signed-off-by: Linus Lüssing
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Linus Lüssing
     
  • There are several places in batman-adv which provide logging related
    functions. These should be grouped together in the log.* files to make them
    easier to find.

    Reported-by: Markus Pargmann
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • With this patch changes relevant to a node's own multicast flags are
    printed to the 'mcast' log level.

    Tested-by: Simon Wunderlich
    Signed-off-by: Linus Lüssing
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Linus Lüssing
     
  • The bat_algo functionality in main.c is mostly unrelated to the rest of the
    content. It still takes up a large portion of this source file (~15%, 103
    lines). Moving it to a separate file makes it better visible as a main
    component of the batman-adv implementation and hides it less in the other
    helper functions in main.c.

    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • With this patch we are finally able to support multicast optimizations
    in bridged setups, too. So far, if a bridge was added on top of a
    soft-interface (e.g. bat0) the batman-adv multicast optimizations
    needed to be disabled to avoid packetloss.

    Current Linux bridge implementations and API can now provide us
    with the so far missing information about interested but "remote"
    multicast receivers behind bridge ports.

    The Linux bridge performs the detection of remote participants
    interested in multicast packets with its own and mature so
    called IGMP and MLD snooping code and stores that in its
    database. With the new API provided by the bridge batman-adv can
    now simply hook into this database.

    We then reliably announce the gathered multicast listeners to
    other nodes through the batman-adv translation table.

    Additionally, the Linux bridge provides us with the information about
    whether an IGMP/MLD querier exists. If there is none then we need to
    disable multicast optimizations as we cannot learn about multicast
    listeners on external, bridged-in host then.

    Tested-by: Simon Wunderlich
    Signed-off-by: Linus Lüssing
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Linus Lüssing
     
  • The tvlv functionality in main.c is mostly unrelated to the rest of the
    content. It still takes up a large portion of this source file (~45%, 588
    lines). Moving it to a separate file makes it better visible as a main
    component of the batman-adv implementation and hides it less in the other
    helper functions in main.c

    Signed-off-by: Markus Pargmann
    [sven@narfation.org: fix conflicts with current version, fix includes,
    rewrote commit message]
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Markus Pargmann
     
  • With this patch IGMP or MLD reports are always flooded. This is
    necessary for the upcoming bridge integration to function without
    multicast packet loss.

    With the report handling so far bridges might miss interested multicast
    listeners, leading to wrongly excluding ports from multicast packet
    forwarding.

    Currently we are treating IGMP/MLD reports, the messages bridges use to
    learn about interested multicast listeners, just as any other multicast
    packet: We try to send them to nodes matching its multicast destination.

    Unfortunately, the destination address of reports of the older
    IGMPv2/MLDv1 protocol families do not strictly adhere to their own
    protocol: More precisely, the interested receiver, an IGMPv2 or MLDv1
    querier, itself usually does not listen to the multicast destination
    address of any reports.

    Therefore with this patch we are simply excluding IGMP/MLD reports from
    the multicast forwarding code path and keep flooding them. By that
    any bridge receives them and can properly learn about listeners.

    To avoid compatibility issues with older nodes not yet implementing this
    report handling, we need to force them to flood reports: We do this by
    bumping the multicast TVLV version to 2, effectively disabling their
    multicast optimization.

    Tested-by: Simon Wunderlich
    Signed-off-by: Linus Lüssing
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Linus Lüssing
     
  • It is easier to detect if a include is already there for a used
    functionality when the includes are ordered. Using an alphabetic order
    together with the grouping in commit 1e2c2a4fe4a5 ("batman-adv: Add
    required includes to all files") makes includes better manageable.

    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • Unfragmented frames which traverse a node have their skb->priority set
    by looking at the IP ToS byte, or the 802.1p header. However for
    fragments this is not possible, only one of the fragments will contain
    the headers. Instead, place the priority into the fragment header and
    on receiving a fragment, use this information to set the skb->priority
    for when the fragment is forwarded.

    Signed-off-by: Andrew Lunn
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Andrew Lunn
     
  • main.h includes statements which (re)define preprocessor variables which
    influence the compiled code. This makes it necessary to include it in all
    files. For example, it redefines pr_fmt used to the module as prefix for
    each pr_* message.

    Reported-by: Antonio Quartulli
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Sven Eckelmann
     
  • BATMAN will set the skb->priority based on the IP precedence or 802.1q
    tag. However, if it needs to fragment the frame, it currently leaves
    the fragment skb with the default priority and actually overwrites the
    priority in the unfragmented frame. Fix this.

    Signed-off-by: Andrew Lunn
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Andrew Lunn
     
  • The ELP interval and throughput override interface settings are initialized
    with default settings on every time an interface is added to a mesh.
    This patch prevents this behavior by moving the configuration init to the
    interface detection routine which runs only once per interface.

    Signed-off-by: Marek Lindner
    [a@unstable.cc: move initialization to batadv_v_hardif_init]
    Signed-off-by: Antonio Quartulli
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Marek Lindner
     
  • To reduce the field pollution in our main batadv_priv data structure
    we've already created some substructures so that we could group fields
    in a convenient manner.

    However gw_mode and gw_sel_class are still part of the main object.

    More both fields to the GW private substructure.

    Signed-off-by: Antonio Quartulli
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Antonio Quartulli
     
  • the compiler can optimize functions within the same C file and therefore
    there is no need to make it explicit.

    Remove the useless inline attribute for __batadv_store_uint_attr()

    Signed-off-by: Antonio Quartulli
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Antonio Quartulli
     
  • The ogm_emit and ogm_schedule API calls were rather tight to the
    B.A.T.M.A.N. IV logic and therefore rather difficult to use
    with other algorithm implementations.

    Remove such calls and move the surrounding logic into the
    B.A.T.M.A.N. IV specific code.

    Signed-off-by: Antonio Quartulli
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Antonio Quartulli
     
  • Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Marek Lindner
     
  • Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Simon Wunderlich

    Marek Lindner
     
  • Signed-off-by: Simon Wunderlich
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner

    Simon Wunderlich
     
  • To make it easier to search through the code it is better to print static
    strings directly instead of using format strings printing constants.

    This was addressed in a previous patch, but the Gateway table header
    was not updated accordingly.

    Signed-off-by: Antonio Quartulli
    Reviewed-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: Simon Wunderlich

    Antonio Quartulli
     
  • Signed-off-by: Simon Wunderlich
    Signed-off-by: Sven Eckelmann

    Simon Wunderlich
     

29 Jun, 2016

3 commits

  • The untagged vlan object is only destroyed when the interface is removed
    via the legacy sysfs interface. But it also has to be destroyed when the
    standard rtnl-link interface is used.

    Fixes: 5d2c05b21337 ("batman-adv: add per VLAN interface attribute framework")
    Signed-off-by: Sven Eckelmann
    Acked-by: Antonio Quartulli
    Signed-off-by: Marek Lindner
    Signed-off-by: David S. Miller

    Sven Eckelmann
     
  • The skb_linearize may reallocate the skb. This makes the calculated pointer
    for ethhdr invalid. But it the pointer is used later to fill in the RR
    field of the batadv_icmp_packet_rr packet.

    Instead re-evaluate eth_hdr after the skb_linearize+skb_cow to fix the
    pointer and avoid the invalid read.

    Fixes: da6b8c20a5b8 ("batman-adv: generalize batman-adv icmp packet handling")
    Signed-off-by: Sven Eckelmann
    Signed-off-by: Marek Lindner
    Signed-off-by: David S. Miller

    Sven Eckelmann
     
  • Each batadv_tt_local_entry hold a single reference to a
    batadv_softif_vlan. In case a new entry cannot be added to the hash
    table, the error path puts the reference, but the reference will also
    now be dropped by batadv_tt_local_entry_release().

    Fixes: a33d970d0b54 ("batman-adv: Fix reference counting of vlan object for tt_local_entry")
    Signed-off-by: Ben Hutchings
    Signed-off-by: Marek Lindner
    Signed-off-by: Sven Eckelmann
    Signed-off-by: David S. Miller

    Ben Hutchings