|
@@ -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);
|