wmaster0是linux无线网络设备的主接口,根据官方说明,从linux2.6.32开始删除了这个接口,所以从linux2.6.32版本开始不会再看到这个接口,我们比较熟悉的是类似于waln0这种接口,因为简单来说,一个wlanx(0,1,2,…)接口就代表一张无线网卡。但是,在linux2.6.31以前,所有的发送操作(还有其他一些操作)都要通过wmaster0来实现,下面以ath5k驱动程序为例简单分析一些发送操作这个过程。

首先,从ieee80211_register_hw()函数看看wmaster0的注册过程:

1 …
2     mdev = alloc_netdev_mq(sizeof(struct ieee80211_master_priv),
3                    "wmaster%d", ieee80211_master_setup,
4                    hw->queues);
5 …

通过alloc_netdev_mq()函数来注册wmaster0接口,其中ieee80211_master_setup是函数名,其原型如下所示:

 1 …2 static const struct net_device_ops ieee80211_master_ops = {3     .ndo_start_xmit = ieee80211_master_start_xmit,4     .ndo_open = ieee80211_master_open,5     .ndo_stop = ieee80211_master_stop,6     .ndo_set_multicast_list = ieee80211_master_set_multicast_list,7     .ndo_select_queue = ieee80211_select_queue,8 };9
10 static void ieee80211_master_setup(struct net_device *mdev)
11 {
12     mdev->type = ARPHRD_IEEE80211;
13     mdev->netdev_ops = &ieee80211_master_ops;
14     mdev->header_ops = &ieee80211_header_ops;
15     mdev->tx_queue_len = 1000;
16     mdev->addr_len = ETH_ALEN;
17 }
18 …

其中ieee80211_master_start_xmit就是实现真正发送操作的函数,从ieee80211_register_hw()函数继续往下看:

1 …
2     if (local->hw.wiphy->interface_modes & BIT(NL80211_IFTYPE_STATION)) {
3         result = ieee80211_if_add(local, "wlan%d", NULL,
4                       NL80211_IFTYPE_STATION, NULL);
5 …

在这里终于注册了wlan0这个接口,下面简单看一下ieee80211_if_add()函数:

1 …
2     ndev = alloc_netdev(sizeof(*sdata) + local->hw.vif_data_size,
3                 name, ieee80211_if_setup);
4 …

再看ieee_if_setup()函数:

 1 …2 static const struct net_device_ops ieee80211_dataif_ops = {3     .ndo_open        = ieee80211_open,4     .ndo_stop        = ieee80211_stop,5     .ndo_uninit        = ieee80211_teardown_sdata,6     .ndo_start_xmit        = ieee80211_subif_start_xmit,7     .ndo_set_multicast_list = ieee80211_set_multicast_list,8     .ndo_change_mtu     = ieee80211_change_mtu,9     .ndo_set_mac_address     = eth_mac_addr,
10 };
11 …
12 static void ieee80211_if_setup(struct net_device *dev)
13 {
14     ether_setup(dev);
15     dev->netdev_ops = &ieee80211_dataif_ops;
16     dev->wireless_handlers = &ieee80211_iw_handler_def;
17     dev->destructor = free_netdev;
18 }
19 …

其中,dev->netdev_ops = &ieee80211_dataif_ops这是关键,下面看它里面的.ndo_start_xmit = ieee80211_subif_start_xmit成员:

 1 int ieee80211_subif_start_xmit(struct sk_buff *skb,2                    struct net_device *dev)3 {4 …5     skb->iif = dev->ifindex;6     skb->dev = local->mdev;7     dev->stats.tx_packets++;8     dev->stats.tx_bytes += skb->len;9 …
10     dev_queue_xmit(skb);
11 …
12 }

第6行,medv就是wmaster0接口,第10行,调用了dev_queue_xmit()函数,这个函数是网络层进入数据链路层的关键函数:

1 int dev_queue_xmit(struct sk_buff *skb)
2 {
3 struct net_device *dev = skb->dev;
4 …
5 txq = dev_pick_tx(dev, skb);
6 …
7 }

第3行,skb->dev就是wmaster0接口,以后有关网络设备的操作都是用它了,第5行,通过dev_pick_tx()函数选出当前socket所需要的TOS(Type Of Service)队列,想了解TOS和MAC层中关于QoS的可以看看这个函数,这里不分析。

到这里可以看出,发送数据时,上层使用wlan0接口,到了数据链路层以下开始使用wmaster0这个接口实现发送操作。

转载于:https://www.cnblogs.com/lknlfy/archive/2013/01/04/2844194.html

wmaster0接口的简单介绍相关推荐

  1. 【二 HLS】HLS接口的简单介绍

    一.HLS简单介绍 vivado HLS是xilinx推行的高级综合工具,可以使用C/C++以及system C来实现xilinx的可编程器件的编程,不用手写verilog语言,官方提供了两个重要的H ...

  2. 获取同花顺数据接口_简单介绍同花顺_数据获取方式(Excel VBA)

    简单介绍同花顺_数据获取方式(Excel VBA) 2018-09-12 简单介绍数据获取方式(Excel VBA) 数据是量化的根本和原材料,数据的准确性非常重要.获得数据的方式各种各样,最小的单位 ...

  3. FatFs 的用户层API接口应用简单介绍(基于STM32F1)

    ℹ️ 本篇文章没有说明实现方法,仅是简单介绍了 FatFs 的部分函数和结构体定义. FatFs API 应用程序接口 ▶️ 根据 FatFS 的教程手册来看,将程序接口分为了四个部分. 文件访问 目 ...

  4. R232接口的简单介绍

    这个接口又叫串口,主要用在工业控制.路由器调试.串口通信,还可以接MODEM,串口鼠标,不 过这两项现在不常见了,就不说了,主要说下前三项.        工业控制:工厂里的各种设备,像机电一体化等等 ...

  5. 【抽象类与接口的简单介绍】

    ✨hello,愿意点进来的小伙伴们,你们好呐! ✨

  6. 台式机dp接口_科普短文,高清晰音视频传输DP接口简单介绍

    DP是DisplayPort的缩写,是一种高清晰音视频流的传输接口.DisplayPort是由视频电子标准协会(VESA)发布的显示接口.作为DVI的继任者,DisplayPort能够传输未经压缩的视 ...

  7. 微信公众平台接口简单介绍

    微信公众平台的管理地址是:https://mp.weixin.qq.com 注册完个人公众号以后,登录到微信公众平台的管理后台,需要用微信扫一下二维码才能登录进去哦... 这个后台提供了基本的对公众号 ...

  8. HDFS简单介绍及用C语言訪问HDFS接口操作实践

    一.概述 近年来,大数据技术如火如荼,怎样存储海量数据也成了当今的热点和难点问题,而HDFS分布式文件系统作为Hadoop项目的分布式存储基础,也为HBASE提供数据持久化功能,它在大数据项目中有很广 ...

  9. (59)简单介绍RAM IP核类型和接口信号?

    1.1 简单介绍RAM IP核类型和接口信号? 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)简单介绍RAM IP核类型和接口信号?: 5)结束语. 1.1.2 本节引 ...

