Skip to content

Commit

Permalink
mac802154: use atomic ops for sequence incrementation
Browse files Browse the repository at this point in the history
This patch will use atomic operations for sequence number incrementation
while MAC header generation. Upper layers like af_802154 or 6LoWPAN
could call this function in a parallel context while generating 802.15.4
MAC header before queuing into wpan interfaces transmit queue.

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>
  • Loading branch information
alexaring authored and holtmann committed May 23, 2015
1 parent 4a3a8c0 commit 344f8c1
Show file tree
Hide file tree
Showing 7 changed files with 8 additions and 25 deletions.
4 changes: 2 additions & 2 deletions include/net/cfg802154.h
Original file line number Diff line number Diff line change
Expand Up @@ -177,9 +177,9 @@ struct wpan_dev {
__le64 extended_addr;

/* MAC BSN field */
u8 bsn;
atomic_t bsn;
/* MAC DSN field */
u8 dsn;
atomic_t dsn;

u8 min_be;
u8 max_be;
Expand Down
1 change: 0 additions & 1 deletion include/net/ieee802154_netdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,6 @@ struct ieee802154_mlme_ops {
*/
__le16 (*get_pan_id)(const struct net_device *dev);
__le16 (*get_short_addr)(const struct net_device *dev);
u8 (*get_dsn)(const struct net_device *dev);
};

static inline struct ieee802154_mlme_ops *
Expand Down
8 changes: 0 additions & 8 deletions net/ieee802154/6lowpan/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,6 @@ static __le16 lowpan_get_short_addr(const struct net_device *dev)
return ieee802154_mlme_ops(real_dev)->get_short_addr(real_dev);
}

static u8 lowpan_get_dsn(const struct net_device *dev)
{
struct net_device *real_dev = lowpan_dev_info(dev)->real_dev;

return ieee802154_mlme_ops(real_dev)->get_dsn(real_dev);
}

static struct header_ops lowpan_header_ops = {
.create = lowpan_header_create,
};
Expand Down Expand Up @@ -106,7 +99,6 @@ static const struct net_device_ops lowpan_netdev_ops = {
static struct ieee802154_mlme_ops lowpan_mlme = {
.get_pan_id = lowpan_get_pan_id,
.get_short_addr = lowpan_get_short_addr,
.get_dsn = lowpan_get_dsn,
};

static void lowpan_setup(struct net_device *dev)
Expand Down
1 change: 0 additions & 1 deletion net/mac802154/ieee802154_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,6 @@ __le16 mac802154_dev_get_short_addr(const struct net_device *dev);
__le16 mac802154_dev_get_pan_id(const struct net_device *dev);
void mac802154_dev_set_pan_id(struct net_device *dev, __le16 val);
void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan);
u8 mac802154_dev_get_dsn(const struct net_device *dev);

int mac802154_get_params(struct net_device *dev,
struct ieee802154_llsec_params *params);
Expand Down
9 changes: 6 additions & 3 deletions net/mac802154/iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ static int mac802154_header_create(struct sk_buff *skb,
hdr.fc.type = cb->type;
hdr.fc.security_enabled = cb->secen;
hdr.fc.ack_request = cb->ackreq;
hdr.seq = ieee802154_mlme_ops(dev)->get_dsn(dev);
hdr.seq = atomic_inc_return(&dev->ieee802154_ptr->dsn) & 0xFF;

if (mac802154_set_header_security(sdata, &hdr, cb) < 0)
return -EINVAL;
Expand Down Expand Up @@ -468,13 +468,16 @@ ieee802154_setup_sdata(struct ieee802154_sub_if_data *sdata,
enum nl802154_iftype type)
{
struct wpan_dev *wpan_dev = &sdata->wpan_dev;
u8 tmp;

/* set some type-dependent values */
sdata->vif.type = type;
sdata->wpan_dev.iftype = type;

get_random_bytes(&wpan_dev->bsn, 1);
get_random_bytes(&wpan_dev->dsn, 1);
get_random_bytes(&tmp, sizeof(tmp));
atomic_set(&wpan_dev->bsn, tmp);
get_random_bytes(&tmp, sizeof(tmp));
atomic_set(&wpan_dev->dsn, tmp);

/* defaults per 802.15.4-2011 */
wpan_dev->min_be = 3;
Expand Down
1 change: 0 additions & 1 deletion net/mac802154/mac_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,6 @@ struct ieee802154_mlme_ops mac802154_mlme_wpan = {
.start_req = mac802154_mlme_start_req,
.get_pan_id = mac802154_dev_get_pan_id,
.get_short_addr = mac802154_dev_get_short_addr,
.get_dsn = mac802154_dev_get_dsn,

.llsec = &mac802154_llsec_ops,

Expand Down
9 changes: 0 additions & 9 deletions net/mac802154/mib.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,6 @@ void mac802154_dev_set_pan_id(struct net_device *dev, __le16 val)
spin_unlock_bh(&sdata->mib_lock);
}

u8 mac802154_dev_get_dsn(const struct net_device *dev)
{
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);

BUG_ON(dev->type != ARPHRD_IEEE802154);

return sdata->wpan_dev.dsn++;
}

void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan)
{
struct ieee802154_sub_if_data *sdata = IEEE802154_DEV_TO_SUB_IF(dev);
Expand Down

0 comments on commit 344f8c1

Please sign in to comment.