]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/6lowpan/iphc.c
Merge tag 'linux-can-next-for-4.4-20150921' of git://git.kernel.org/pub/scm/linux...
[karo-tx-linux.git] / net / 6lowpan / iphc.c
index 94a375c04f21cd5a9b525f7dffb4a14657deea89..78c8a495b57174565aaeda4e6a626b16bb82c240 100644 (file)
@@ -48,7 +48,6 @@
 
 #include <linux/bitops.h>
 #include <linux/if_arp.h>
-#include <linux/module.h>
 #include <linux/netdevice.h>
 #include <net/6lowpan.h>
 #include <net/ipv6.h>
@@ -284,7 +283,7 @@ lowpan_header_decompress(struct sk_buff *skb, struct net_device *dev,
                if (lowpan_fetch_skb(skb, &tmp, sizeof(tmp)))
                        return -EINVAL;
 
-               hdr.flow_lbl[0] = (skb->data[0] & 0x0F) | ((tmp >> 2) & 0x30);
+               hdr.flow_lbl[0] = (tmp & 0x0F) | ((tmp >> 2) & 0x30);
                memcpy(&hdr.flow_lbl[1], &skb->data[0], 2);
                skb_pull(skb, 2);
                break;
@@ -367,7 +366,18 @@ lowpan_header_decompress(struct sk_buff *skb, struct net_device *dev,
                        return err;
        }
 
-       hdr.payload_len = htons(skb->len);
+       switch (lowpan_priv(dev)->lltype) {
+       case LOWPAN_LLTYPE_IEEE802154:
+               if (lowpan_802154_cb(skb)->d_size)
+                       hdr.payload_len = htons(lowpan_802154_cb(skb)->d_size -
+                                               sizeof(struct ipv6hdr));
+               else
+                       hdr.payload_len = htons(skb->len);
+               break;
+       default:
+               hdr.payload_len = htons(skb->len);
+               break;
+       }
 
        pr_debug("skb headroom size = %d, data length = %d\n",
                 skb_headroom(skb), skb->len);
@@ -610,19 +620,3 @@ int lowpan_header_compress(struct sk_buff *skb, struct net_device *dev,
        return 0;
 }
 EXPORT_SYMBOL_GPL(lowpan_header_compress);
-
-static int __init lowpan_module_init(void)
-{
-       request_module_nowait("nhc_dest");
-       request_module_nowait("nhc_fragment");
-       request_module_nowait("nhc_hop");
-       request_module_nowait("nhc_ipv6");
-       request_module_nowait("nhc_mobility");
-       request_module_nowait("nhc_routing");
-       request_module_nowait("nhc_udp");
-
-       return 0;
-}
-module_init(lowpan_module_init);
-
-MODULE_LICENSE("GPL");