文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux net

linux net

时间:2006-08-03  来源:zqy2000zqy

driver recieve 时先 alloc_skb

struct sk_buff *alloc_skb(unsigned int size, int gfp_mask) skb->head = data;

skb->data = data;

skb->tail = data;

skb->end = data + size;

 

接受数据前 data = skb_put(skb, data_len);

unsigned char *tmp = skb->tail;

SKB_LINEAR_ASSERT(skb);

skb->tail += len;

skb->len += len;

return tmp;

接受到数据包含mac信息,skb->data指向mac头之后应该有什么函数调用了skb_pull , data就指向ip头了 .在eth_type_trans中调用skb_pull

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

        struct ethhdr *eth;
        unsigned char *rawp;

        skb->mac.raw=skb->data;
        skb_pull(skb,ETH_HLEN);
        eth = eth_hdr(skb);
        skb->input_dev = dev;

 

 

 

 见TCP/IP详解学习-第二章-2 http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=linuxK&Number=440887&page=&view=&sb=&o=

发送后释放 dev_kfree_skb 就是kfree(skb->head)

 

 

 

 

 

 

 

 

-------------------<------ head
|---------------|
|--head room---| ^ skb_push
|---------------| |
-------------------<------ data
|---------------| |
|---------------| v skb_pull
|---real data----|
|---------------| ^ skb_trim
|---------------| |
-------------------<------ tail
|---------------| |
|---tail room----| v skb_put
|---------------|
-------------------<------ end

相关阅读 更多 +
排行榜 更多 +
疯狂超市旅行

疯狂超市旅行

模拟经营 下载
马桶人大战开放世界游戏下载

马桶人大战开放世界游戏下载

角色扮演 下载
最后一班列车巴奎达诺手游下载

最后一班列车巴奎达诺手游下载

休闲益智 下载