[問題] linux核心封包處理的程式碼
以下是ipq的一段程式碼
大致的意思是想要在封包資料區塊後端多一些空間來使用
第一個if先檢查緩衝區尾端的大小夠不夠
若不夠就做用的
之後 用skb_put函式 將指向尾端的指標後移
=========================================
if (diff > skb_tailroom(e->skb)) {
struct sk_buff *newskb;
newskb = skb_copy_expand(e->skb,skb_headroom(e->skb),
diff,GFP_ATOMIC);
if (newskb == NULL) {
printk(KERN_WARNING "ip_queue: OOM in mangle, dropping packet\n");
return -ENOMEM;
}
if (e->skb->sk)
skb_set_owner_w(newskb, e->skb->sk);
kfree_skb(e->skb);
e->skb = newskb;
}
skb_put(e->skb, diff);
==========================================
我目前剛好也想要做這樣的動作
我是在封包要離開ip層前 在尾巴新增資料
稍微修改上面的程式碼
--------------
if (len > skb_tailroom(skb)) {
struct sk_buff *newskb;
newskb = skb_copy_expand(skb,skb_headroom(skb),
len,GFP_ATOMIC);
if (newskb == NULL) {
printk(KERN_WARNING "ERROR!!!\n");
return -ENOMEM;
}
if (skb->sk)
skb_set_owner_w(newskb, skb->sk);
kfree_skb(skb);
skb = newskb;
}
skb_put(skb, len);
---------------
不過總是在 skb_put(skb, len) 出錯 不知道有誰能解答
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.110.178
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章
18
34