1. 31 1月, 2011 2 次提交
    • S
      batman-adv: Calculate correct size for merged packets · ae361ce1
      Sven Eckelmann 提交于
      The routing algorithm must be able to decide if a fragment can be merged with
      the missing part and still be passed to a forwarding interface. The fragments
      can only differ by one byte in case that the original payload had an uneven
      length. In that situation the sender has to inform all possible receivers that
      the tail is one byte longer using the flag UNI_FRAG_LARGETAIL.
      
      The combination of UNI_FRAG_LARGETAIL and UNI_FRAG_HEAD flag makes it possible
      to calculate the correct length for even and uneven sized payloads.
      
      The original formula missed to add the unicast header at all and forgot to
      remove the fragment header of the second fragment. This made the results highly
      unreliable and only useful for machines with large differences between the
      configured MTUs.
      Reported-by: NRussell Senior <russell@personaltelco.net>
      Reported-by: NMarek Lindner <lindner_marek@yahoo.de>
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      ae361ce1
    • S
      batman-adv: Create roughly equal sized fragments · 5c77d8bb
      Sven Eckelmann 提交于
      The routing algorithm must know how large two fragments are to be able to
      decide that it is safe to merge them or if it should resubmit without waiting
      for the second part. When these two fragments have a too different size, it is
      not possible to guess right in every situation.
      
      The user could easily configure the MTU of the attached cards so that one
      fragment is forwarded and the other one is added to the fragments table to wait
      for the missing part.
      
      For even sized packets, it is possible to split it so that the resulting
      packages are equal sized by ignoring the old non-fragment header at the
      beginning of the original packet.
      
      This still creates different sized fragments for uneven sized packets.
      Reported-by: NRussell Senior <russell@personaltelco.net>
      Reported-by: NMarek Lindner <lindner_marek@yahoo.de>
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      5c77d8bb
  2. 16 1月, 2011 1 次提交
    • S
      batman-adv: Use "__attribute__" shortcut macros · aa0adb1a
      Sven Eckelmann 提交于
      Linux 2.6.21 defines different macros for __attribute__ which are also
      used inside batman-adv. The next version of checkpatch.pl warns about
      the usage of __attribute__((packed))).
      
      Linux 2.6.33 defines an extra macro __always_unused which is used to
      assist source code analyzers and can be used to removed the last
      existing __attribute__ inside the source code.
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      aa0adb1a
  3. 14 1月, 2011 1 次提交
    • J
      batman-adv: Even Batman should not dereference NULL pointers · ed7809d9
      Jesper Juhl 提交于
      There's a problem in net/batman-adv/unicast.c::frag_send_skb().
      dev_alloc_skb() allocates memory and may fail, thus returning NULL. If
      this happens we'll pass a NULL pointer on to skb_split() which in turn
      hands it to skb_split_inside_header() from where it gets passed to
      skb_put() that lets skb_tail_pointer() play with it and that function
      dereferences it. And thus the bat dies.
      
      While I was at it I also moved the call to dev_alloc_skb() above the
      assignment to 'unicast_packet' since there's no reason to do that
      assignment if the memory allocation fails.
      Signed-off-by: NJesper Juhl <jj@chaosbits.net>
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      ed7809d9
  4. 21 12月, 2010 1 次提交
  5. 17 12月, 2010 1 次提交