22 Mar, 2014

2 commits


12 Jan, 2014

3 commits

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

    Simon Wunderlich
     
  • For the network wide multi interface optimization there are different
    routers for each outgoing interface (outgoing from the OGM perspective,
    incoming for payload traffic). To reflect this, change the router and
    associated data to a list of routers.

    While at it, rename batadv_orig_node_get_router() to
    batadv_orig_router_get() to follow the new naming scheme.

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

    Simon Wunderlich
     
  • For the network wide multi interface optimization it is required to save
    metrics per outgoing interface in one neighbor. Therefore a new type is
    introduced to keep interface-specific information. This also requires
    some changes in access and list management.

    The compare and equiv_or_better API calls are changed to take the
    outgoing interface into consideration.

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

    Simon Wunderlich
     

09 Jan, 2014

1 commit


28 Dec, 2013

1 commit

  • The size of the batadv_header of 3 is problematic on some architectures
    which automatically pad all structures to a 32 bit boundary. To not lose
    performance by packing this struct, better embed it into the various
    host structures.

    Reported-by: Russell King
    Signed-off-by: Simon Wunderlich
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Simon Wunderlich
     

23 Oct, 2013

1 commit


10 Oct, 2013

1 commit


02 Oct, 2013

1 commit

  • batman-adv saves its table of packet handlers as a global state, so handlers
    must be set up only once (and setting them up a second time will fail).

    The recently-added network coding support tries to set up its handler each time
    a new softif is registered, which obviously fails when more that one softif is
    used (and in consequence, the softif creation fails).

    Fix this by splitting up batadv_nc_init into batadv_nc_init (which is called
    only once) and batadv_nc_mesh_init (which is called for each softif); in
    addition batadv_nc_free is renamed to batadv_nc_mesh_free to keep naming
    consistent.

    Signed-off-by: Matthias Schiffer
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Matthias Schiffer
     

29 May, 2013

3 commits


09 May, 2013

1 commit


23 Apr, 2013

1 commit

  • Conflicts:
    drivers/net/ethernet/emulex/benet/be_main.c
    drivers/net/ethernet/intel/igb/igb_main.c
    drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
    include/net/scm.h
    net/batman-adv/routing.c
    net/ipv4/tcp_input.c

    The e{uid,gid} --> {uid,gid} credentials fix conflicted with the
    cleanup in net-next to now pass cred structs around.

    The be2net driver had a bug fix in 'net' that overlapped with the VLAN
    interface changes by Patrick McHardy in net-next.

    An IGB conflict existed because in 'net' the build_skb() support was
    reverted, and in 'net-next' there was a comment style fix within that
    code.

    Several batman-adv conflicts were resolved by making sure that all
    calls to batadv_is_my_mac() are changed to have a new bat_priv first
    argument.

    Eric Dumazet's TS ECR fix in TCP in 'net' conflicted with the F-RTO
    rewrite in 'net-next', mostly overlapping changes.

    Thanks to Stephen Rothwell and Antonio Quartulli for help with several
    of these merge resolutions.

    Signed-off-by: David S. Miller

    David S. Miller
     

27 Mar, 2013

