今天开始学着使用ns2,实验了书上的setdest例子,按照书上的代码实验了一下,结果没有成功,错误信息:
$ ./setdest -n 50 -p 0 -s 40 -t 400 -x 1200 -y 1200 > scene-50n-0p-40s-400t-120
assertion "speed != 0.0" failed: file "setdest.cc", line 595
5 [sig] setdest 456 d:/cygwin/home/DeadKnight/ns-allinone-2.29/ns-2.29/indep-utils/cmu-scen-gen/setdest/setdest.exe: *** fatal error - called with threadlist_ix -1
Hangup
郁闷了半天,看了下setdest.cc,发现书上参数错误(难道是旧版本的?)
setdest.cc中的一部分:
while ((ch = getopt(argc, argv, "v:n:s:m:M:t:P:p:x:y:i:o:")) != EOF) {
switch (ch) {
case 'v':
VERSION = atoi(optarg);
break;
case 'n':
NODES = atoi(optarg);
break;
case 's': //速度类型!!!!!!!!!!!!!
SPEEDTYPE = atoi(optarg);
break;
case 'm':
MINSPEED = atof(optarg);
break;
case 'M': //速度最大值!!!!!!!!!!!!
MAXSPEED = atof(optarg);
break;
case 't':
MAXTIME = atof(optarg);
break;
case 'P':
PAUSETYPE = atoi(optarg);
break;
case 'p':
PAUSE = atof(optarg);
break;
case 'x':
MAXX = atof(optarg);
break;
case 'y':
MAXY = atof(optarg);
break;
default:
usage(argv);
exit(1);
}
}
显然,s代表的是speedtype(u_int32_t SPEEDTYPE = 1; // speed type (default = uniform)),而不是书上所说的速度最大值。真正的速度最大值应该是用M定义,所以,正确的命令应该是:
./setdest -n 50 -p 0 -M 40 -t 400 -x 1200 -y 1200 > scene-50n-0p-40s-400t-120
其实,直接运行./setdest就可以得到参数的提示:
$ ./setdest
usage:
<original 1999 CMU version (version 1)>
./setdest -v <1> -n <nodes> -p <pause time> -M <max speed>
-t <simulation time> -x <max X> -y <max Y>
OR
<modified 2003 U.Michigan version (version 2)>
./setdest -v <2> -n <nodes> -s <speed type> -m <min speed> -M <max speed>
-t <simulation time> -P <pause type> -p <pause time> -x <max X>
-y <max Y>
(Refer to the script files make-scen.csh and make-scen-steadysta
te.csh for detail.)
BTW:
书中有时将./setdest错误得用作setdest,这样,会出现以下错误信息:
$ setdest
bash: setdest: command not found
原因是环境变量PATH中不包括setdest所在的目录(除非你手动加过了),shell会提示找不到相应的程序
回到原来的话题,现在在重新输入./setdest -n 50 -p 0 -M 40 -t 400 -x 1200 -y 1200 > scene-50n-0p-40s-400t-120,回车,OK,一切正常(使用前别忘记cd到setdest目录下,在shell根目录下会找不到setdest)
DeadKnight@XJTU-ZHAO ~/ns-allinone-2.29/ns-2.29/indep-utils/cmu-scen-gen/setdest
$ ./setdest -n 50 -p 0 -M 40 -t 400 -x 1200 -y 1200 > scene-50n-0p-40s-400t-120
DeadKnight@XJTU-ZHAO ~/ns-allinone-2.29/ns-2.29/indep-utils/cmu-scen-gen/setdest
$
顺便一句,setdest很耗时耗资源,上面这条命令大概要耗时大概1分钟,并且CPU占用率会保持100%,所以不要将参数设置得过大