Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 368685
b: refs/heads/master
c: 9da2924
h: refs/heads/master
i:
  368683: 349a6ef
v: v3
  • Loading branch information
Tony Cheneau authored and David S. Miller committed Mar 26, 2013
1 parent 92b7239 commit 599df00
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d991b98f5006e36b7ee9f8ef89ed3a8636692d69
refs/heads/master: 9da2924c4ba8da5f41285c98eb1ba9aee99344a4
25 changes: 21 additions & 4 deletions trunk/net/ieee802154/6lowpan.c
Original file line number Diff line number Diff line change
Expand Up @@ -742,10 +742,16 @@ lowpan_process_data(struct sk_buff *skb)
/* adds the 3 MSB to the 8 LSB to retrieve the 11 bits length */
len = ((iphc0 & 7) << 8) | slen;

/* FRAGN */
if ((iphc0 & LOWPAN_DISPATCH_MASK) != LOWPAN_DISPATCH_FRAG1) {
if ((iphc0 & LOWPAN_DISPATCH_MASK) == LOWPAN_DISPATCH_FRAG1) {
pr_debug("%s received a FRAG1 packet (tag: %d, "
"size of the entire IP packet: %d)",
__func__, tag, len);
} else { /* FRAGN */
if (lowpan_fetch_skb_u8(skb, &offset))
goto unlock_and_drop;
pr_debug("%s received a FRAGN packet (tag: %d, "
"size of the entire IP packet: %d, "
"offset: %d)", __func__, tag, len, offset * 8);
}

/*
Expand All @@ -762,6 +768,8 @@ lowpan_process_data(struct sk_buff *skb)

/* alloc new frame structure */
if (!found) {
pr_debug("%s first fragment received for tag %d, "
"begin packet reassembly", __func__, tag);
frame = lowpan_alloc_new_frame(skb, len, tag);
if (!frame)
goto unlock_and_drop;
Expand All @@ -784,6 +792,9 @@ lowpan_process_data(struct sk_buff *skb)
list_del(&frame->list);
spin_unlock_bh(&flist_lock);

pr_debug("%s successfully reassembled fragment "
"(tag %d)", __func__, tag);

dev_kfree_skb(skb);
skb = frame->skb;
kfree(frame);
Expand Down Expand Up @@ -1034,8 +1045,11 @@ lowpan_skb_fragmentation(struct sk_buff *skb)
err = lowpan_fragment_xmit(skb, head, header_length, LOWPAN_FRAG_SIZE,
0, LOWPAN_DISPATCH_FRAG1);

if (err)
if (err) {
pr_debug("%s unable to send FRAG1 packet (tag: %d)",
__func__, tag);
goto exit;
}

offset = LOWPAN_FRAG_SIZE;

Expand All @@ -1053,8 +1067,11 @@ lowpan_skb_fragmentation(struct sk_buff *skb)

err = lowpan_fragment_xmit(skb, head, header_length,
len, offset, LOWPAN_DISPATCH_FRAGN);
if (err)
if (err) {
pr_debug("%s unable to send a subsequent FRAGN packet "
"(tag: %d, offset: %d", __func__, tag, offset);
goto exit;
}

offset += len;
}
Expand Down

0 comments on commit 599df00

Please sign in to comment.