OpenWRT数据接收过程【Linux内核-OpenWRT】

109 篇文章 10 订阅
87 篇文章 30 订阅
本文详细解释了OpenWRT路由器使用ath9k网卡驱动时,数据接收过程中的关键函数如ieee80211_tasklet_handler()、ieee80211_rx()和__ieee80211_rx_handle_packet()的工作原理,涉及中断处理、sk_buff缓存和802.11协议解析。
摘要由CSDN通过智能技术生成

目录

1.  ieee80211_tasklet_handler()

2.  ieee80211_rx()

3.  __ieee80211_rx_handl


OpenWRT数据接收过程 这里使用的是ath9k网卡驱动,硬件平台是TP-link TL-WR841N V7.1 路由器


1.  ieee80211_tasklet_handler()


Linux内核是通过中断来对接收到的数据进行响应的。当硬件检测到有接收数据的时候,产生一个中断,中断触发下半部的tasklet机制,在802.11协议栈这里会调用ieee80211_tasklet_handler()函数。我们来看一看函数体:(位于OpenWRT内核文件夹子目录/net/mac80211,文件main.c中)

static void ieee80211_tasklet_handler(unsigned long data)
{
       struct ieee80211_local *local = (struct ieee80211_local *) data;
       struct sk_buff *skb;
       while ((skb = skb_dequeue(&local->skb_queue)) ||
              (skb = skb_dequeue(&local->skb_queue_unreliable))) {
              switch (skb->pkt_type) {
              case IEEE80211_RX_MSG:
                     /* Clear skb->pkt_type in order to not confuse kernel
                      * netstack. */
                     skb->pkt_type = 0;
                     ieee80211_rx(&local->hw, skb);
                     break;
              case IEEE80211_TX_STATUS_MSG:
                     ...
              default:
                     ...
              }
       }
}

2.  ieee80211_rx()


系统收到数据时会开辟一个sk_buff缓存空间进行数据的存储,ieee80211_tasklet_handler()触发后对sk_buff中存储的数据帧进行判断,如果是接收来的数据(MPDU),则进入ieee80211_rx()函数:(位于OpenWRT内核文件夹子目录/net/mac80211,文件rx.c中)。

void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb)
{
       struct ieee80211_local *local = hw_to_local(hw);
       struct ieee80211_rate *rate = NULL;
       struct ieee80211_supported_band *sband;
       struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
       ...
       __ieee80211_rx_handle_packet(hw, skb);
       rcu_read_unlock();
       return;
 drop:
       kfree_skb(skb);
}
EXPORT_SYMBOL(ieee80211_rx);

3.  __ieee80211_rx_handl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值