OFTest(一):如何忽略一些字段在端口poll报文
1
前言
✔ 关于OFTest的介绍,请戳这里(https://github.com/floodlight/oftest)
✔ 总的来说,就是用python写的测试Openflow协议一致性的测试套件
✔ 可以将OFTest扩展为测试Openflow的测试平台,例如做压力测试
2
遇到的问题
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
3
具体解决
抓包相关的函数定义在/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定义如下
def match_exp_pkt_ignore_parts(exp_pkt,pkt,ignore_list):
e = str(exp_pkt)
p = str(okt)
if len(e)<60:
p = p[:len(e)]
start_p = 0
for (u,v) in ignore_list:
if (e[start_p:u]!=p[start_p:u]):
return False
start_p=v
if (e[start_p:-1]!=p[start_p:-1]):
return False
return True
例如capture封装成nvgre格式的报文
verify_packets_ignore_list(self,str(exp_pkt),str(pkt),out_port,[ip_id_field,ip_checksum_field,gre_hash_field])
其中这些field预先定义
ip_id_field = (18,20)
ip_checksum_field = (24,26)
gre_hash_field = (41,42)
如果遇到包含vlan_tag,这些field都要增加4,就不累述了
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法