OFTest(一):如何忽略一些字段在端口poll报文

作者简介:刘敬一,盛科网络SDN交换机产品线测试主管

前言

  • 关于OFTest的介绍,请戳这里
  • 总的来说,就是用python写的测试Openflow协议一致性的测试套件
  • 可以将OFTest扩展为测试Openflow的测试平台,例如做压力测试

遇到的问题

  • OFTest的verify_packets,会要求给定期望报文的全部str,然后通过poll()来判断是否capture到报文,并且capture的报文的每个字段是否和期望值完全一致。
  • 但是对于一些封装后的报文,例如NVGRE封装,封装后的外层IP header的Identity字段是无法预知的,当然IP header的checksum也是无法预知的。还有VXLAN的报文,除了上面说到的两个field之外,UDP的source-port也是未知的(当然dest-port一定是4789),同时UDP header的checksum也是未知的
  • 如果要检查封装后的报文,必须提供忽略指定字段的API。
  • 本例采用的是传入一个tuple的list,每个tuple包含需要忽略字段的起始offset和终止offset

具体解决

    • 抓包相关的函数定义在/src/python/oftest/testutils里面
    • 追溯函数调用verify_packets->verify_packets->poll->match_exp_pkt
    • match_exp_pkt很简单,就是return str(pkt)==str(exp_str),意味着哪怕有一个字段不相符,OFTest都会认为是没有抓到期望报文
    • 添加上面各个函数对应的新定义函数,例如match_exp_pkt_ignore_parts,同时末尾增加一个参数,就是ignore_list,用来传递需要忽略的字段offset的起至点
    • match_exp_pkt_ignore_part定义如下
    • 例如capture封装成nvgre格式的报文

    • 其中这些field预先定义

  • 如果遇到包含vlan_tag,这些field都要增加4,就不累述了

--------------华丽的分割线------------------
本文系《SDNLAB原创文章奖励计划》投稿文章,该计划旨在鼓励广大从业人员在SDN/NFV/Cloud网络领域创新技术、开源项目、产业动态等方面进行经验和成果的文字传播、分享、交流。有意向投稿的同学请通过官方唯一指定投稿通道进行文章投递,投稿细则请参考《SDNLAB原创文章奖励计划》


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/16838.html
分享到:
相关文章
条评论

登录后才可以评论

ljyfree 发表于16-05-17
0