c – 确定添加到以太网帧的填充量
我正在研究
Linux内核的驱动程序.为了我项目的成功,我需要确定添加到以太网帧的填充量小于最小60字节(不包括FCS).我没有生成这些框架;我在NIC上接收它们进行处理.
有一个struct sk_buff,是否可以直接确定添加到数据包的尾随零的数量? 我当然可以通过遍历整个数据包确定该值,找出最高层内容的结束位置,然后简单地从帧大小中减去该位置(在本例中为60字节).但有没有一种更有效的方法直接从存储在struct sk_buff上的信息中做到这一点? 解决方法
编辑:据我所知,没有办法直接使用sk_buff结构检查零填充,而没有实际查看以太网头,这很简单.
也就是说,通过一些简单的指针算法和字节减法,您可以使用IP数据中的长度字段来计算填充. 这是sk_buff的一个很好的参考: 这里有一个很好的数据包结构参考,在’data’的底部图片中显示’length’字段. http://nerdcrunch.com/wp-content/uploads/2011/05/Ethernet-Frame-Explained.png 我认为这是它必须完成的方式,但它不需要像以前那样进行解析.设置头/数据结构字段,使得它们可以通过指针/数组直接引用/剥离而无需解析,然后通过从原始数据包长度中减去头数据长度,您可以获得填充,所有这些都不需要检查数据. 希望有所帮助. 此外,为了获得最佳实践,您可能应该使用两个版本的802.3的驱动程序帐户.您可以通过检查Ethertype / length字段来完成此操作.如果该值大于1536(0x0600),则表示它是以太网II类型数据包,并且该字段包含ethertype,它告诉您以太网数据包封装的内容.如果维基百科为“Ethertype”,有一些很受欢迎的. 例如,IP = 0x0800.如果字段指定Ethertype,则必须求助于在里面找到数据长度字段以找到填充.如果没有,那么很多基于以太网的局域网仍然没有,那么你可以直接使用指定为长度的字段来完成你的工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby – 如何检查redis端口和实例sidekiq连接的是什么?
- 敏捷质疑: TDD
- 自动根据a标签的设置替换成开源的flash视频播放器(用于phpc
- cJSON各函数实现的功能
- Windows / Linux上的Xcode开发:Mac In Cloud或VPN到Mac Mi
- ruby-on-rails-3 – 如何拆分葡萄api应用程序?
- c# – 如何使用[Display(Name =“”)]作为LoadFromCollecti
- loner_li AJax 无刷新 省市县三级联动(webservice+sqlhelp
- 学习笔记-XML、DTD与Schema
- 将来自Oracle查询的dense_rank转换为postgres