2012-11-06 87 views
2

我正在爲linux內核編寫一個模塊&它試圖盜取數據包&其相關的sk_buff。這樣做我想使用struct sk_buff *skb_copy(const struct sk_buff *skb, gfp_t gfp_mask) &然後將返回類型傳遞給內核,因爲數據包丟失sk_buff copy&sk_buff clone

因此,當內核獲取有關數據包丟棄的信息時,嘗試釋放sk_buff。這裏我的問題是否會影響我的新複製的skb &它的數據包的指向數據?或者現在我可以玩我的新sk_buff?

或者是它可以使用skb_clone() &使用分組數據部分而不會被舊的sk_buff刪除所引用的數據,因爲它會reduse分組的複製成本。

回答

5

使用skb_copy將複製sk_buff和數據包到新的內存。這意味着內核釋放另一個內核時,副本不會受到影響。

skb_clone另一方面將sk_buff結構複製到新的內存,但不是數據包。這意味着當舊版本被釋放時,你的副本也會釋放數據包。

這裏有一些鏈接:

+0

其實我想用skb_clone的幫助下利用分組數據()這樣就不需要複製數據,只需要複製sk_buff結構。所以,如果我減少舊的sk_buff中的引用計數,那麼是否有可能...克隆期間,我認爲只有引用計數增加...? – akp