免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1023 | 回复: 1

[网络子系统] 数据报文驱动接收的问题。 [复制链接]

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
发表于 2015-12-01 19:11 |显示全部楼层
本帖最后由 九阳神功爱喝茶 于 2015-12-01 19:13 编辑

下面的代码是路由器的无线网卡ath9k接收中断处理部分的代码,其中函数ieee80211_rx(hw, skb);将数据报文从驱动传递到MAC层。在进入MAC层之前,我加了个函数tdma_set_slot_param来设置驱动的参数。
  1. int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
  2. {。
  3.         struct ath_rxbuf *bf;
  4.         struct sk_buff *skb = NULL, *requeue_skb, *hdr_skb;


  5. [color=Red]//added by shenlei 2015 11 30
  6.                 u8 *macaddr = common->macaddr;
  7.                 tdma_set_slot_param(skb,macaddr[5]);[/color]
  8.                
  9.                ieee80211_rx(hw, skb);
  10.         return 0;
  11. }
复制代码
实验是在通过发送特定格式的数据到AP,AP的驱动直接通过读取用户数据,来设置参数。我遇到的问题是:
1)802.11头部比较复杂分别有三地址和四地址模式以及是否有QOS控制字段,对应的报头长度分别为32 30 36 24 ,我不是很清楚这两个参数的具体作用和使用场景,忘大神讲讲。
2)每次我都直接发送udp广播报文,数据四个字段是0x88 0x6a 0x01 0x02;通过AP下的另一个电脑的无线网可以看到,接收数据完全正确,但是由于我的网卡和驱动的问题只能看到以太网的帧格式,无法看到802.11帧格式,所以无法确定在AP的驱动中的skb的结构来获得数据报文。还请各位前辈指导一下,万分感激。
  1. int tdma_set_slot_param(struct sk_buff *skb,u8 localmacaddrlastbyte){
  2.        
  3.         /*8==sizeof(udphdr)
  4.         32==sizeof(ieee80211_hdr) try  32 30 26 24
  5.         20==sizeof(iphdr)*/
  6.         //printk(KERN_ERR"INTO tdma_set_slot_param");
  7.         u8 *data = skb->data+24+20+8;
  8.         if(*data==0x88){
  9.             printk(KERN_ERR"SATISFY flag bytes");
  10.             data++;
  11. }
复制代码

求职 : 通讯/电信开
论坛徽章:
2
2015亚冠之鹿岛鹿角
日期:2015-07-08 11:58:2615-16赛季CBA联赛之佛山
日期:2015-12-21 17:28:04
发表于 2015-12-03 10:51 |显示全部楼层
最后解决了,我在MAC层当802.11帧转换成以太网头部之后,再获取数据,反过来设置驱动层的参数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP