2016-08-18 518 views
0

在在include/linux/ip.h,ip_hdr和ipip_hdr有何区别?

23 static inline struct iphdr *ip_hdr(const struct sk_buff *skb) 
24 { 
25   return (struct iphdr *)skb_network_header(skb); 
26 } 
27 
28 static inline struct iphdr *inner_ip_hdr(const struct sk_buff *skb) 
29 { 
30   return (struct iphdr *)skb_inner_network_header(skb); 
31 } 
32 
33 static inline struct iphdr *ipip_hdr(const struct sk_buff *skb) 
34 { 
35   return (struct iphdr *)skb_transport_header(skb); 
36 } 
37 #endif /* _LINUX_IP_H */ 

,如果我在sk_buff中传递给ip_hdr和ipip_hdr

struct iphdr *ip_hdr ip_hdr_net = ip_hdr(skb); 
struct iphdr *ip_hdr ip_hdr_trans = ipip_hdr(skb); 

ip_hdr_net-> SADDR和ip_hdr_trans-> SADDR指向同样的事情?我在代码上试了一下。它没有。看来只有ip_hdr_net-> saddr指向源IP地址。

所以问题:

(1)什么是ip_hdr和ipip_hdr之间的区别是什么?为什么我们有他们?没有任何文件来解决它。

(2)我应该在访问它们时使用ntohX函数来转换ip_hdr成员数据吗?例如,ip_hdr_net-> saddr。

回答