All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types
@ 2015-09-30  8:20 Alexander Aring
  2015-09-30  8:20 ` [PATCH bluetooth-next 2/3] ieee802154: 6lowpan: don't skip first dsn while fragmentation Alexander Aring
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Alexander Aring @ 2015-09-30  8:20 UTC (permalink / raw)
  To: linux-wpan; +Cc: kernel, Alexander Aring

This patch changes datagram size variable from u16 type to unsigned int.
The reason is that an IPv6 header has an MAX_UIN16 payload length, but
the datagram size is payload + IPv6 header length. This avoids overflows
at some places.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
---
 net/ieee802154/6lowpan/6lowpan_i.h  | 4 ++--
 net/ieee802154/6lowpan/reassembly.c | 2 +-
 net/ieee802154/6lowpan/tx.c         | 8 ++++----
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/net/ieee802154/6lowpan/6lowpan_i.h b/net/ieee802154/6lowpan/6lowpan_i.h
index b4e17a7..10d44d0 100644
--- a/net/ieee802154/6lowpan/6lowpan_i.h
+++ b/net/ieee802154/6lowpan/6lowpan_i.h
@@ -18,7 +18,7 @@ typedef unsigned __bitwise__ lowpan_rx_result;
 
 struct lowpan_create_arg {
 	u16 tag;
-	u16 d_size;
+	unsigned int d_size;
 	const struct ieee802154_addr *src;
 	const struct ieee802154_addr *dst;
 };
@@ -29,7 +29,7 @@ struct lowpan_frag_queue {
 	struct inet_frag_queue	q;
 
 	u16			tag;
-	u16			d_size;
+	unsigned int		d_size;
 	struct ieee802154_addr	saddr;
 	struct ieee802154_addr	daddr;
 };
diff --git a/net/ieee802154/6lowpan/reassembly.c b/net/ieee802154/6lowpan/reassembly.c
index 12e8cf4..af663cb 100644
--- a/net/ieee802154/6lowpan/reassembly.c
+++ b/net/ieee802154/6lowpan/reassembly.c
@@ -37,7 +37,7 @@ static struct inet_frags lowpan_frags;
 static int lowpan_frag_reasm(struct lowpan_frag_queue *fq,
 			     struct sk_buff *prev, struct net_device *ldev);
 
-static unsigned int lowpan_hash_frag(u16 tag, u16 d_size,
+static unsigned int lowpan_hash_frag(u16 tag, unsigned int d_size,
 				     const struct ieee802154_addr *saddr,
 				     const struct ieee802154_addr *daddr)
 {
diff --git a/net/ieee802154/6lowpan/tx.c b/net/ieee802154/6lowpan/tx.c
index 7e0563e..5ecf8af 100644
--- a/net/ieee802154/6lowpan/tx.c
+++ b/net/ieee802154/6lowpan/tx.c
@@ -131,8 +131,8 @@ lowpan_xmit_fragment(struct sk_buff *skb, const struct ieee802154_hdr *wpan_hdr,
 
 static int
 lowpan_xmit_fragmented(struct sk_buff *skb, struct net_device *ldev,
-		       const struct ieee802154_hdr *wpan_hdr, u16 dgram_size,
-		       u16 dgram_offset)
+		       const struct ieee802154_hdr *wpan_hdr,
+		       unsigned int dgram_size, unsigned int dgram_offset)
 {
 	__be16 frag_tag;
 	u8 frag_hdr[5];
@@ -194,7 +194,7 @@ err:
 }
 
 static int lowpan_header(struct sk_buff *skb, struct net_device *ldev,
-			 u16 *dgram_size, u16 *dgram_offset)
+			 unsigned int *dgram_size, unsigned int *dgram_offset)
 {
 	struct wpan_dev *wpan_dev = lowpan_dev_info(ldev)->wdev->ieee802154_ptr;
 	struct ieee802154_addr sa, da;
@@ -244,7 +244,7 @@ netdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *ldev)
 {
 	struct ieee802154_hdr wpan_hdr;
 	int max_single, ret;
-	u16 dgram_size, dgram_offset;
+	unsigned int dgram_size, dgram_offset;
 
 	pr_debug("package xmit\n");
 
-- 
2.6.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH bluetooth-next 2/3] ieee802154: 6lowpan: don't skip first dsn while fragmentation
  2015-09-30  8:20 [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types Alexander Aring
@ 2015-09-30  8:20 ` Alexander Aring
  2015-09-30 11:25   ` Marcel Holtmann
  2015-09-30  8:20 ` [PATCH bluetooth-next 3/3] ieee802154: 6lowpan: add tx/rx stats Alexander Aring
  2015-09-30 11:25 ` [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types Marcel Holtmann
  2 siblings, 1 reply; 6+ messages in thread
From: Alexander Aring @ 2015-09-30  8:20 UTC (permalink / raw)
  To: linux-wpan; +Cc: kernel, Alexander Aring

This patch fixes the data frame sequence numer (dsn) while 6lowpan
fragmentation for frag1. Currently we create one 802.15.4 header at
first, then check if it's match into one frame and at the end construct
many fragments and calling wpan_dev_hard_header for each of them,
inclusive for the first fragment. This will make the first generated
header to garbage, instead we copying this header for frag1 instead of
generate a new one which skips one dsn.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
---
 net/ieee802154/6lowpan/tx.c | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/net/ieee802154/6lowpan/tx.c b/net/ieee802154/6lowpan/tx.c
index 5ecf8af..3b665e1 100644
--- a/net/ieee802154/6lowpan/tx.c
+++ b/net/ieee802154/6lowpan/tx.c
@@ -79,7 +79,7 @@ int lowpan_header_create(struct sk_buff *skb, struct net_device *ldev,
 
 static struct sk_buff*
 lowpan_alloc_frag(struct sk_buff *skb, int size,
-		  const struct ieee802154_hdr *master_hdr)
+		  const struct ieee802154_hdr *master_hdr, bool frag1)
 {
 	struct net_device *wdev = lowpan_dev_info(skb->dev)->wdev;
 	struct sk_buff *frag;
@@ -95,11 +95,17 @@ lowpan_alloc_frag(struct sk_buff *skb, int size,
 		skb_reset_network_header(frag);
 		*mac_cb(frag) = *mac_cb(skb);
 
-		rc = wpan_dev_hard_header(frag, wdev, &master_hdr->dest,
-					  &master_hdr->source, size);
-		if (rc < 0) {
-			kfree_skb(frag);
-			return ERR_PTR(rc);
+		if (frag1) {
+			memcpy(skb_put(frag, skb->mac_len),
+			       skb_mac_header(skb), skb->mac_len);
+		} else {
+			rc = wpan_dev_hard_header(frag, wdev,
+						  &master_hdr->dest,
+						  &master_hdr->source, size);
+			if (rc < 0) {
+				kfree_skb(frag);
+				return ERR_PTR(rc);
+			}
 		}
 	} else {
 		frag = ERR_PTR(-ENOMEM);
@@ -111,13 +117,13 @@ lowpan_alloc_frag(struct sk_buff *skb, int size,
 static int
 lowpan_xmit_fragment(struct sk_buff *skb, const struct ieee802154_hdr *wpan_hdr,
 		     u8 *frag_hdr, int frag_hdrlen,
-		     int offset, int len)
+		     int offset, int len, bool frag1)
 {
 	struct sk_buff *frag;
 
 	raw_dump_inline(__func__, " fragment header", frag_hdr, frag_hdrlen);
 
-	frag = lowpan_alloc_frag(skb, frag_hdrlen + len, wpan_hdr);
+	frag = lowpan_alloc_frag(skb, frag_hdrlen + len, wpan_hdr, frag1);
 	if (IS_ERR(frag))
 		return PTR_ERR(frag);
 
@@ -156,7 +162,8 @@ lowpan_xmit_fragmented(struct sk_buff *skb, struct net_device *ldev,
 
 	rc = lowpan_xmit_fragment(skb, wpan_hdr, frag_hdr,
 				  LOWPAN_FRAG1_HEAD_SIZE, 0,
-				  frag_len + skb_network_header_len(skb));
+				  frag_len + skb_network_header_len(skb),
+				  true);
 	if (rc) {
 		pr_debug("%s unable to send FRAG1 packet (tag: %d)",
 			 __func__, ntohs(frag_tag));
@@ -177,7 +184,7 @@ lowpan_xmit_fragmented(struct sk_buff *skb, struct net_device *ldev,
 
 		rc = lowpan_xmit_fragment(skb, wpan_hdr, frag_hdr,
 					  LOWPAN_FRAGN_HEAD_SIZE, skb_offset,
-					  frag_len);
+					  frag_len, false);
 		if (rc) {
 			pr_debug("%s unable to send a FRAGN packet. (tag: %d, offset: %d)\n",
 				 __func__, ntohs(frag_tag), skb_offset);
-- 
2.6.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH bluetooth-next 3/3] ieee802154: 6lowpan: add tx/rx stats
  2015-09-30  8:20 [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types Alexander Aring
  2015-09-30  8:20 ` [PATCH bluetooth-next 2/3] ieee802154: 6lowpan: don't skip first dsn while fragmentation Alexander Aring
@ 2015-09-30  8:20 ` Alexander Aring
  2015-09-30 11:25   ` Marcel Holtmann
  2015-09-30 11:25 ` [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types Marcel Holtmann
  2 siblings, 1 reply; 6+ messages in thread
From: Alexander Aring @ 2015-09-30  8:20 UTC (permalink / raw)
  To: linux-wpan; +Cc: kernel, Alexander Aring

This patch adds support for increment transmit and receive stats. The
meaning of these stats are IPv6 based, which shows the stats after
running the 6lowpan adaptation layer (uncompression/compression,
fragmentation handling) on receive and before the adaptation layer
when transmit.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
---
 net/ieee802154/6lowpan/rx.c | 2 ++
 net/ieee802154/6lowpan/tx.c | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/net/ieee802154/6lowpan/rx.c b/net/ieee802154/6lowpan/rx.c
index b1fd47d..65d55e0 100644
--- a/net/ieee802154/6lowpan/rx.c
+++ b/net/ieee802154/6lowpan/rx.c
@@ -29,6 +29,8 @@
 static int lowpan_give_skb_to_device(struct sk_buff *skb)
 {
 	skb->protocol = htons(ETH_P_IPV6);
+	skb->dev->stats.rx_packets++;
+	skb->dev->stats.rx_bytes += skb->len;
 
 	return netif_rx(skb);
 }
diff --git a/net/ieee802154/6lowpan/tx.c b/net/ieee802154/6lowpan/tx.c
index 3b665e1..5736302 100644
--- a/net/ieee802154/6lowpan/tx.c
+++ b/net/ieee802154/6lowpan/tx.c
@@ -192,6 +192,8 @@ lowpan_xmit_fragmented(struct sk_buff *skb, struct net_device *ldev,
 		}
 	} while (skb_unprocessed > frag_cap);
 
+	ldev->stats.tx_packets++;
+	ldev->stats.tx_bytes += dgram_size;
 	consume_skb(skb);
 	return NET_XMIT_SUCCESS;
 
@@ -277,6 +279,8 @@ netdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *ldev)
 
 	if (skb_tail_pointer(skb) - skb_network_header(skb) <= max_single) {
 		skb->dev = lowpan_dev_info(ldev)->wdev;
+		ldev->stats.tx_packets++;
+		ldev->stats.tx_bytes += dgram_size;
 		return dev_queue_xmit(skb);
 	} else {
 		netdev_tx_t rc;
-- 
2.6.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH bluetooth-next 3/3] ieee802154: 6lowpan: add tx/rx stats
  2015-09-30  8:20 ` [PATCH bluetooth-next 3/3] ieee802154: 6lowpan: add tx/rx stats Alexander Aring
