ieee802154: 6lowpan: set ackreq when needed
authorAlexander Aring <alex.aring@gmail.com>
Tue, 2 Jun 2015 13:55:17 +0000 (15:55 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 2 Jun 2015 15:09:35 +0000 (17:09 +0200)
This patch sets the acknowledge request bit inside the 802.15.4 mac
header when frame retries is 0 or above. The other frame retries value
which is -1 indicates that the transmitter doesn't care about an
acknowledge frame which will be ignored after transmitting if the node
sends anyway an ack frame after receiving. This is currently unnecessary
traffic if the max frame retries parameter is -1.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Reviewed-by: Stefan Schmidt <stefan@osg.samsung.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/ieee802154/6lowpan/tx.c

index 98acf7319754970f109a1c6f27d8ff9da161dac2..2597abbf7f4bbbd121486306994f5e568de4d37e 100644 (file)
@@ -190,6 +190,7 @@ err:
 
 static int lowpan_header(struct sk_buff *skb, struct net_device *dev)
 {
+       struct wpan_dev *wpan_dev = lowpan_dev_info(dev)->real_dev->ieee802154_ptr;
        struct ieee802154_addr sa, da;
        struct ieee802154_mac_cb *cb = mac_cb_init(skb);
        struct lowpan_addr_info info;
@@ -207,7 +208,7 @@ static int lowpan_header(struct sk_buff *skb, struct net_device *dev)
 
        /* prepare wpan address data */
        sa.mode = IEEE802154_ADDR_LONG;
-       sa.pan_id = lowpan_dev_info(dev)->real_dev->ieee802154_ptr->pan_id;
+       sa.pan_id = wpan_dev->pan_id;
        sa.extended_addr = ieee802154_devaddr_from_raw(saddr);
 
        /* intra-PAN communications */
@@ -223,7 +224,7 @@ static int lowpan_header(struct sk_buff *skb, struct net_device *dev)
        } else {
                da.mode = IEEE802154_ADDR_LONG;
                da.extended_addr = ieee802154_devaddr_from_raw(daddr);
-               cb->ackreq = true;
+               cb->ackreq = wpan_dev->frame_retries >= 0;
        }
 
        return dev_hard_header(skb, lowpan_dev_info(dev)->real_dev,