]> git.karo-electronics.de Git - linux-beck.git/blobdiff - net/mac802154/iface.c
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetoot...
[linux-beck.git] / net / mac802154 / iface.c
index b5a0936ce514eaa2706a036d715ad28427a9d2ae..7079cd32a7ad201265cf730027dda07254e622aa 100644 (file)
@@ -461,7 +461,7 @@ static int mac802154_header_create(struct sk_buff *skb,
 
        hdr.dest.pan_id = wpan_dev->pan_id;
        hdr.dest.mode = IEEE802154_ADDR_LONG;
-       memcpy(&hdr.dest.extended_addr, daddr, IEEE802154_EXTENDED_ADDR_LEN);
+       ieee802154_be64_to_le64(&hdr.dest.extended_addr, daddr);
 
        hdr.source.pan_id = hdr.dest.pan_id;
        hdr.source.mode = IEEE802154_ADDR_LONG;
@@ -469,8 +469,7 @@ static int mac802154_header_create(struct sk_buff *skb,
        if (!saddr)
                hdr.source.extended_addr = wpan_dev->extended_addr;
        else
-               memcpy(&hdr.source.extended_addr, saddr,
-                      IEEE802154_EXTENDED_ADDR_LEN);
+               ieee802154_be64_to_le64(&hdr.source.extended_addr, saddr);
 
        hlen = ieee802154_hdr_push(skb, &hdr);
        if (hlen < 0)
@@ -496,8 +495,7 @@ mac802154_header_parse(const struct sk_buff *skb, unsigned char *haddr)
        }
 
        if (hdr.source.mode == IEEE802154_ADDR_LONG) {
-               memcpy(haddr, &hdr.source.extended_addr,
-                      IEEE802154_EXTENDED_ADDR_LEN);
+               ieee802154_le64_to_be64(haddr, &hdr.source.extended_addr);
                return IEEE802154_EXTENDED_ADDR_LEN;
        }
 
@@ -549,7 +547,17 @@ static void ieee802154_if_setup(struct net_device *dev)
         */
        dev->needed_tailroom    = IEEE802154_MAX_AUTH_TAG_LEN +
                                  IEEE802154_FCS_LEN;
-       dev->mtu                = IEEE802154_MTU;
+       /* The mtu size is the payload without mac header in this case.
+        * We have a dynamic length header with a minimum header length
+        * which is hard_header_len. In this case we let mtu to the size
+        * of maximum payload which is IEEE802154_MTU - IEEE802154_FCS_LEN -
+        * hard_header_len. The FCS which is set by hardware or ndo_start_xmit
+        * and the minimum mac header which can be evaluated inside driver
+        * layer. The rest of mac header will be part of payload if greater
+        * than hard_header_len.
+        */
+       dev->mtu                = IEEE802154_MTU - IEEE802154_FCS_LEN -
+                                 dev->hard_header_len;
        dev->tx_queue_len       = 300;
        dev->flags              = IFF_NOARP | IFF_BROADCAST;
 }