2 commits

  • As reported by checkpatch, seq_puts has to be preferred with
    respect to seq_printf when the format is a constant string
    (no va_args)

    Signed-off-by: Antonio Quartulli
    Signed-off-by: Marek Lindner

    Antonio Quartulli
     
  • Add a htonl() in network_coding.c when reading the sequence number
    from received ogm_packet, to avoid wrong byte ordering when comparing
    with a host value. This bug was introduced in
    3ed7ada3f0bbcd058567bc0a8f9729a73eba7db6 ("batman-adv: network coding -
    detect coding nodes and remove these after timeout").

    Change the type of coded_packet->coded_len from uint16 to __be16 to
    avoid wrong assumptions about endianness in later uses. Introduced in
    c3289f3650d34b60296000a629c99f2488f7c3dd ("batman-adv: network coding -
    code and transmit packets if possible").

    Reported-by: Fengguang Wu
    Signed-off-by: Martin Hundebøll
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Martin Hundebøll
     

14 Mar, 2013

6 commits

  • When receiving a network coded packet, the decoding buffer is searched
    for a packet to use for decoding. The source, destination, and crc32 from
    the coded packet is used to identify the wanted packet. The decoded
    packet is passed to the usual unicast receiver function, as had it never
    been network coded.

    Signed-off-by: Martin Hundebøll
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Martin Hundebøll
     
  • To be able to decode a network coded packet, a node must already know
    one of the two coded packets. This is done by buffering skbs before
    transmission and buffering packets sniffed with promiscuous mode from
    other hosts.

    Packets are kept in a buffer similar to the one with forward-skbs: A
    hash table, where each entry, which corresponds to a src-dst pair, has a
    linked list packets.

    Signed-off-by: Martin Hundebøll
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Martin Hundebøll
     
  • Before adding forward-skbs to the coding buffer, the buffer is searched
    for a potential coding opportunity. If one is found, the two packets are
    network coded and transmitted right away. If not, the forward-skb is
    added to the buffer.

    Network coded packets are transmitted with information about the two
    receivers and the two coded packets. The first receiver is given by the
    MAC header, while the second is given in the payload/bat-header. The
    second receiver uses promiscuous mode to receive the packet and check
    the second destination.

    Signed-off-by: Martin Hundebøll
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Martin Hundebøll
     
  • Two be able to network code two packets, one packet must be buffered
    until the next is available. This is done in a "coding buffer", which is
    essentially a hash table with lists of packets. Each entry in the hash
    table corresponds to a specific src-dst pair, which has a linked list of
    packets that are buffered.

    This patch adds skbs to the buffer just before forwarding them. The
    buffer is traversed every 10 ms, where timed skbs are removed from the
    buffer and transmitted. To allow experiments with the network coding
    scheme, the timeout is tunable through a file in debugfs.

    Signed-off-by: Martin Hundebøll
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Martin Hundebøll
     
  • To use network coding efficiently, a relay must know when neighbor nodes
    are likely to have enough information to be able to decode a network
    coded packet. This is detected by using OGMs from batman-adv to discover
    when one neighbor is in range of another neighbor. The relay check the
    TLL to detect when an OGM is forwarded from one neighbor by another
    neighbor, and thereby knows that the two neighbors are in range and thus
    overhear packets sent by each other.

    This information is saved in the orig_node struct to be used when
    searching for coding opportunities. Two lists are added to the
    orig_node struct: One for neighbors that can hear the orig_node
    (outgoing nc_nodes) and one for neighbors that the orig_node can hear
    (incoming nc_nodes).

    Information about nc_nodes is kept for 10 seconds and is available
    through debugfs in batman_adv/nc_nodes to use when debugging network
    coding.

    Signed-off-by: Martin Hundebøll
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Martin Hundebøll
     
  • Network coding exploits the 802.11 shared medium to allow multiple
    packets to be sent in a single transmission. In brief, a relay can XOR
    two packets, and send the coded packet to two destinations. The
    receivers can decode one of the original packets by XOR'ing the coded
    packet with the other original packet. This will lead to increased
    throughput in topologies where two packets cross one relay.

    In a simple topology with three nodes, it takes four transmissions
    without network coding to get one packet from Node A to Node B and one
    from Node B to Node A:

    1. Node A ---- p1 ---> Node R Node B
    2. Node A Node R Node B

    With network coding, the relay only needs one transmission, which saves
    us one slot of valuable airtime:

    1. Node A ---- p1 ---> Node R Node B
    2. Node A Node R Node B

    The same principle holds for a topology including five nodes. Here the
    packets from Node A and Node B are overheard by Node C and Node D,
    respectively. This allows Node R to send a network coded packet to save
    one transmission:

    Node A Node B

    | \ / |
    | p1 p2 |
    | \ / |
    p1 > Node R < p2
    | |
    | / \ |
    | p1 x p2 p1 x p2 |
    v / \ v
    / \
    Node C < > Node D

    More information is available on the open-mesh.org wiki[1].

    This patch adds the initial code to support network coding in
    batman-adv. It sets up a worker thread to do house keeping and adds a
    sysfs file to enable/disable network coding. The feature is disabled by
    default, as it requires a wifi-driver with working promiscuous mode, and
    also because it adds a small delay at each hop.

    [1] http://www.open-mesh.org/projects/batman-adv/wiki/Catwoman

    Signed-off-by: Martin Hundebøll
    Signed-off-by: Marek Lindner
    Signed-off-by: Antonio Quartulli

    Martin Hundebøll