当前位置:  技术问答>linux和unix

skb_copy和skb_clone

    来源: 互联网  发布时间:2017-01-17

    本文导语:      我看资料上讲skb_copy会把skb结构和数据都拷贝一份,skb_clone则只是拷贝skb结构。然后又说,只有要修改数据部分的时候,才用skb_copy。     但我觉得很奇怪,在什么情况下要修改数据呢?我理解的数据部分是sk...

    我看资料上讲skb_copy会把skb结构和数据都拷贝一份,skb_clone则只是拷贝skb结构。然后又说,只有要修改数据部分的时候,才用skb_copy。

    但我觉得很奇怪,在什么情况下要修改数据呢?我理解的数据部分是skb->data,这一块毫无结构可言。而且每个包都不一样,有什么可修改的?

    除非skb->data一开始指的不是真正的数据部分,而是包含了一部分包头结构。比如刚收到包时,外面是Ethernet层,而此时skb->data指向IP层。

    这个想法对否?请各路大神指教。

|
除非skb->data一开始指的不是真正的数据部分,而是包含了一部分包头结构。比如刚收到包时,外面是Ethernet层,而此时skb->data指向IP层。
-------------------------------
你这样更不需要copy了,修改一下头指针就可以了。



skb_copy 就是把data也拷一遍的了,比如你要做vlan支持,要在 ethernet header后面 ip头前面插入一点数据,原有的skb空间又不够了,那你能怎么做呢? 

不过一般也是clone 比较多点,我们之前有一个虚拟网卡,每个包都copy一下数据,很影响性能。一般考虑是不是可以考虑预留头部空间,使用分散-聚集dma来避免吧。



|
嗯,你的理解是对的,很多时候的都有需要改数据的,不又不希望保留以前skb,就用copy函数。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    c/c++开源软件 iis7站长之家