使用tahi测试ipv6协议栈

来源:互联网 发布:linux测试u盘读写速度 编辑:程序博客网 时间:2024/05/27 02:31

tahi提供测试ipv6 协议一致性和互操作行的工具包。

 

tahi原理,NUT启动ipv6后接口上会根据自己mac地址自动生成链路本地ipv6地址fe80::接口ID 该接口IDmac地址变化而来这样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.pmvRemote($;$@)vRemoteAsync($;$@) vRemoteAsyncWait()
第一步就exit;
4.
编辑tnunt描述文件tn.defnut.def
安装完毕后需要配置tn.defnut.def文件,这两个文件是TNNUT的描述文件描述具体的mac地址,物理接口等信息,相当重要
/usr/local/v6eval/etc/中有两个文件tn.def.sample nut.def.sample
可以将两个文件拷贝为响应文件,并作相应修改即可
下面是两个文件内容
tn.def
如果测试的NUT不是linux系统则之需要设置Link0即可,
切记 interface 的名字是 TNNUT相连的接口名称 可以用ifconfig查看
mac
地址是个假地址千万不要用接口真实mac。另外该接口千万不要启ipv6
Link0
的名字千万不要变
切记mac 地址要小写


#
# tn.def
#
# Information about the Tester Node (TN)
#

#
# Remote Controal Configuration
#
RemoteDevice    cuad0
RemoteDebug     0
RemoteIntDebug 0
RemoteLog       1
RemoteSpeed     0
RemoteLogout    0
RemoteMethod    serial
#filter ipv6

#linkname       interface       BOGUS ether source address
#               name            of the Tester Interface
Link0           le0             00:00:00:00:01:11
#Link1          de1             00:00:00:00:01:01
#Link2          de2             00:00:00:00:01:02
#Link3          de4             00:00:00:00:01:03

nut.def
如果测试的NUT不是linux系统则之需要设置Link0 mac地址即可,
可以用ifconfig查看 需要测试接口的真实mac地址。另外该接口要启ipv6
NUThost或者special时拓扑结构说明
TN (tester)                       NUT (host or special device)

+------------+ Ether cross cable +------------+              

|       [ed1]+--------------------+[fxp0]      |              

+------------+      link0         +------------+

NUTrouter时拓扑结构说明

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报文,否则可能会对测试结果产生影响。

#
# nut.def
#
# Information about the Node Under Test (NUT)
#

# System type
System          manual

# System information
TargetName      FreeBSD 4.9-RELEASE + kame-20040726-freebsd49-snap

# Name
HostName        target.tahi.org

# Type
#   host, router, special
Type            host

# Super user name and it's password
# if you select manual as "System", you don't care "User" and "Password"
#
User            root
Password        v6eval

#linkname       interface       The EXACT ether source address
#               name            of the Interface Under Test

#mac 地址要小写

Link0           fxp0            00:19:d1:40:56:55
#Link1          fxp1            00:00:92:a7:6d:f6
#Link2          de0             00:c0:f6:b0:aa:ef
#Link3          de1             00:00:92:a7:6d:f8
#Link4          de2             00:90:27:14:ce:e3

5编写INDEX文件

测试工具autorun需要输入参数就是INDEX文件名。INDEX文件描述了需要进行测试的脚本的名称。

INDEX 文件的格式
一行表示一个测试例信息
#开头的行属于注释
如果想在测试中增加测试版本信息,那么加入注释行#$Name hogehoge$
"&print:"开始的行,将把冒号后的内容输出到html文档
另外下面的表示
<seq>:
指定测试顺序的路径名。 必选
<def>:
指定报文定义文件的路径名。 必选
<opts>:
指定传递给测试序列的参数。 必选 如果该项省略,表示不关心参数
<html doc>:
指定用来用来生成数据的html文档的文件名,如果指定了该项就不在perldoc所跟的一致性测试文件。
<dsc>:
指定测试文件名。 可选。 如果缺省,那么就用".seq"所表示的顺序名称
<links>:
指定脚本中网络设备的数量。例如,如果使用Link0Link1,就指定该值为,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相同,只是不产生logtcpdump的链接

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文件的链接。
参考链接

原创粉丝点击