无线传感网:ieee802154与6lowpan在kernel 3.0/4.0的框架分析

  kernel 4.0 ieee802154 6lowpan 框架


///

1Kernel 3.0自上而下层次:

 Netlink  接口

.mac 层的netlink

mlme层 Ops 接口

Kenrel 3.0 并没有实现:ieee802154_mlme_ops的驱动;如下是一个驱动例子 fake_mlme;

核心层网络设备驱动实例化

两种类型的网络设备驱动:

@net_device_ops mac802154_wpan_ops;

@net_device_ops mac802154_monitor_ops;

硬件驱动ieee802154_ops

struct ieee802154_ops {

struct module        *owner;

int                (*start)(struct ieee802154_dev *dev);

void                (*stop)(struct ieee802154_dev *dev);

int                (*xmit)(struct ieee802154_dev *dev,

 

2Kernel4 .0自上而下层次:

Netlink  接口

包括 mac 层的netlinknl802154

mlme层 Ops 接口

Kenrel 3.0 并没有实现:ieee802154_mlme_ops的驱动;如下是一个驱动例子 fake_mlme;

cfg802154接口

以上的netlink 接口都是,通过cfg接口来完成对macphy的控制。

核心层网络设备驱动实例化

两种类型的网络设备驱动:

iface.c@net_device_ops mac802154_wpan_ops;

iface.c@net_device_ops mac802154_monitor_ops;

硬件驱动ieee802154_ops

由两层封装:ieee802154_local ieee802154_ops:

/* mac802154 device private data */

struct ieee802154_local {

struct ieee802154_hw hw;

const struct ieee802154_ops *ops;

 

…..

struct ieee802154_ops {

struct module        *owner;

int                (*start)(struct ieee802154_dev *dev);

void                (*stop)(struct ieee802154_dev *dev);

int                (*xmit)(struct ieee802154_dev *dev,

 

   Netlink 接口

2.0  kernel 4.0 内核的netlink接口

两种netlink接口:

接口1.mac 层的netlink :名称:#define IEEE802154_NL_NAME "802.15.4MAC"

它由有两部分组成:

macnetlink

用于让用户层程序控制ieee802154设备(协调器,beacon设备)的,激活/关闭/扫描/

phynetlink

Kernel3.0用于让用户层程序可以,增加/添加/一个ieee802.15.4设备;列出当前系统的ieee802.15.4设备,

kernel4.0是用于用户层,可以增加/添加/一个虚拟ieee802.15.4设备。

netlink.c@定义netlink接口:

static const struct genl_ops ieee8021154_ops[] = {

/*see nl-phy.c */

IEEE802154_DUMP(IEEE802154_LIST_PHY,ieee802154_list_phy,

ieee802154_dump_phy),

IEEE802154_OP(IEEE802154_ADD_IFACE,ieee802154_add_iface),

IEEE802154_OP(IEEE802154_DEL_IFACE,ieee802154_del_iface),

/*see nl-mac.c */

IEEE802154_OP(IEEE802154_ASSOCIATE_REQ,ieee802154_associate_req),

IEEE802154_OP(IEEE802154_ASSOCIATE_RESP,ieee802154_associate_resp),

IEEE802154_OP(IEEE802154_DISASSOCIATE_REQ,ieee802154_disassociate_req),

IEEE802154_OP(IEEE802154_SCAN_REQ,ieee802154_scan_req),

IEEE802154_OP(IEEE802154_START_REQ,ieee802154_start_req),

IEEE802154_DUMP(IEEE802154_LIST_IFACE,ieee802154_list_iface,

ieee802154_dump_iface),

IEEE802154_OP(IEEE802154_SET_MACPARAMS,ieee802154_set_macparams),

…..

nl-phy.c

phynetlink的接口定义;

nl-mac.c

macnetlink的接口定义;

 

接口2nl802154 (基于cfg802154)接口名称是:nl802154

用于对无线设备进行配置管理。

 

/net/ieee802154/nl802154.c@

static const structgenl_ops nl802154_ops[] = {

{

.cmd= NL802154_CMD_GET_WPAN_PHY,

.doit= nl802154_get_wpan_phy,

.dumpit= nl802154_dump_wpan_phy,

.done= nl802154_dump_wpan_phy_done,

.policy= nl802154_policy,

/*can be retrieved by unprivileged users */

.internal_flags= NL802154_FLAG_NEED_WPAN_PHY |

  NL802154_FLAG_NEED_RTNL,

},

{

.cmd= NL802154_CMD_GET_INTERFACE,

.doit= nl802154_get_interface,

.dumpit= nl802154_dump_interface,

.policy= nl802154_policy,

/*can be retrieved by unprivileged users */

.internal_flags= NL802154_FLAG_NEED_WPAN_DEV |

  NL802154_FLAG_NEED_RTNL,

},

……

 

2.1 kernel 3.0 注册的netlink接口

   

两者有一个共同的family 

注册一个family 

int __initieee802154_nl_init(void)

{

int rc;

 

rc = genl_register_family(&nl802154_family);

if (rc)

 

 

2.1.1 phynetlink的注册:

nl-phy.c@

staticstruct genl_ops ieee802154_phy_ops[] = {

IEEE802154_DUMP(IEEE802154_LIST_PHY, ieee802154_list_phy,

ieee802154_dump_phy),

IEEE802154_OP(IEEE802154_ADD_IFACE, ieee802154_add_iface),

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值