(1) 宣告在 include/linux/skbuff.h
(2) 重要欄位有
unsigned char *head; // 配置空間起點 unsigned char *data; // 有效資料起點 unsigned char *tail; // 有效資料的最後一個 Octet unsigned char *end; // 配置空間終點 |
2. 配置 sk_buff
(1) struct sk_buff *alloc_skb(unsigned int len, int priority); 比較原始. 配置完成會將 skb-> data 和 skb->tail 指向 skb->head |
(2) struct sk_buff *dev_alloc_skb(unsigned int len);
供ISR使用而設計, 以GFP_ATOMIC優先度來配置, 並在 skb->head 和 skb->data 之間保留空間, 用以存放協定標頭.
3. void skb_reserve(struct sk_buff *skb, int len); 保留前頭空間. 大多數的Ethernet 介面在封包之前會保留 2-bytes空間, 這樣可使得 IP header 對齊 16-bytes 邊緣 ( 因為 IP header 之前的 Ethernet header 有 14-bytes ) |
4. unsigned char * skb_put(struct sk_buff *skb, int len); unsigned char * __skb_put(struct sk_buff *skb, int len); 將資料加到tail room 區, 並將 skb->tail 往後移 skb_put() : 會檢查是否有足夠空間 __skb_put() : 會省略檢查 |
沒有留言:
張貼留言