Merge branch 'batman-adv/next' of git://git.open-mesh.org/ecsv/linux-merge
This commit is contained in:
commit
a5e3c2aae2
@ -1,4 +1,4 @@
|
||||
[state: 21-11-2010]
|
||||
[state: 27-01-2011]
|
||||
|
||||
BATMAN-ADV
|
||||
----------
|
||||
@ -67,15 +67,16 @@ All mesh wide settings can be found in batman's own interface
|
||||
folder:
|
||||
|
||||
# ls /sys/class/net/bat0/mesh/
|
||||
# aggregated_ogms bonding fragmentation orig_interval
|
||||
# vis_mode
|
||||
# aggregated_ogms gw_bandwidth hop_penalty
|
||||
# bonding gw_mode orig_interval
|
||||
# fragmentation gw_sel_class vis_mode
|
||||
|
||||
|
||||
There is a special folder for debugging informations:
|
||||
|
||||
# ls /sys/kernel/debug/batman_adv/bat0/
|
||||
# originators socket transtable_global transtable_local
|
||||
# vis_data
|
||||
# gateways socket transtable_global vis_data
|
||||
# originators softif_neigh transtable_local
|
||||
|
||||
|
||||
Some of the files contain all sort of status information regard-
|
||||
@ -230,9 +231,8 @@ CONTACT
|
||||
Please send us comments, experiences, questions, anything :)
|
||||
|
||||
IRC: #batman on irc.freenode.org
|
||||
Mailing-list: b.a.t.m.a.n@b.a.t.m.a.n@lists.open-mesh.org
|
||||
(optional subscription at
|
||||
https://lists.open-mesh.org/mm/listinfo/b.a.t.m.a.n)
|
||||
Mailing-list: b.a.t.m.a.n@open-mesh.org (optional subscription
|
||||
at https://lists.open-mesh.org/mm/listinfo/b.a.t.m.a.n)
|
||||
|
||||
You can also contact the Authors:
|
||||
|
||||
|
@ -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
|
||||
#
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
@ -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, ...)
|
||||
{
|
||||
int printed_len;
|
||||
va_list args;
|
||||
static char debug_log_buf[256];
|
||||
char *p;
|
||||
@ -62,8 +61,7 @@ static int fdebug_log(struct debug_log *debug_log, char *fmt, ...)
|
||||
|
||||
spin_lock_bh(&debug_log->lock);
|
||||
va_start(args, fmt);
|
||||
printed_len = vscnprintf(debug_log_buf, sizeof(debug_log_buf),
|
||||
fmt, args);
|
||||
vscnprintf(debug_log_buf, sizeof(debug_log_buf), fmt, args);
|
||||
va_end(args);
|
||||
|
||||
for (p = debug_log_buf; *p != 0; p++)
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
@ -34,6 +34,12 @@
|
||||
/* protect update critical side of if_list - but not the content */
|
||||
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)
|
||||
{
|
||||
struct batman_if *batman_if;
|
||||
@ -549,8 +555,9 @@ static int hard_if_event(struct notifier_block *this,
|
||||
|
||||
/* receive a packet with the batman ethertype coming on a hard
|
||||
* interface */
|
||||
int batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
|
||||
struct packet_type *ptype, struct net_device *orig_dev)
|
||||
static int batman_skb_recv(struct sk_buff *skb, struct net_device *dev,
|
||||
struct packet_type *ptype,
|
||||
struct net_device *orig_dev)
|
||||
{
|
||||
struct bat_priv *bat_priv;
|
||||
struct batman_packet *batman_packet;
|
||||
|
@ -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
|
||||
*
|
||||
@ -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);
|
||||
void hardif_disable_interface(struct batman_if *batman_if);
|
||||
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);
|
||||
void update_min_mtu(struct net_device *soft_iface);
|
||||
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
@ -49,11 +49,6 @@ struct hashtable_t {
|
||||
/* allocates and clears the hash */
|
||||
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. */
|
||||
void hash_destroy(struct hashtable_t *hash);
|
||||
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
@ -22,9 +22,6 @@
|
||||
#ifndef _NET_BATMAN_ADV_MAIN_H_
|
||||
#define _NET_BATMAN_ADV_MAIN_H_
|
||||
|
||||
/* Kernel Programming */
|
||||
#define LINUX
|
||||
|
||||
#define DRIVER_AUTHOR "Marek Lindner <lindner_marek@yahoo.de>, " \
|
||||
"Simon Wunderlich <siwu@hrz.tu-chemnitz.de>"
|
||||
#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 PACKBUFF_SIZE 2000
|
||||
#define LOG_BUF_LEN 8192 /* has to be a power of 2 */
|
||||
|
||||
#define VIS_INTERVAL 5000 /* 5 seconds */
|
||||
@ -96,15 +92,11 @@
|
||||
#define DBG_ROUTES 2 /* route or hna added / changed / deleted */
|
||||
#define DBG_ALL 3
|
||||
|
||||
#define LOG_BUF_LEN 8192 /* has to be a power of 2 */
|
||||
|
||||
|
||||
/*
|
||||
* Vis
|
||||
*/
|
||||
|
||||
/* #define VIS_SUBCLUSTERS_DISABLED */
|
||||
|
||||
/*
|
||||
* Kernel headers
|
||||
*/
|
||||
@ -158,13 +150,6 @@ static inline void bat_dbg(char type __always_unused,
|
||||
}
|
||||
#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...) \
|
||||
do { \
|
||||
struct net_device *_netdev = (net_dev); \
|
||||
|
@ -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
|
||||
*
|
||||
@ -247,7 +247,7 @@ static bool purge_orig_node(struct bat_priv *bat_priv,
|
||||
orig_node->hna_buff_len);
|
||||
/* update bonding candidates, we could have lost
|
||||
* some candidates. */
|
||||
update_bonding_candidates(bat_priv, orig_node);
|
||||
update_bonding_candidates(orig_node);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
@ -50,6 +50,7 @@
|
||||
|
||||
/* fragmentation defines */
|
||||
#define UNI_FRAG_HEAD 0x01
|
||||
#define UNI_FRAG_LARGETAIL 0x02
|
||||
|
||||
struct batman_packet {
|
||||
uint8_t packet_type;
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
@ -433,8 +433,7 @@ static char count_real_packets(struct ethhdr *ethhdr,
|
||||
}
|
||||
|
||||
/* copy primary address for bonding */
|
||||
static void mark_bonding_address(struct bat_priv *bat_priv,
|
||||
struct orig_node *orig_node,
|
||||
static void mark_bonding_address(struct orig_node *orig_node,
|
||||
struct orig_node *orig_neigh_node,
|
||||
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 */
|
||||
void update_bonding_candidates(struct bat_priv *bat_priv,
|
||||
struct orig_node *orig_node)
|
||||
void update_bonding_candidates(struct orig_node *orig_node)
|
||||
{
|
||||
int candidates;
|
||||
int interference_candidate;
|
||||
@ -730,9 +728,8 @@ void receive_bat_packet(struct ethhdr *ethhdr,
|
||||
update_orig(bat_priv, orig_node, ethhdr, batman_packet,
|
||||
if_incoming, hna_buff, hna_buff_len, is_duplicate);
|
||||
|
||||
mark_bonding_address(bat_priv, orig_node,
|
||||
orig_neigh_node, batman_packet);
|
||||
update_bonding_candidates(bat_priv, orig_node);
|
||||
mark_bonding_address(orig_node, orig_neigh_node, batman_packet);
|
||||
update_bonding_candidates(orig_node);
|
||||
|
||||
/* is single hop (direct) neighbor */
|
||||
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 icmp_packet_rr *icmp_packet;
|
||||
struct ethhdr *ethhdr;
|
||||
struct batman_if *batman_if;
|
||||
int ret;
|
||||
uint8_t dstaddr[ETH_ALEN];
|
||||
|
||||
icmp_packet = (struct icmp_packet_rr *)skb->data;
|
||||
ethhdr = (struct ethhdr *)skb_mac_header(skb);
|
||||
|
||||
/* add data to device queue */
|
||||
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;
|
||||
|
||||
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->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,
|
||||
struct sk_buff *skb, size_t icmp_len)
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct orig_node *orig_node;
|
||||
struct icmp_packet *icmp_packet;
|
||||
struct ethhdr *ethhdr;
|
||||
struct batman_if *batman_if;
|
||||
int ret;
|
||||
uint8_t dstaddr[ETH_ALEN];
|
||||
|
||||
icmp_packet = (struct icmp_packet *)skb->data;
|
||||
ethhdr = (struct ethhdr *)skb_mac_header(skb);
|
||||
|
||||
/* send TTL exceeded if packet is an echo request (traceroute) */
|
||||
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;
|
||||
|
||||
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->orig,
|
||||
@ -978,7 +969,7 @@ int recv_icmp_packet(struct sk_buff *skb, struct batman_if *recv_if)
|
||||
|
||||
/* TTL exceeded */
|
||||
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;
|
||||
|
||||
@ -1001,7 +992,6 @@ int recv_icmp_packet(struct sk_buff *skb, struct batman_if *recv_if)
|
||||
return NET_RX_DROP;
|
||||
|
||||
icmp_packet = (struct icmp_packet_rr *)skb->data;
|
||||
ethhdr = (struct ethhdr *)skb_mac_header(skb);
|
||||
|
||||
/* decrement ttl */
|
||||
icmp_packet->ttl--;
|
||||
@ -1193,7 +1183,7 @@ int route_unicast_packet(struct sk_buff *skb, struct batman_if *recv_if,
|
||||
dstaddr);
|
||||
|
||||
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);
|
||||
|
||||
|
@ -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
|
||||
*
|
||||
@ -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);
|
||||
struct neigh_node *find_router(struct bat_priv *bat_priv,
|
||||
struct orig_node *orig_node, struct batman_if *recv_if);
|
||||
void update_bonding_candidates(struct bat_priv *bat_priv,
|
||||
struct orig_node *orig_node);
|
||||
void update_bonding_candidates(struct orig_node *orig_node);
|
||||
|
||||
#endif /* _NET_BATMAN_ADV_ROUTING_H_ */
|
||||
|
@ -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
|
||||
*
|
||||
@ -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 */
|
||||
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));
|
||||
}
|
||||
@ -356,7 +356,7 @@ void schedule_forward_packet(struct orig_node *orig_node,
|
||||
else
|
||||
batman_packet->flags &= ~DIRECTLINK;
|
||||
|
||||
send_time = forward_send_time(bat_priv);
|
||||
send_time = forward_send_time();
|
||||
add_bat_packet_to_list(bat_priv,
|
||||
(unsigned char *)batman_packet,
|
||||
sizeof(struct batman_packet) + hna_buff_len,
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
@ -224,7 +224,8 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv,
|
||||
struct unicast_frag_packet *frag1, *frag2;
|
||||
int uc_hdr_len = sizeof(struct unicast_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)
|
||||
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);
|
||||
if (!frag_skb)
|
||||
goto dropped;
|
||||
skb_reserve(frag_skb, ucf_hdr_len);
|
||||
|
||||
unicast_packet = (struct unicast_packet *) skb->data;
|
||||
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 ||
|
||||
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(frag2, frag1, sizeof(struct unicast_frag_packet));
|
||||
|
||||
frag1->flags |= UNI_FRAG_HEAD;
|
||||
frag2->flags &= ~UNI_FRAG_HEAD;
|
||||
if (data_len & 1)
|
||||
large_tail = UNI_FRAG_LARGETAIL;
|
||||
|
||||
frag1->flags = UNI_FRAG_HEAD | large_tail;
|
||||
frag2->flags = large_tail;
|
||||
|
||||
frag1->seqno = htons((uint16_t)atomic_inc_return(
|
||||
&batman_if->frag_seqno));
|
||||
|
@ -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
|
||||
*
|
||||
@ -22,6 +22,8 @@
|
||||
#ifndef _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_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,
|
||||
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_ */
|
||||
|
@ -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
|
||||
*
|
||||
|
@ -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
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user