- 求职 : 通讯/电信开
- 论坛徽章:
- 2
|
本帖最后由 九阳神功爱喝茶 于 2015-12-01 19:13 编辑
下面的代码是路由器的无线网卡ath9k接收中断处理部分的代码,其中函数ieee80211_rx(hw, skb);将数据报文从驱动传递到MAC层。在进入MAC层之前,我加了个函数tdma_set_slot_param来设置驱动的参数。- int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
- {。
- struct ath_rxbuf *bf;
- struct sk_buff *skb = NULL, *requeue_skb, *hdr_skb;
- [color=Red]//added by shenlei 2015 11 30
- u8 *macaddr = common->macaddr;
- tdma_set_slot_param(skb,macaddr[5]);[/color]
-
- ieee80211_rx(hw, skb);
- return 0;
- }
复制代码 实验是在通过发送特定格式的数据到AP,AP的驱动直接通过读取用户数据,来设置参数。我遇到的问题是:
1)802.11头部比较复杂分别有三地址和四地址模式以及是否有QOS控制字段,对应的报头长度分别为32 30 36 24 ,我不是很清楚这两个参数的具体作用和使用场景,忘大神讲讲。
2)每次我都直接发送udp广播报文,数据四个字段是0x88 0x6a 0x01 0x02;通过AP下的另一个电脑的无线网可以看到,接收数据完全正确,但是由于我的网卡和驱动的问题只能看到以太网的帧格式,无法看到802.11帧格式,所以无法确定在AP的驱动中的skb的结构来获得数据报文。还请各位前辈指导一下,万分感激。- int tdma_set_slot_param(struct sk_buff *skb,u8 localmacaddrlastbyte){
-
- /*8==sizeof(udphdr)
- 32==sizeof(ieee80211_hdr) try 32 30 26 24
- 20==sizeof(iphdr)*/
- //printk(KERN_ERR"INTO tdma_set_slot_param");
- u8 *data = skb->data+24+20+8;
- if(*data==0x88){
- printk(KERN_ERR"SATISFY flag bytes");
- data++;
- }
复制代码 |
|