Skip to content

Commit

Permalink
6lowpan: add udp warning for elided checksum
Browse files Browse the repository at this point in the history
Bit 5 of "UDP LOWPAN_NHC Format" indicate that the checksum can be
elided.
The host need to calculate the udp checksum afterwards but this isn't
supported right now.

See:
http://tools.ietf.org/html/rfc6282#section-4.3.3
Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Alexander Aring authored and Marcel Holtmann committed Dec 17, 2013
1 parent e5d966e commit 573701c
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
1 change: 1 addition & 0 deletions net/ieee802154/6lowpan.h
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@
#define LOWPAN_NHC_UDP_CS_P_10 0xF2 /* source = 0xF0 + 8bit inline,
dest = 16 bit inline */
#define LOWPAN_NHC_UDP_CS_P_11 0xF3 /* source & dest = 0xF0B + 4bit inline */
#define LOWPAN_NHC_UDP_CS_C 0x04 /* checksum elided */

#ifdef DEBUG
/* print data in line */
Expand Down
11 changes: 8 additions & 3 deletions net/ieee802154/6lowpan_iphc.c
Original file line number Diff line number Diff line change
Expand Up @@ -309,9 +309,14 @@ uncompress_udp_header(struct sk_buff *skb, struct udphdr *uh)
pr_debug("uncompressed UDP ports: src = %d, dst = %d\n",
ntohs(uh->source), ntohs(uh->dest));

/* copy checksum */
memcpy(&uh->check, &skb->data[0], 2);
skb_pull(skb, 2);
/* checksum */
if (tmp & LOWPAN_NHC_UDP_CS_C) {
pr_debug_ratelimited("checksum elided currently not supported\n");
goto err;
} else {
memcpy(&uh->check, &skb->data[0], 2);
skb_pull(skb, 2);
}

/*
* UDP lenght needs to be infered from the lower layers
Expand Down

0 comments on commit 573701c

Please sign in to comment.