[問題] linux核心封包處理的程式碼

看板C_and_CPP (C/C++)作者 (真冷...)時間16年前 (2009/05/03 21:46), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
以下是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
文章代碼(AID): #19_Q16zD (C_and_CPP)
文章代碼(AID): #19_Q16zD (C_and_CPP)