Message ID | 20170217155003.4594-4-luiz.dentz@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Hello. On 02/17/2017 04:50 PM, Luiz Augusto von Dentz wrote: > From: Alexander Aring <aar@pengutronix.de> > > 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> > --- > net/6lowpan/iphc.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/net/6lowpan/iphc.c b/net/6lowpan/iphc.c > index 79f1fa2..fb5f6fa 100644 > --- a/net/6lowpan/iphc.c > +++ b/net/6lowpan/iphc.c > @@ -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); > Reviewed-by: Stefan Schmidt <stefan@osg.samsung.com> regards Stefan Schmidt -- To unsubscribe from this list: send the line "unsubscribe linux-wpan" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/6lowpan/iphc.c b/net/6lowpan/iphc.c index 79f1fa2..fb5f6fa 100644 --- a/net/6lowpan/iphc.c +++ b/net/6lowpan/iphc.c @@ -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);