2014-02-25 29 views

回答

1

有很多skb_network_header()

#ifdef NET_SKBUFF_DATA_USES_OFFSET 

static inline unsigned char *skb_network_header(const struct sk_buff) 
{ 
     return skb->head + skb->network_header; 
} 
#else 
static inline unsigned char *skb_network_header(const struct sk_buff *skb) 
{ 
    return skb->network_header; 
} 

基本上2個版本中,如果NET_SKBUFF_DATA_USES_OFFSET是在效果(例如,對於64位體系結構),.network_header是一個從起始位置的偏移。

+0

爾加 - 你打我吧! +1 –

+0

哦,我明白了,謝謝,我沒有看到其他定義。這現在是有道理的! – stakSmashr

0

我假設你看內核源代碼somewhere like this

如果我們削減了一些代碼,我認爲它變得像這樣:

 
#ifdef NET_SKBUFF_DATA_USES_OFFSET 
static inline unsigned char *skb_network_header(const struct sk_buff *skb) 
{ 
     return skb->head + skb->network_header; 
} 

static inline unsigned char *skb_mac_header(const struct sk_buff *skb) 
{ 
     return skb->head + skb->mac_header; 
} 

#else /* NET_SKBUFF_DATA_USES_OFFSET */ 

static inline unsigned char *skb_network_header(const struct sk_buff *skb) 
{ 
     return skb->network_header; 
} 

static inline unsigned char *skb_mac_header(const struct sk_buff *skb) 
{ 
     return skb->mac_header; 
} 

#endif /* NET_SKBUFF_DATA_USES_OFFSET */