@ 2015-09-30 11:25   ` Marcel Holtmann
  0 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2015-09-30 11:25 UTC (permalink / raw)
  To: Alexander Aring; +Cc: linux-wpan, kernel

Hi Alex,

> This patch adds support for increment transmit and receive stats. The
> meaning of these stats are IPv6 based, which shows the stats after
> running the 6lowpan adaptation layer (uncompression/compression,
> fragmentation handling) on receive and before the adaptation layer
> when transmit.
> 
> Signed-off-by: Alexander Aring <alex.aring@gmail.com>
> ---
> net/ieee802154/6lowpan/rx.c | 2 ++
> net/ieee802154/6lowpan/tx.c | 4 ++++
> 2 files changed, 6 insertions(+)

patch has been applied to bluetooth-next tree.

Regards

Marcel


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types
  2015-09-30  8:20 [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types Alexander Aring
  2015-09-30  8:20 ` [PATCH bluetooth-next 2/3] ieee802154: 6lowpan: don't skip first dsn while fragmentation Alexander Aring
  2015-09-30  8:20 ` [PATCH bluetooth-next 3/3] ieee802154: 6lowpan: add tx/rx stats Alexander Aring
@ 2015-09-30 11:25 ` Marcel Holtmann
  2 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2015-09-30 11:25 UTC (permalink / raw)
  To: Alexander Aring; +Cc: linux-wpan, kernel

