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。
谢谢您的回答!我从内核新手邮件列表中得到了完全相同的答案。 –