Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ieee802154: 6lowpan: set ackreq when needed

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>

authored by

Alexander Aring and committed by
Marcel Holtmann
1caf6f47 d6d244d4

+3 -2
+3 -2
net/ieee802154/6lowpan/tx.c
··· 190 190 191 191 static int lowpan_header(struct sk_buff *skb, struct net_device *dev) 192 192 { 193 + struct wpan_dev *wpan_dev = lowpan_dev_info(dev)->real_dev->ieee802154_ptr; 193 194 struct ieee802154_addr sa, da; 194 195 struct ieee802154_mac_cb *cb = mac_cb_init(skb); 195 196 struct lowpan_addr_info info; ··· 208 207 209 208 /* prepare wpan address data */ 210 209 sa.mode = IEEE802154_ADDR_LONG; 211 - sa.pan_id = lowpan_dev_info(dev)->real_dev->ieee802154_ptr->pan_id; 210 + sa.pan_id = wpan_dev->pan_id; 212 211 sa.extended_addr = ieee802154_devaddr_from_raw(saddr); 213 212 214 213 /* intra-PAN communications */ ··· 224 223 } else { 225 224 da.mode = IEEE802154_ADDR_LONG; 226 225 da.extended_addr = ieee802154_devaddr_from_raw(daddr); 227 - cb->ackreq = true; 226 + cb->ackreq = wpan_dev->frame_retries >= 0; 228 227 } 229 228 230 229 return dev_hard_header(skb, lowpan_dev_info(dev)->real_dev,