我們都知道
skb_reserve(2)
是為了把Ethernet 頭部對齊以增加效率(14+2)
但其實
dev_alloc_skb()...
這funciton 本身也預留了一個
NET_SKB_PAD 大小空間在 headroom,通常是
#define NET_SKB_PAD 32
所以skb_push推的時候... 不要再推過頭啦!!!(痛...
有時各家的driver 會預留不同大小的NET_SKB_PAD,一般是拿來做特製的Buffer Tag(如夾帶特別的Flag,又不想影響封包的內容),這樣skb_copy() 就會複製下去,自己修改skb struct 增加項目是比較麻煩的唷,這樣改要修改其他部分。
參照: __copy_skb_header()
即可知道
當然偷偷使用skb->cb欄位也可以,要注意沒有其他地方也偷用就是XD
--
另外
ip_header()
net_header()
兩個頭部取用的function 要記得
skb->network_header
skb->transport_header
已經init 好位置.... O__Q 棍...