【发布时间】:2015-02-15 19:04:15
【问题描述】:
struct sk_buff 真的很难理解(至少对我来说,当你第一次处理它时)。
在有人说我应该在提问之前先在网上搜索一下,请理解我做到了,但没有运气。 那里有一些很好但又旧又过时的文档和论文,在 GIT 上查看源代码,甚至浏览源代码 http://lxr.free-electrons.com 只会让一切变得越来越混乱。
我要问的比我需要的更多,以使此页面中的任何最终结论更加完整,因此任何到达这里的人都会(希望)得到他/她的问题的回答。
你能解释一下 struct sk_buff 的那些成员吗?
-
mac_header、network_header、transport_header
它们似乎是偏移量。但是从哪里算起?从头开始?
告诉大家我的struct没有mac_header,比如我该怎么办?因为 skb_mac_header_was_set() 的来源返回这个:skb->mac_header != (typeof(skb->mac_header))~0U
但是没有skb_network_header_was_set()函数;还有一个用于transport_header ... 疯了!
长度
背景:
我要做的是:我正在 netfilter 挂钩中编辑数据包,完成后,我正在重建整个标头(UDP/TCP、IP4/IP6、以太网)... 因为我可能在这些标题中包含/删除了新选项,它们的大小发生了变化,skb-> 数据移动......这就是我需要处理这些成员的原因。
我的模块适用于每个 netfilter 挂钩(PREROUTING、POSTROUTING、FORWARD、INPUT)...
【问题讨论】:
-
您的代码是使用 IP 网络过滤器钩子还是网桥网络过滤器钩子?
-
我正在使用 IP 网络过滤器...
标签: c struct linux-kernel netfilter