Linux核心分析

來源:互聯網
上載者:User

在netif_receive_skb()函數中,可以看出處理的是像ARP、IP這些鏈路層以上的協議,那麼,鏈路層前序是在哪裡去掉的呢 ?答案是網卡驅動中,在調用netif_receive_skb()前,

skb->protocol = eth_type_trans(skb, bp- >dev);

該函數對處理後skb>data跳過乙太網路前序,由mac_header指示乙太網路前序:

進入 netif_receive_skb()函數

list_for_each_entry_rcu(ptype,&ptype_base[ntohs(type) & PTYPE_HASH_MASK], list)

按照協議類型依次由相應的協議模組進行處理,而所以的協議模組處理都會註冊在ptype_base中,實際是鏈表結構 。

net/core/dev.c

static struct list_head ptype_base __read_mostly;   /* Taps */

而相應的 協議模組是通過dev_add_pack()函數加入的:

void dev_add_pack(struct packet_type *pt)          {               int hash;                              spin_lock_bh(&ptype_lock);               if (pt->type == htons(ETH_P_ALL))                        list_add_rcu(&pt->list, &ptype_all);               else {                        hash = ntohs(pt->type) & PTYPE_HASH_MASK;                        list_add_rcu(&pt->list, &ptype_base[hash]);               }               spin_unlock_bh(&ptype_lock);          }

以ARP處理為例

該模組的定義,它會在arp_init()中註冊進ptype_base鏈表中:

static struct packet_type arp_packet_type __read_mostly = {               .type =      cpu_to_be16(ETH_P_ARP),               .func =      arp_rcv,          };

然後在根據報文的TYPE來在ptype_base中尋找相應協議模組進行處理時,實際調用arp_rcv()進行接收

arp_rcv() --> arp_process()

arp = arp_hdr(skb);          ……          arp_ptr= (unsigned char *)(arp+1);          sha= arp_ptr;          arp_ptr += dev->addr_len;          memcpy(&sip, arp_ptr, 4);          arp_ptr += 4;          arp_ptr += dev->addr_len;          memcpy(&tip, arp_ptr, 4);

操作後這指標位置:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.