最近在研究Linux内核的网络子系统,一边分析一边总结,顺便记录在博客里面方便自己查找,也希望引来一些讨论和批评。刚开始写技术博客,而且对程序的理解不深刻,里面有些地方写的不清楚或者有错误希望能有大神给我指出来,学渣先在此谢过。
IEEE802.11协议在Linux内核中实现时,数据发送模块的执行依靠的是函数ieee80211_xmit():
voidieee80211_xmit(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb,enumieee80211_band band)
{
...
ieee80211_set_qos_hdr(sdata, skb);
ieee80211_tx(sdata,skb, false, band);
}
函数ieee80211_xmit()调用ieee80211_tx(),若数据成功被发送则返回true,如果仅仅被加入了发送队列而没有被发送出去则返回false:
static boolieee80211_tx(struct ieee80211_sub_if_data *sdata, struct sk_buff *skb, booltxpending, en