forked from Minki/linux
0483546a3d
Bring-over mac802154_dev_get_dsn() function that was present in the Linux ZigBee kernel. This function is called by the 6LoWPAN code in order to properly set the DSN (Data Sequence Number) value in the IEEE 802.15.4 frame. Signed-off-by: Tony Cheneau <tony.cheneau@amnesiak.org> Signed-off-by: David S. Miller <davem@davemloft.net>
78 lines
2.2 KiB
C
78 lines
2.2 KiB
C
/*
|
|
* MAC commands interface
|
|
*
|
|
* Copyright 2007-2012 Siemens AG
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Written by:
|
|
* Sergey Lapin <slapin@ossfans.org>
|
|
* Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
|
* Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
|
|
*/
|
|
|
|
#include <linux/skbuff.h>
|
|
#include <linux/if_arp.h>
|
|
|
|
#include <net/ieee802154.h>
|
|
#include <net/ieee802154_netdev.h>
|
|
#include <net/wpan-phy.h>
|
|
#include <net/mac802154.h>
|
|
#include <net/nl802154.h>
|
|
|
|
#include "mac802154.h"
|
|
|
|
static int mac802154_mlme_start_req(struct net_device *dev,
|
|
struct ieee802154_addr *addr,
|
|
u8 channel, u8 page,
|
|
u8 bcn_ord, u8 sf_ord,
|
|
u8 pan_coord, u8 blx,
|
|
u8 coord_realign)
|
|
{
|
|
BUG_ON(addr->addr_type != IEEE802154_ADDR_SHORT);
|
|
|
|
mac802154_dev_set_pan_id(dev, addr->pan_id);
|
|
mac802154_dev_set_short_addr(dev, addr->short_addr);
|
|
mac802154_dev_set_ieee_addr(dev);
|
|
mac802154_dev_set_page_channel(dev, page, channel);
|
|
|
|
/* FIXME: add validation for unused parameters to be sane
|
|
* for SoftMAC
|
|
*/
|
|
ieee802154_nl_start_confirm(dev, IEEE802154_SUCCESS);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static struct wpan_phy *mac802154_get_phy(const struct net_device *dev)
|
|
{
|
|
struct mac802154_sub_if_data *priv = netdev_priv(dev);
|
|
|
|
BUG_ON(dev->type != ARPHRD_IEEE802154);
|
|
|
|
return to_phy(get_device(&priv->hw->phy->dev));
|
|
}
|
|
|
|
struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced = {
|
|
.get_phy = mac802154_get_phy,
|
|
};
|
|
|
|
struct ieee802154_mlme_ops mac802154_mlme_wpan = {
|
|
.get_phy = mac802154_get_phy,
|
|
.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,
|
|
};
|