我为linux kernel&编写了一个模块它试图窃取数据包&其相关的 sk_buff 。这样做我想使用struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t gfp_mask)
&然后在数据包被删除时将返回类型传递给内核。
所以当内核获取有关数据包丢弃的信息时,它会尝试释放sk_buff。在这里我的问题会影响我新复制的skb&它的尖头数据包?或者现在我可以玩我的新sk_buff?
或是否可以使用 skb_clone()&使用分组数据部分而不删除旧sk_buff引用的数据,因为它会降低数据包的复制成本。
答案 0 :(得分:5)
使用skb_copy
会将sk_buff
和数据包复制到新内存。当内核释放另一个内核时的含义,副本不会受到影响。
skb_clone
将sk_buff
结构复制到新内存,而不是数据包。意味着当旧的一个被释放时,你的副本也将释放该数据包。
以下是一些链接: