SSFNet的使用
运行某个模拟当然需要看它用到了哪些DML定义而输入必要的命令行参数,而不全是java SSF.Net.Net 1000 my.dml $SSF_HOME/examples/net.dml了。
比如运行src/SSF/OS/BGP4/test/propagation下面的测试例,但是该测试例中有 _extends .basic_ebgp_neighbor ,但是很明显net.dml
中并没有basic_ebgp_neighbor的定义,所以肯定还需要在命令行中增加定义这个的DML,本例是即在其上一级目录中的dictionary.dml中定义了
。那么在命令行参数的最后还要加上dictionary.dml这个DML的路径和文件名。
3 SSFNet Home/src/SSF/OS/BGP4/test目录下面有很多可以修改源代码,比如增加伪协议等的例子。
4 在DML配置文件中指定frequency 1000000大致上是有这样两个含义:一是模拟程序运行的时候,1 tick=1 microsecond微秒,即模拟程序将
以微秒为最小单位迁移。二是如果你运行模拟程序的命令行参数中指定程序运行时间为20,即相当于运行20 tick,那么也就是20*1000000微秒.
其实上面那个都是SSFNet内部实现的事情,你不必知道。你只要知道下面这三者之间的关系就可以了:
首先,下面这三者的数值的单位都是仿真程序里面的秒数,即seconds sim time,即三者的单位是一样的:
1)运行Net入口程序时指定的仿真总运行时间为,比如说5000个仿真秒数
2)DML中某些配置属性,比如BGP的connretry_time 120,即BGP连接关系丢失后重试时间是120个仿真秒数
3)pseudo-protocol里面,比如一句java程序是waitFor(Net.seconds(1000.0));,即等待1000个仿真秒数
5 DML怎么配置,每个属性什么含义的更详细讲解可以看每个协议doc目录下面的一个zip压缩包里面的那个pdf文档。
6 目前所采取的仿真实验和数据处理流程是这样的:
首先跑仿真。比如%SSFNet_HOME/。。。/test下的某个测试例,直接运行Make,因为这些某个测试例下面都有Makefile,这些Makefile有
把仿真运行的打印重定向到文件中的操作,这里叫做raw.如果是自己写的带有伪协议的测试例也可以通过类似的方式来做,即把其中一个
Makefile配置文件拷贝过来,把前面的TESTNAME RUNTIME等改一下,把下面打印验证结果的地方注释掉即可完全Make过去了。相应的例子
可见..../test/下的lwtest2.如果是make在BRITE下生成的dml,同样的道理,把相应的dml增加全就可以了,相应的例子可见../test/bgpdiesmalllsimu
下的Makefile
然后处理仿真数据。这个地方的数据处理是我们项目组自己制定的,有很多个性化的地方。
1)将raw生成middle。这个步骤的主要功能是添加一些自己需要的路径属性,比如nexthop等。
gawk -f %TraceHandleScript_HOME/addnexthop.awk test-raw.out
其中addnexthop.awk就是为初始时SSFNet生成的test-raw.out中的update增加nexthop路径属性。它将生成trace_add.txt文件,注意这里
我们只对SSFNet的bgpoptions中show_rcv_update true的打印报文进行处理,show_snd_update true好像不行。
gawk -f %TraceHandleScript_HOME/biaoge.awk trace_add.txt
这个脚本将把trace_add.txt中的所有加了nexthop的BGP update提取出来生成符合下一步Java程序读入的格式,放在raw_out.txt文件中
java Trans raw_out.txt
Trans.java这个函数将读取raw_out.txt中的报文,生成并填充ArrayList<BGPUpdate>以供上层应用程序调用。