当前位置: 技术问答>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,这一块毫无结构可言。而且每个包都不一样,有什么可修改的?
除非skb->data一开始指的不是真正的数据部分,而是包含了一部分包头结构。比如刚收到包时,外面是Ethernet层,而此时skb->data指向IP层。
这个想法对否?请各路大神指教。
|
除非skb->data一开始指的不是真正的数据部分,而是包含了一部分包头结构。比如刚收到包时,外面是Ethernet层,而此时skb->data指向IP层。
-------------------------------
你这样更不需要copy了,修改一下头指针就可以了。
skb_copy 就是把data也拷一遍的了,比如你要做vlan支持,要在 ethernet header后面 ip头前面插入一点数据,原有的skb空间又不够了,那你能怎么做呢?
不过一般也是clone 比较多点,我们之前有一个虚拟网卡,每个包都copy一下数据,很影响性能。一般考虑是不是可以考虑预留头部空间,使用分散-聚集dma来避免吧。
-------------------------------
你这样更不需要copy了,修改一下头指针就可以了。
skb_copy 就是把data也拷一遍的了,比如你要做vlan支持,要在 ethernet header后面 ip头前面插入一点数据,原有的skb空间又不够了,那你能怎么做呢?
不过一般也是clone 比较多点,我们之前有一个虚拟网卡,每个包都copy一下数据,很影响性能。一般考虑是不是可以考虑预留头部空间,使用分散-聚集dma来避免吧。
|
嗯,你的理解是对的,很多时候的都有需要改数据的,不又不希望保留以前skb,就用copy函数。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。