* [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
* 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
* [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
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 a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox