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 @@ out: | ||||
| 
 | ||||
| /* 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