tahi提供测试ipv6 协议一致性和互操作行的工具包。
tahi原理,当NUT启动ipv6后接口上会根据自己mac地址自动生成链路本地ipv6地址fe80::接口ID 该接口ID有mac地址变化而来这样TN根据伪mac构造ipv6报文给被测端口,即可达到测试ipv6的目的。
tahi架构
整个架构分TN 和 NUT两部分
其中TN一定要是freebsd环境 且要安装perl的支持
具体可以参见
http://www.tahi.org/release/
IPv6 Conformance Test Tool 提供运行测试脚本的程序
IPv6 Conformance Test Program Package 提供运行脚本
tahi搭建
1.安装freebsd
2.可能p5-Expect和 p5-Digest-MD5都没有安装
如果需要安装需要让TN上公网,配置代理后使用工具
setenv HTTP_PROXY http://jiazc:****@1.1.1.1:80
pkg_add -r p5-Expect
pkg_add -r p5-Digest-MD5
安装p5-Expect, 进入/usr/ports/lang/p5-Expect,然后make install;
进行升级
配置代理的命令 参见链接
3.从tahi网站下载测试套(ct)和测试工具(v6eval)
要首先安装v6eval然后安装ct(详细步骤可以参见v6eval中的INSTALL.v6eval 和 INSTALL.ct)
将下载的tar包解压缩,tar xzvf v6eval.tar
退到v6eval 包的目录解压缩后进入,然后make;make install;
tar xzvf ct.tar
进入ct然后make install相关的perl lib API放到了/usr/local/lib/perl5/site_perl/5.8.9/中 包括V6evalCommon.pm V6evalRemote.pm V6evalTool.pm 等类库文件
因为有些操作需要调用reboot等远端处理函数,可以通过注释掉v6evalTool.pm中vRemote($;$@)vRemoteAsync($;$@) 和vRemoteAsyncWait()
第一步就exit;
4.编辑tn和unt描述文件tn.def和nut.def
安装完毕后需要配置tn.def和nut.def文件,这两个文件是TN和NUT的描述文件描述具体的mac地址,物理接口等信息,相当重要
在/usr/local/v6eval/etc/中有两个文件tn.def.sample 和nut.def.sample
可以将两个文件拷贝为响应文件,并作相应修改即可
下面是两个文件内容
tn.def
如果测试的NUT不是linux系统则之需要设置Link0即可,
切记 interface 的名字是 TN与NUT相连的接口名称 可以用ifconfig查看
mac地址是个假地址千万不要用接口真实mac。另外该接口千万不要启ipv6
Link0的名字千万不要变
切记mac 地址要小写
|
nut.def
如果测试的NUT不是linux系统则之需要设置Link0 的mac地址即可,
可以用ifconfig查看 需要测试接口的真实mac地址。另外该接口要启ipv6
当NUT为host或者special时拓扑结构说明
TN (tester) NUT (host or special device)
+------------+ Ether cross cable +------------+
| [ed1]+--------------------+[fxp0] |
+------------+ link0 +------------+
当NUT为router时拓扑结构说明
TN (tester) link1 NUT (router)
+------------+ Ether cross cable +------------+
| [ed2]+--------------------+[fxp1] |
| | Ether cross cable | |
| [ed1]+--------------------+[fxp0] |
+------------+ link0 +------------+
首先NUT要开启路由功能,关闭一切防火墙配置,我的测试环境中使用了fedora 10作为Router
需要打开ipv6,即ipv6转发功能。
1.打开内核中ipv6转发功能 在/etc/sysctl.conf中增加两行 net.ipv6.conf.all.forwarding=1 net.ipv6.conf.default.forwarding=1 2.打开启动文件中ipv6转发项/etc/sysconfig/network中增加三行 #Should already be there NETWORKING_IPV6=yes #Enable forwarding IPV6FORWARDING=yes #Disable autocon_guration IPV6_ROUTER=yes 3.关闭防火墙 使用system-config-firewall 关闭防火墙 4.为被测端口设置ipv6地址 在/etc/sysconfig/network-scripts/中fxp0对应的ifcfg-fxp0 文件中增加 IPV6ADDR=3ffe:501:ffff:100:**** 在/etc/sysconfig/network-scripts/中fxp1对应的ifcfg-fxp1 文件中增加 IPV6ADDR=3ffe:501:ffff:101:**** 5.配置完成后重启 ****为相应物理mac地址EUI-64接口标识符 |
ed1发出的报文具有前缀3ffe:501:ffff:100::/64
ed2发出的报文具有前缀3ffe:501:ffff:101::/64
测试过程中,需要关闭NUT一切非ipv6报文,否则可能会对测试结果产生影响。
# #mac 地址要小写 Link0 fxp0 00:19:d1:40:56:55 |
5编写INDEX文件
测试工具autorun需要输入参数就是INDEX文件名。INDEX文件描述了需要进行测试的脚本的名称。
INDEX 文件的格式
一行表示一个测试例信息
以#开头的行属于注释
如果想在测试中增加测试版本信息,那么加入注释行#$Name hogehoge$
以"&print:"开始的行,将把冒号后的内容输出到html文档
另外下面的表示
<seq>: 指定测试顺序的路径名。 必选
<def>: 指定报文定义文件的路径名。 必选
<opts>: 指定传递给测试序列的参数。 必选 如果该项省略,表示不关心参数
<html doc>: 指定用来用来生成数据的html文档的文件名,如果指定了该项就不在perldoc所跟的一致性测试文件。
<dsc>: 指定测试文件名。 可选。 如果缺省,那么就用".seq"所表示的顺序名称
<links>: 指定脚本中网络设备的数量。例如,如果使用Link0和Link1,就指定该值为,2.缺省值为1.
比如
./DH_Flood.seq:./DH_Flood.def:::Many Extension Headers:
其中
Seq | ./Echo_Link-Local.seq |
def | ./Echo_Link-Local.def |
opts | 空 |
html doc | 空 |
dsc | Echo Request and Echo Reply with a link-local address |
links | 空 |
下图是ICMP测试的节选
# $Name: REL_2_1_1 $ # # $TAHI: ct/icmp/INDEX_host_router,v 1.5 2003/06/11 08:51:57 akisada Exp $ #---------------------------------------------------------------------- # ICMPv6 Informational Messages #---------------------------------------------------------------------- &print:<B>ICMPv6 Informational Messages</B> #---------------------------------------------------------------------- # Ping #---------------------------------------------------------------------- &print:<B>Echo request and Echo Reply</B> #--- ping link-local to link-local ./Echo_Link-Local.seq:./Echo_Link-Local.def:::Echo Request and Echo Reply with a link-local address #--- ping global to global ./Echo_Global.seq:./Echo_Global.def:::Echo Request and Echo Reply with a global address |
6.使用测试工具执行测试套
方法1:运行所有测试套 % cd $SOMEWHERE/ct
% make clean
make test
check:脚本不运行,只是运行INDEX文件中指定的包定义文件,不会生成文档 document: 使用INDEX文件中指定的测试脚本文件生成HTML文档,脚本不执行。 document2:跟document相同,只是不产生log和tcpdump的链接 clean:清空测试环境 test:执行测试 相信信息请参见ct子目录中的Makefile文件 |
方法2:使用autorun运行测试套
配置完成后可以到ct中的icmp目录,删除其中index.html文件,
运行autorun INDEX_host_router
即可开始测试
如果autorun命令不识别,那要把/usr/local/v6eval/bin/ 加入到path变量中,具体操作是vi ~/.cshrc
然后在path中加入路径,保存推出后,再重新登陆即可识别autorun。运行所有的case
7.查看结果分析日志
日志名称为index.html其中有log文件的链接。
参考链接
![](http://hi.csdn.net/attachment/201006/8/0_12760094053vcm.gif)