mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
6lowpan: iphc: override l2 packet information
The skb->pkt_type need to be set by L2, but on 6LoWPAN there exists L2 e.g. BTLE which doesn't has multicast addressing. If it's a multicast or not is detected by IPHC headers multicast bit. The IPv6 layer will evaluate this pkt_type, so we force set this type while uncompressing. Should be okay for 802.15.4 as well. Signed-off-by: Alexander Aring <aar@pengutronix.de> Reviewed-by: Stefan Schmidt <stefan@osg.samsung.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
be054fc830
commit
94e4a68039
@ -666,6 +666,8 @@ int lowpan_header_decompress(struct sk_buff *skb, const struct net_device *dev,
|
||||
|
||||
switch (iphc1 & (LOWPAN_IPHC_M | LOWPAN_IPHC_DAC)) {
|
||||
case LOWPAN_IPHC_M | LOWPAN_IPHC_DAC:
|
||||
skb->pkt_type = PACKET_BROADCAST;
|
||||
|
||||
spin_lock_bh(&lowpan_dev(dev)->ctx.lock);
|
||||
ci = lowpan_iphc_ctx_get_by_id(dev, LOWPAN_IPHC_CID_DCI(cid));
|
||||
if (!ci) {
|
||||
@ -681,11 +683,15 @@ int lowpan_header_decompress(struct sk_buff *skb, const struct net_device *dev,
|
||||
spin_unlock_bh(&lowpan_dev(dev)->ctx.lock);
|
||||
break;
|
||||
case LOWPAN_IPHC_M:
|
||||
skb->pkt_type = PACKET_BROADCAST;
|
||||
|
||||
/* multicast */
|
||||
err = lowpan_uncompress_multicast_daddr(skb, &hdr.daddr,
|
||||
iphc1 & LOWPAN_IPHC_DAM_MASK);
|
||||
break;
|
||||
case LOWPAN_IPHC_DAC:
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
|
||||
spin_lock_bh(&lowpan_dev(dev)->ctx.lock);
|
||||
ci = lowpan_iphc_ctx_get_by_id(dev, LOWPAN_IPHC_CID_DCI(cid));
|
||||
if (!ci) {
|
||||
@ -701,6 +707,8 @@ int lowpan_header_decompress(struct sk_buff *skb, const struct net_device *dev,
|
||||
spin_unlock_bh(&lowpan_dev(dev)->ctx.lock);
|
||||
break;
|
||||
default:
|
||||
skb->pkt_type = PACKET_HOST;
|
||||
|
||||
err = lowpan_iphc_uncompress_addr(skb, dev, &hdr.daddr,
|
||||
iphc1 & LOWPAN_IPHC_DAM_MASK,
|
||||
daddr);
|
||||
|
Loading…
Reference in New Issue
Block a user