dect
/
linux-2.6
Archived
13
0
Fork 0

Merge branch 'batman-adv/next' of git://git.open-mesh.org/ecsv/linux-merge

This commit is contained in:
David S. Miller 2011-01-31 13:24:56 -08:00
commit a5e3c2aae2
40 changed files with 101 additions and 102 deletions

View File

@ -1,4 +1,4 @@
[state: 21-11-2010] [state: 27-01-2011]
BATMAN-ADV BATMAN-ADV
---------- ----------
@ -67,15 +67,16 @@ All mesh wide settings can be found in batman's own interface
folder: folder:
# ls /sys/class/net/bat0/mesh/ # ls /sys/class/net/bat0/mesh/
# aggregated_ogms bonding fragmentation orig_interval # aggregated_ogms gw_bandwidth hop_penalty
# vis_mode # bonding gw_mode orig_interval
# fragmentation gw_sel_class vis_mode
There is a special folder for debugging informations: There is a special folder for debugging informations:
# ls /sys/kernel/debug/batman_adv/bat0/ # ls /sys/kernel/debug/batman_adv/bat0/
# originators socket transtable_global transtable_local # gateways socket transtable_global vis_data
# vis_data # originators softif_neigh transtable_local
Some of the files contain all sort of status information regard- Some of the files contain all sort of status information regard-
@ -230,9 +231,8 @@ CONTACT
Please send us comments, experiences, questions, anything :) Please send us comments, experiences, questions, anything :)
IRC: #batman on irc.freenode.org IRC: #batman on irc.freenode.org
Mailing-list: b.a.t.m.a.n@b.a.t.m.a.n@lists.open-mesh.org Mailing-list: b.a.t.m.a.n@open-mesh.org (optional subscription
(optional subscription at at https://lists.open-mesh.org/mm/listinfo/b.a.t.m.a.n)
https://lists.open-mesh.org/mm/listinfo/b.a.t.m.a.n)
You can also contact the Authors: You can also contact the Authors:

View File

@ -1,5 +1,5 @@
# #
# Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: # Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
# #
# Marek Lindner, Simon Wunderlich # Marek Lindner, Simon Wunderlich
# #

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2010 B.A.T.M.A.N. contributors: * Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *
@ -52,7 +52,6 @@ static void emit_log_char(struct debug_log *debug_log, char c)
static int fdebug_log(struct debug_log *debug_log, char *fmt, ...) static int fdebug_log(struct debug_log *debug_log, char *fmt, ...)
{ {
int printed_len;
va_list args; va_list args;
static char debug_log_buf[256]; static char debug_log_buf[256];
char *p; char *p;
@ -62,8 +61,7 @@ static int fdebug_log(struct debug_log *debug_log, char *fmt, ...)
spin_lock_bh(&debug_log->lock); spin_lock_bh(&debug_log->lock);
va_start(args, fmt); va_start(args, fmt);
printed_len = vscnprintf(debug_log_buf, sizeof(debug_log_buf), vscnprintf(debug_log_buf, sizeof(debug_log_buf), fmt, args);
fmt, args);
va_end(args); va_end(args);
for (p = debug_log_buf; *p != 0; p++) for (p = debug_log_buf; *p != 0; p++)

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2010 B.A.T.M.A.N. contributors: * Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2010 B.A.T.M.A.N. contributors: * Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2010 B.A.T.M.A.N. contributors: * Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2006-2011 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2006-2011 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2009-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2009-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2009-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2009-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *
@ -34,6 +34,12 @@
/* protect update critical side of if_list - but not the content */ /* protect update critical side of if_list - but not the content */
static DEFINE_SPINLOCK(if_list_lock); static DEFINE_SPINLOCK(if_list_lock);
static int batman_skb_recv(struct sk_buff *skb,
struct net_device *dev,
struct packet_type *ptype,
struct net_device *orig_dev);
static void hardif_free_rcu(struct rcu_head *rcu) static void hardif_free_rcu(struct rcu_head *rcu)
{ {
struct batman_if *batman_if; struct batman_if *batman_if;
@ -549,8 +555,9 @@ out:
/* receive a packet with the batman ethertype coming on a hard /* receive a packet with the batman ethertype coming on a hard
* interface */ * interface */
int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, static int batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
struct packet_type *ptype, struct net_device *orig_dev) struct packet_type *ptype,
struct net_device *orig_dev)
{ {
struct bat_priv *bat_priv; struct bat_priv *bat_priv;
struct batman_packet *batman_packet; struct batman_packet *batman_packet;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *
@ -35,10 +35,6 @@ struct batman_if *get_batman_if_by_netdev(struct net_device *net_dev);
int hardif_enable_interface(struct batman_if *batman_if, char *iface_name); int hardif_enable_interface(struct batman_if *batman_if, char *iface_name);
void hardif_disable_interface(struct batman_if *batman_if); void hardif_disable_interface(struct batman_if *batman_if);
void hardif_remove_interfaces(void); void hardif_remove_interfaces(void);
int batman_skb_recv(struct sk_buff *skb,
struct net_device *dev,
struct packet_type *ptype,
struct net_device *orig_dev);
int hardif_min_mtu(struct net_device *soft_iface); int hardif_min_mtu(struct net_device *soft_iface);
void update_min_mtu(struct net_device *soft_iface); void update_min_mtu(struct net_device *soft_iface);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2006-2011 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2006-2011 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
* *
@ -49,11 +49,6 @@ struct hashtable_t {
/* allocates and clears the hash */ /* allocates and clears the hash */
struct hashtable_t *hash_new(int size); struct hashtable_t *hash_new(int size);
/* remove element if you already found the element you want to delete and don't
* need the overhead to find it again with hash_remove(). But usually, you
* don't want to use this function, as it fiddles with hash-internals. */
void *hash_remove_element(struct hashtable_t *hash, struct element_t *elem);
/* free only the hashtable and the hash itself. */ /* free only the hashtable and the hash itself. */
void hash_destroy(struct hashtable_t *hash); void hash_destroy(struct hashtable_t *hash);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *
@ -22,9 +22,6 @@
#ifndef _NET_BATMAN_ADV_MAIN_H_ #ifndef _NET_BATMAN_ADV_MAIN_H_
#define _NET_BATMAN_ADV_MAIN_H_ #define _NET_BATMAN_ADV_MAIN_H_
/* Kernel Programming */
#define LINUX
#define DRIVER_AUTHOR "Marek Lindner <lindner_marek@yahoo.de>, " \ #define DRIVER_AUTHOR "Marek Lindner <lindner_marek@yahoo.de>, " \
"Simon Wunderlich <siwu@hrz.tu-chemnitz.de>" "Simon Wunderlich <siwu@hrz.tu-chemnitz.de>"
#define DRIVER_DESC "B.A.T.M.A.N. advanced" #define DRIVER_DESC "B.A.T.M.A.N. advanced"
@ -54,7 +51,6 @@
#define NUM_WORDS (TQ_LOCAL_WINDOW_SIZE / WORD_BIT_SIZE) #define NUM_WORDS (TQ_LOCAL_WINDOW_SIZE / WORD_BIT_SIZE)
#define PACKBUFF_SIZE 2000
#define LOG_BUF_LEN 8192 /* has to be a power of 2 */ #define LOG_BUF_LEN 8192 /* has to be a power of 2 */
#define VIS_INTERVAL 5000 /* 5 seconds */ #define VIS_INTERVAL 5000 /* 5 seconds */
@ -96,15 +92,11 @@
#define DBG_ROUTES 2 /* route or hna added / changed / deleted */ #define DBG_ROUTES 2 /* route or hna added / changed / deleted */
#define DBG_ALL 3 #define DBG_ALL 3
#define LOG_BUF_LEN 8192 /* has to be a power of 2 */
/* /*
* Vis * Vis
*/ */
/* #define VIS_SUBCLUSTERS_DISABLED */
/* /*
* Kernel headers * Kernel headers
*/ */
@ -158,13 +150,6 @@ static inline void bat_dbg(char type __always_unused,
} }
#endif #endif
#define bat_warning(net_dev, fmt, arg...) \
do { \
struct net_device *_netdev = (net_dev); \
struct bat_priv *_batpriv = netdev_priv(_netdev); \
bat_dbg(DBG_ALL, _batpriv, fmt, ## arg); \
pr_warning("%s: " fmt, _netdev->name, ## arg); \
} while (0)
#define bat_info(net_dev, fmt, arg...) \ #define bat_info(net_dev, fmt, arg...) \
do { \ do { \
struct net_device *_netdev = (net_dev); \ struct net_device *_netdev = (net_dev); \

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2009-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2009-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *
@ -247,7 +247,7 @@ static bool purge_orig_node(struct bat_priv *bat_priv,
orig_node->hna_buff_len); orig_node->hna_buff_len);
/* update bonding candidates, we could have lost /* update bonding candidates, we could have lost
* some candidates. */ * some candidates. */
update_bonding_candidates(bat_priv, orig_node); update_bonding_candidates(orig_node);
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *
@ -50,6 +50,7 @@
/* fragmentation defines */ /* fragmentation defines */
#define UNI_FRAG_HEAD 0x01 #define UNI_FRAG_HEAD 0x01
#define UNI_FRAG_LARGETAIL 0x02
struct batman_packet { struct batman_packet {
uint8_t packet_type; uint8_t packet_type;

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *
@ -433,8 +433,7 @@ static char count_real_packets(struct ethhdr *ethhdr,
} }
/* copy primary address for bonding */ /* copy primary address for bonding */
static void mark_bonding_address(struct bat_priv *bat_priv, static void mark_bonding_address(struct orig_node *orig_node,
struct orig_node *orig_node,
struct orig_node *orig_neigh_node, struct orig_node *orig_neigh_node,
struct batman_packet *batman_packet) struct batman_packet *batman_packet)
@ -447,8 +446,7 @@ static void mark_bonding_address(struct bat_priv *bat_priv,
} }
/* mark possible bond.candidates in the neighbor list */ /* mark possible bond.candidates in the neighbor list */
void update_bonding_candidates(struct bat_priv *bat_priv, void update_bonding_candidates(struct orig_node *orig_node)
struct orig_node *orig_node)
{ {
int candidates; int candidates;
int interference_candidate; int interference_candidate;
@ -730,9 +728,8 @@ void receive_bat_packet(struct ethhdr *ethhdr,
update_orig(bat_priv, orig_node, ethhdr, batman_packet, update_orig(bat_priv, orig_node, ethhdr, batman_packet,
if_incoming, hna_buff, hna_buff_len, is_duplicate); if_incoming, hna_buff, hna_buff_len, is_duplicate);
mark_bonding_address(bat_priv, orig_node, mark_bonding_address(orig_node, orig_neigh_node, batman_packet);
orig_neigh_node, batman_packet); update_bonding_candidates(orig_node);
update_bonding_candidates(bat_priv, orig_node);
/* is single hop (direct) neighbor */ /* is single hop (direct) neighbor */
if (is_single_hop_neigh) { if (is_single_hop_neigh) {
@ -810,13 +807,11 @@ static int recv_my_icmp_packet(struct bat_priv *bat_priv,
{ {
struct orig_node *orig_node; struct orig_node *orig_node;
struct icmp_packet_rr *icmp_packet; struct icmp_packet_rr *icmp_packet;
struct ethhdr *ethhdr;
struct batman_if *batman_if; struct batman_if *batman_if;
int ret; int ret;
uint8_t dstaddr[ETH_ALEN]; uint8_t dstaddr[ETH_ALEN];
icmp_packet = (struct icmp_packet_rr *)skb->data; icmp_packet = (struct icmp_packet_rr *)skb->data;
ethhdr = (struct ethhdr *)skb_mac_header(skb);
/* add data to device queue */ /* add data to device queue */
if (icmp_packet->msg_type != ECHO_REQUEST) { if (icmp_packet->msg_type != ECHO_REQUEST) {
@ -848,7 +843,6 @@ static int recv_my_icmp_packet(struct bat_priv *bat_priv,
return NET_RX_DROP; return NET_RX_DROP;
icmp_packet = (struct icmp_packet_rr *)skb->data; icmp_packet = (struct icmp_packet_rr *)skb->data;
ethhdr = (struct ethhdr *)skb_mac_header(skb);
memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN); memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
memcpy(icmp_packet->orig, memcpy(icmp_packet->orig,
@ -866,17 +860,15 @@ static int recv_my_icmp_packet(struct bat_priv *bat_priv,
} }
static int recv_icmp_ttl_exceeded(struct bat_priv *bat_priv, static int recv_icmp_ttl_exceeded(struct bat_priv *bat_priv,
struct sk_buff *skb, size_t icmp_len) struct sk_buff *skb)
{ {
struct orig_node *orig_node; struct orig_node *orig_node;
struct icmp_packet *icmp_packet; struct icmp_packet *icmp_packet;
struct ethhdr *ethhdr;
struct batman_if *batman_if; struct batman_if *batman_if;
int ret; int ret;
uint8_t dstaddr[ETH_ALEN]; uint8_t dstaddr[ETH_ALEN];
icmp_packet = (struct icmp_packet *)skb->data; icmp_packet = (struct icmp_packet *)skb->data;
ethhdr = (struct ethhdr *)skb_mac_header(skb);
/* send TTL exceeded if packet is an echo request (traceroute) */ /* send TTL exceeded if packet is an echo request (traceroute) */
if (icmp_packet->msg_type != ECHO_REQUEST) { if (icmp_packet->msg_type != ECHO_REQUEST) {
@ -909,7 +901,6 @@ static int recv_icmp_ttl_exceeded(struct bat_priv *bat_priv,
return NET_RX_DROP; return NET_RX_DROP;
icmp_packet = (struct icmp_packet *) skb->data; icmp_packet = (struct icmp_packet *) skb->data;
ethhdr = (struct ethhdr *)skb_mac_header(skb);
memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN); memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN);
memcpy(icmp_packet->orig, memcpy(icmp_packet->orig,
@ -978,7 +969,7 @@ int recv_icmp_packet(struct sk_buff *skb, struct batman_if *recv_if)
/* TTL exceeded */ /* TTL exceeded */
if (icmp_packet->ttl < 2) if (icmp_packet->ttl < 2)
return recv_icmp_ttl_exceeded(bat_priv, skb, hdr_size); return recv_icmp_ttl_exceeded(bat_priv, skb);
ret = NET_RX_DROP; ret = NET_RX_DROP;
@ -1001,7 +992,6 @@ int recv_icmp_packet(struct sk_buff *skb, struct batman_if *recv_if)
return NET_RX_DROP; return NET_RX_DROP;
icmp_packet = (struct icmp_packet_rr *)skb->data; icmp_packet = (struct icmp_packet_rr *)skb->data;
ethhdr = (struct ethhdr *)skb_mac_header(skb);
/* decrement ttl */ /* decrement ttl */
icmp_packet->ttl--; icmp_packet->ttl--;
@ -1193,7 +1183,7 @@ int route_unicast_packet(struct sk_buff *skb, struct batman_if *recv_if,
dstaddr); dstaddr);
if (unicast_packet->packet_type == BAT_UNICAST_FRAG && if (unicast_packet->packet_type == BAT_UNICAST_FRAG &&
2 * skb->len - hdr_size <= batman_if->net_dev->mtu) { frag_can_reassemble(skb, batman_if->net_dev->mtu)) {
ret = frag_reassemble_skb(skb, bat_priv, &new_skb); ret = frag_reassemble_skb(skb, bat_priv, &new_skb);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *
@ -42,7 +42,6 @@ int recv_vis_packet(struct sk_buff *skb, struct batman_if *recv_if);
int recv_bat_packet(struct sk_buff *skb, struct batman_if *recv_if); int recv_bat_packet(struct sk_buff *skb, struct batman_if *recv_if);
struct neigh_node *find_router(struct bat_priv *bat_priv, struct neigh_node *find_router(struct bat_priv *bat_priv,
struct orig_node *orig_node, struct batman_if *recv_if); struct orig_node *orig_node, struct batman_if *recv_if);
void update_bonding_candidates(struct bat_priv *bat_priv, void update_bonding_candidates(struct orig_node *orig_node);
struct orig_node *orig_node);
#endif /* _NET_BATMAN_ADV_ROUTING_H_ */ #endif /* _NET_BATMAN_ADV_ROUTING_H_ */

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *
@ -49,7 +49,7 @@ static unsigned long own_send_time(struct bat_priv *bat_priv)
} }
/* when do we schedule a forwarded packet to be sent */ /* when do we schedule a forwarded packet to be sent */
static unsigned long forward_send_time(struct bat_priv *bat_priv) static unsigned long forward_send_time(void)
{ {
return jiffies + msecs_to_jiffies(random32() % (JITTER/2)); return jiffies + msecs_to_jiffies(random32() % (JITTER/2));
} }
@ -356,7 +356,7 @@ void schedule_forward_packet(struct orig_node *orig_node,
else else
batman_packet->flags &= ~DIRECTLINK; batman_packet->flags &= ~DIRECTLINK;
send_time = forward_send_time(bat_priv); send_time = forward_send_time();
add_bat_packet_to_list(bat_priv, add_bat_packet_to_list(bat_priv,
(unsigned char *)batman_packet, (unsigned char *)batman_packet,
sizeof(struct batman_packet) + hna_buff_len, sizeof(struct batman_packet) + hna_buff_len,

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner * Marek Lindner
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2007-2011 B.A.T.M.A.N. contributors:
* *
* Marek Lindner, Simon Wunderlich * Marek Lindner, Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2010 B.A.T.M.A.N. contributors: * Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
* *
* Andreas Langer * Andreas Langer
* *
@ -224,7 +224,8 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv,
struct unicast_frag_packet *frag1, *frag2; struct unicast_frag_packet *frag1, *frag2;
int uc_hdr_len = sizeof(struct unicast_packet); int uc_hdr_len = sizeof(struct unicast_packet);
int ucf_hdr_len = sizeof(struct unicast_frag_packet); int ucf_hdr_len = sizeof(struct unicast_frag_packet);
int data_len = skb->len; int data_len = skb->len - uc_hdr_len;
int large_tail = 0;
if (!bat_priv->primary_if) if (!bat_priv->primary_if)
goto dropped; goto dropped;
@ -232,10 +233,11 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv,
frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len); frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len);
if (!frag_skb) if (!frag_skb)
goto dropped; goto dropped;
skb_reserve(frag_skb, ucf_hdr_len);
unicast_packet = (struct unicast_packet *) skb->data; unicast_packet = (struct unicast_packet *) skb->data;
memcpy(&tmp_uc, unicast_packet, uc_hdr_len); memcpy(&tmp_uc, unicast_packet, uc_hdr_len);
skb_split(skb, frag_skb, data_len / 2); skb_split(skb, frag_skb, data_len / 2 + uc_hdr_len);
if (my_skb_head_push(skb, ucf_hdr_len - uc_hdr_len) < 0 || if (my_skb_head_push(skb, ucf_hdr_len - uc_hdr_len) < 0 ||
my_skb_head_push(frag_skb, ucf_hdr_len) < 0) my_skb_head_push(frag_skb, ucf_hdr_len) < 0)
@ -253,8 +255,11 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv,
memcpy(frag1->orig, bat_priv->primary_if->net_dev->dev_addr, ETH_ALEN); memcpy(frag1->orig, bat_priv->primary_if->net_dev->dev_addr, ETH_ALEN);
memcpy(frag2, frag1, sizeof(struct unicast_frag_packet)); memcpy(frag2, frag1, sizeof(struct unicast_frag_packet));
frag1->flags |= UNI_FRAG_HEAD; if (data_len & 1)
frag2->flags &= ~UNI_FRAG_HEAD; large_tail = UNI_FRAG_LARGETAIL;
frag1->flags = UNI_FRAG_HEAD | large_tail;
frag2->flags = large_tail;
frag1->seqno = htons((uint16_t)atomic_inc_return( frag1->seqno = htons((uint16_t)atomic_inc_return(
&batman_if->frag_seqno)); &batman_if->frag_seqno));

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2010 B.A.T.M.A.N. contributors: * Copyright (C) 2010-2011 B.A.T.M.A.N. contributors:
* *
* Andreas Langer * Andreas Langer
* *
@ -22,6 +22,8 @@
#ifndef _NET_BATMAN_ADV_UNICAST_H_ #ifndef _NET_BATMAN_ADV_UNICAST_H_
#define _NET_BATMAN_ADV_UNICAST_H_ #define _NET_BATMAN_ADV_UNICAST_H_
#include "packet.h"
#define FRAG_TIMEOUT 10000 /* purge frag list entrys after time in ms */ #define FRAG_TIMEOUT 10000 /* purge frag list entrys after time in ms */
#define FRAG_BUFFER_SIZE 6 /* number of list elements in buffer */ #define FRAG_BUFFER_SIZE 6 /* number of list elements in buffer */
@ -32,4 +34,25 @@ int unicast_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv);
int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv,
struct batman_if *batman_if, uint8_t dstaddr[]); struct batman_if *batman_if, uint8_t dstaddr[]);
static inline int frag_can_reassemble(struct sk_buff *skb, int mtu)
{
struct unicast_frag_packet *unicast_packet;
int uneven_correction = 0;
unsigned int merged_size;
unicast_packet = (struct unicast_frag_packet *)skb->data;
if (unicast_packet->flags & UNI_FRAG_LARGETAIL) {
if (unicast_packet->flags & UNI_FRAG_HEAD)
uneven_correction = 1;
else
uneven_correction = -1;
}
merged_size = (skb->len - sizeof(struct unicast_frag_packet)) * 2;
merged_size += sizeof(struct unicast_packet) + uneven_correction;
return merged_size <= mtu;
}
#endif /* _NET_BATMAN_ADV_UNICAST_H_ */ #endif /* _NET_BATMAN_ADV_UNICAST_H_ */

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2008-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2008-2011 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich * Simon Wunderlich
* *

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2008-2010 B.A.T.M.A.N. contributors: * Copyright (C) 2008-2011 B.A.T.M.A.N. contributors:
* *
* Simon Wunderlich, Marek Lindner * Simon Wunderlich, Marek Lindner
* *