最新文章

  1. OneFlow 概念清单
  2. SAP WM 使用Storage Location Reference实现IM层面的存储地点和WM层面的存储类型之间的软关联
  3. Centos 6.8安装配置KVM
  4. solr搭建分布式搜索引擎
  5. 你知道别人怎么看你恢复它?
  6. js实现扫描付款码获取数据
  7. 带网格的_装修要不要用网格布,了解这几点之后再做决定
  8. 什么是mock测试 等自己有时间好好研究一下
  9. linux安装时找不到硬盘分区,在安装linux时出现找不到硬盘如何解决
  10. OpenCV实现人脸对齐
  11. http测试工具:httpbin
  12. Java实现建行聚合支付对接及其回调
  13. ir2104作用,ir2104引脚功能和IR2103 请问有没有人可以通俗地讲解IR2104芯片引脚的功能?...
  14. uniapp 微信小程序 分片 断点续传 大文件上传
  15. 360能删除mysql吗_如何把Mysql卸载干净(亲测有效)
  16. 数据结构第5版李春葆上机实验题答案(全部)
  17. stm32f4有重映射么_STM32 端口复用重映射(USART Remap)
  18. 学海无涯提供100-300M免费全能空间申请
  19. 修炼一名程序员的职业水准(林庆忠__署名原创)
  20. 64位win7下安装SQL Server 2008(图文解说版)

热门文章

  1. 将客户端将IE9强制为IE7
  2. stm32PWM输入捕获模式详解
  3. YOLO系列专题——YOLOv2理论篇
  4. 论文解读——An Analysis of Scale Invariance in Object Detection – SNIP
  5. LInux下的交换分区以及相关查看命令
  6. hibernate hql 关联查询_Hibernate【关联查询篇】
  7. android 程序 共享文件,026 Android多进程-文件共享
  8. php5.2 json,php5.2 对json格式的支持
  9. js 连mysql 延后_详解MySQL 主从同步延迟
  10. 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...