Hi Alex,

> This patch changes datagram size variable from u16 type to unsigned int.
> The reason is that an IPv6 header has an MAX_UIN16 payload length, but
> the datagram size is payload + IPv6 header length. This avoids overflows
> at some places.
> 
> Signed-off-by: Alexander Aring <alex.aring@gmail.com>
> ---
> net/ieee802154/6lowpan/6lowpan_i.h  | 4 ++--
> net/ieee802154/6lowpan/reassembly.c | 2 +-
> net/ieee802154/6lowpan/tx.c         | 8 ++++----
> 3 files changed, 7 insertions(+), 7 deletions(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH bluetooth-next 2/3] ieee802154: 6lowpan: don't skip first dsn while fragmentation
  2015-09-30  8:20 ` [PATCH bluetooth-next 2/3] ieee802154: 6lowpan: don't skip first dsn while fragmentation Alexander Aring
@ 2015-09-30 11:25   ` Marcel Holtmann
  0 siblings, 0 replies; 6+ messages in thread
From: Marcel Holtmann @ 2015-09-30 11:25 UTC (permalink / raw)
  To: Alexander Aring; +Cc: linux-wpan, kernel

Hi Alex,

> This patch fixes the data frame sequence numer (dsn) while 6lowpan
> fragmentation for frag1. Currently we create one 802.15.4 header at
> first, then check if it's match into one frame and at the end construct
> many fragments and calling wpan_dev_hard_header for each of them,
> inclusive for the first fragment. This will make the first generated
> header to garbage, instead we copying this header for frag1 instead of
> generate a new one which skips one dsn.
> 
> Signed-off-by: Alexander Aring <alex.aring@gmail.com>
> ---
> net/ieee802154/6lowpan/tx.c | 27 +++++++++++++++++----------
> 1 file changed, 17 insertions(+), 10 deletions(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-09-30 11:25 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-30  8:20 [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types Alexander Aring
2015-09-30  8:20 ` [PATCH bluetooth-next 2/3] ieee802154: 6lowpan: don't skip first dsn while fragmentation Alexander Aring
2015-09-30 11:25   ` Marcel Holtmann
2015-09-30  8:20 ` [PATCH bluetooth-next 3/3] ieee802154: 6lowpan: add tx/rx stats Alexander Aring
2015-09-30 11:25   ` Marcel Holtmann
2015-09-30 11:25 ` [PATCH bluetooth-next 1/3] ieee802154: 6lowpan: change datagram var types Marcel Holtmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.