Hi,
I would like propose following changes for net-next-2.6.git. Two of them are minor code style changes and the other two change minor issues in the routing/fragmentation code.
thanks, Sven
The following changes since commit 091b948306d2628320e77977eb7ae4a757b12180:
batman-adv: Merge README of v2011.0.0 release (2011-01-31 14:57:13 +0100)
are available in the git repository at: git://git.open-mesh.org/ecsv/linux-merge.git batman-adv/next
Linus Lüssing (2): batman-adv: Remove duplicate types.h inclusions batman-adv: Disallow originator addressing within mesh layer
Marek Lindner (1): batman-adv: Split combined variable declarations
Sven Eckelmann (1): batman-adv: Use successive sequence numbers for fragments
net/batman-adv/icmp_socket.c | 1 - net/batman-adv/icmp_socket.h | 2 -- net/batman-adv/main.c | 1 - net/batman-adv/routing.c | 1 - net/batman-adv/routing.h | 2 -- net/batman-adv/send.c | 1 - net/batman-adv/send.h | 2 -- net/batman-adv/soft-interface.c | 1 - net/batman-adv/translation-table.c | 1 - net/batman-adv/translation-table.h | 2 -- net/batman-adv/unicast.c | 19 +++++++------------ 11 files changed, 7 insertions(+), 26 deletions(-)
The two fragments of an unicast packet must have successive sequence numbers to allow the receiver side to detect matching fragments and merge them again. The current implementation doesn't provide that property because a sequence of two atomic_inc_return may be interleaved with another sequence which also changes the variable.
The access to the fragment sequence number pool has either to be protected by correct locking or it has to reserve two sequence numbers in a single fetch. The latter one can easily be done by increasing the value of the last used sequence number by 2 in a single step. The generated window of two currently unused sequence numbers can now be scattered across the two fragments.
Reported-by: Linus Lüssing linus.luessing@web.de Signed-off-by: Sven Eckelmann sven@narfation.org --- net/batman-adv/unicast.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c index cbf022c..9b2a222 100644 --- a/net/batman-adv/unicast.c +++ b/net/batman-adv/unicast.c @@ -226,6 +226,7 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, int ucf_hdr_len = sizeof(struct unicast_frag_packet); int data_len = skb->len - uc_hdr_len; int large_tail = 0; + uint16_t seqno;
if (!bat_priv->primary_if) goto dropped; @@ -261,10 +262,9 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, frag1->flags = UNI_FRAG_HEAD | large_tail; frag2->flags = large_tail;
- frag1->seqno = htons((uint16_t)atomic_inc_return( - &batman_if->frag_seqno)); - frag2->seqno = htons((uint16_t)atomic_inc_return( - &batman_if->frag_seqno)); + seqno = atomic_add_return(2, &batman_if->frag_seqno); + frag1->seqno = htons(seqno - 1); + frag2->seqno = htons(seqno);
send_skb_packet(skb, batman_if, dstaddr); send_skb_packet(frag_skb, batman_if, dstaddr);
From: Marek Lindner lindner_marek@yahoo.de
Multiple variable declarations in a single statements over multiple lines can be split into multiple variable declarations without changing the actual behavior.
Signed-off-by: Marek Lindner lindner_marek@yahoo.de Signed-off-by: Sven Eckelmann sven@narfation.org --- net/batman-adv/unicast.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c index 9b2a222..6c92eef 100644 --- a/net/batman-adv/unicast.c +++ b/net/batman-adv/unicast.c @@ -39,8 +39,8 @@ static struct sk_buff *frag_merge_packet(struct list_head *head, (struct unicast_frag_packet *)skb->data; struct sk_buff *tmp_skb; struct unicast_packet *unicast_packet; - int hdr_len = sizeof(struct unicast_packet), - uni_diff = sizeof(struct unicast_frag_packet) - hdr_len; + int hdr_len = sizeof(struct unicast_packet); + int uni_diff = sizeof(struct unicast_frag_packet) - hdr_len;
/* set skb to the first part and tmp_skb to the second part */ if (up->flags & UNI_FRAG_HEAD) {
From: Linus Lüssing linus.luessing@ascom.ch
types.h is included by main.h, which is included at the beginning of any other c-file anyway. Therefore this commit removes those duplicate inclussions.
Signed-off-by: Linus Lüssing linus.luessing@ascom.ch Signed-off-by: Sven Eckelmann sven@narfation.org --- net/batman-adv/icmp_socket.c | 1 - net/batman-adv/icmp_socket.h | 2 -- net/batman-adv/main.c | 1 - net/batman-adv/routing.c | 1 - net/batman-adv/routing.h | 2 -- net/batman-adv/send.c | 1 - net/batman-adv/send.h | 2 -- net/batman-adv/soft-interface.c | 1 - net/batman-adv/translation-table.c | 1 - net/batman-adv/translation-table.h | 2 -- 10 files changed, 0 insertions(+), 14 deletions(-)
diff --git a/net/batman-adv/icmp_socket.c b/net/batman-adv/icmp_socket.c index 5e86d6f..319a7cc 100644 --- a/net/batman-adv/icmp_socket.c +++ b/net/batman-adv/icmp_socket.c @@ -24,7 +24,6 @@ #include <linux/slab.h> #include "icmp_socket.h" #include "send.h" -#include "types.h" #include "hash.h" #include "originator.h" #include "hard-interface.h" diff --git a/net/batman-adv/icmp_socket.h b/net/batman-adv/icmp_socket.h index 08b1859..462b190 100644 --- a/net/batman-adv/icmp_socket.h +++ b/net/batman-adv/icmp_socket.h @@ -22,8 +22,6 @@ #ifndef _NET_BATMAN_ADV_ICMP_SOCKET_H_ #define _NET_BATMAN_ADV_ICMP_SOCKET_H_
-#include "types.h" - #define ICMP_SOCKET "socket"
void bat_socket_init(void); diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c index dc9248d..06d956c 100644 --- a/net/batman-adv/main.c +++ b/net/batman-adv/main.c @@ -30,7 +30,6 @@ #include "translation-table.h" #include "hard-interface.h" #include "gateway_client.h" -#include "types.h" #include "vis.h" #include "hash.h"
diff --git a/net/batman-adv/routing.c b/net/batman-adv/routing.c index 028f739..8274140 100644 --- a/net/batman-adv/routing.c +++ b/net/batman-adv/routing.c @@ -28,7 +28,6 @@ #include "icmp_socket.h" #include "translation-table.h" #include "originator.h" -#include "types.h" #include "ring_buffer.h" #include "vis.h" #include "aggregation.h" diff --git a/net/batman-adv/routing.h b/net/batman-adv/routing.h index ceeca6f..a09d16f 100644 --- a/net/batman-adv/routing.h +++ b/net/batman-adv/routing.h @@ -22,8 +22,6 @@ #ifndef _NET_BATMAN_ADV_ROUTING_H_ #define _NET_BATMAN_ADV_ROUTING_H_
-#include "types.h" - void slide_own_bcast_window(struct batman_if *batman_if); void receive_bat_packet(struct ethhdr *ethhdr, struct batman_packet *batman_packet, diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c index 7cc620e..8314276 100644 --- a/net/batman-adv/send.c +++ b/net/batman-adv/send.c @@ -25,7 +25,6 @@ #include "translation-table.h" #include "soft-interface.h" #include "hard-interface.h" -#include "types.h" #include "vis.h" #include "aggregation.h" #include "gateway_common.h" diff --git a/net/batman-adv/send.h b/net/batman-adv/send.h index bc53ade..b68c272 100644 --- a/net/batman-adv/send.h +++ b/net/batman-adv/send.h @@ -22,8 +22,6 @@ #ifndef _NET_BATMAN_ADV_SEND_H_ #define _NET_BATMAN_ADV_SEND_H_
-#include "types.h" - int send_skb_packet(struct sk_buff *skb, struct batman_if *batman_if, uint8_t *dst_addr); diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c index 145e0f7..bd088f8 100644 --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c @@ -26,7 +26,6 @@ #include "send.h" #include "bat_debugfs.h" #include "translation-table.h" -#include "types.h" #include "hash.h" #include "gateway_common.h" #include "gateway_client.h" diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c index f6917dd..7fb6726 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c @@ -22,7 +22,6 @@ #include "main.h" #include "translation-table.h" #include "soft-interface.h" -#include "types.h" #include "hash.h" #include "originator.h"
diff --git a/net/batman-adv/translation-table.h b/net/batman-adv/translation-table.h index a4f3a37..f19931c 100644 --- a/net/batman-adv/translation-table.h +++ b/net/batman-adv/translation-table.h @@ -22,8 +22,6 @@ #ifndef _NET_BATMAN_ADV_TRANSLATION_TABLE_H_ #define _NET_BATMAN_ADV_TRANSLATION_TABLE_H_
-#include "types.h" - int hna_local_init(struct bat_priv *bat_priv); void hna_local_add(struct net_device *soft_iface, uint8_t *addr); void hna_local_remove(struct bat_priv *bat_priv,
From: Linus Lüssing linus.luessing@ascom.ch
For a host in the mesh network, the batman layer should be transparent. However, we had one exception, data packets within the mesh network which have the same destination as a originator are being routed to that node, although there is no host that node's bat0 interface and therefore gets dropped anyway. This commit removes this exception.
Signed-off-by: Linus Lüssing linus.luessing@ascom.ch Signed-off-by: Sven Eckelmann sven@narfation.org --- net/batman-adv/unicast.c | 7 +------ 1 files changed, 1 insertions(+), 6 deletions(-)
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c index 6c92eef..1b5e761 100644 --- a/net/batman-adv/unicast.c +++ b/net/batman-adv/unicast.c @@ -281,7 +281,7 @@ int unicast_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv) { struct ethhdr *ethhdr = (struct ethhdr *)skb->data; struct unicast_packet *unicast_packet; - struct orig_node *orig_node; + struct orig_node *orig_node = NULL; struct batman_if *batman_if; struct neigh_node *router; int data_len = skb->len; @@ -292,11 +292,6 @@ int unicast_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv) /* get routing information */ if (is_multicast_ether_addr(ethhdr->h_dest)) orig_node = (struct orig_node *)gw_get_selected(bat_priv); - else - orig_node = ((struct orig_node *)hash_find(bat_priv->orig_hash, - compare_orig, - choose_orig, - ethhdr->h_dest));
/* check for hna host */ if (!orig_node)
From: Sven Eckelmann sven@narfation.org Date: Sat, 12 Feb 2011 00:21:39 +0100
Hi,
I would like propose following changes for net-next-2.6.git. Two of them are minor code style changes and the other two change minor issues in the routing/fragmentation code.
thanks, Sven
The following changes since commit 091b948306d2628320e77977eb7ae4a757b12180:
batman-adv: Merge README of v2011.0.0 release (2011-01-31 14:57:13 +0100)
are available in the git repository at: git://git.open-mesh.org/ecsv/linux-merge.git batman-adv/next
Pulled, thanks Sven.
b.a.t.m.a.n@lists.open-mesh.org