802.11 Trace File Analysis in NS2

1. 802.11 trace file format

NS2中802.11的trace功能利用cmu-trace对象来实现,并建议了一种新的trace格式,这种新格式目前是适用于无线网模拟,并且向前与老版本的trace格式兼容。下边分别看下新老两种trace格式:

1.1 New trace format

In order to use new trace format, the following command:

$ns use-newtrace

must be called before the universal trace command $ns trace-all .

An example of the new trace format is as following:



The new trace format can be divided into following fields:

1). Event type. the first field describes the type of event taking place at the nodeand can be one of the four types:
s - send
r - receive
d - drop
f - forward

2). General tag. The second field starting with "-t" may stand for time or global setting.
-t time
-t * (global setting)

3). Next hop info. This field provides next hop info and the tag starts with a leading "-H".
-Hs: id for this node
-Hd: id for next hop towards the destination.

4). Node property tags. This field denotes the node properties like node-id, the level at which tracing is being done like agent, router or MAC. The tags start with a leading "-N" and are listed as below:
-Ni: node id
-Nx: node’s x-coordinate
-Ny: node’s y-coordinate
-Nz: node’s z-coordinate
-Ne: node energy level
-Nl: trace level, such as AGT, RTR, MAC
-Nw: reason for the event. The different reasons for dropping a packet are given below:
"END" DROP_END_OF_SIMULATION
"COL" DROP_MAC_COLLISION
"DUP" DROP_MAC_DUPLICATE
"ERR" DROP_MAC_PACKET_ERROR
"RET" DROP_MAC_RETRY_COUNT_EXCEEDED
"STA" DROP_MAC_INVALID_STATE
"BSY" DROP_MAC_BUSY
"NRTE" DROP_RTR_NO_ROUTE i.e no route is available.
"LOOP" DROP_RTR_ROUTE_LOOP i.e there is a routing loop
"TTL" DROP_RTR_TTL i.e TTL has reached zero.
"TOUT" DROP_RTR_QTIMEOUT i.e packet has expired.
"CBK" DROP_RTR_MAC_CALLBACK
"IFQ" DROP_IFQ_QFULL i.e no buffer space in IFQ.
"ARP" DROP_IFQ_ARP_FULL i.e dropped by ARP
"OUT" DROP_OUTSIDE_SUBNET i.e dropped by base stations on receiving routing updates from nodes outside its domain.

5). Packet info at MAC level. This field gives MAC layer information and starts with a leading "-M" as shown below:
-Ma: duration
-Md: dst’s ethernet address
-Ms: src’s ethernet address
-Mt: ethernet type

6). Packet information at IP level. The tags for this field start with a leading "-I" and are listed along with their explanations asfollowing:
-Is: source address.source port number
-Id: dest address.dest port number
-It: packet type
-Il: packet size
-If: flow id
-Ii: unique id
-Iv: ttl value

7). Packet info at "Application level". The packet information at application level consists of the type of application like ARP,TCP, the type of adhoc routing protocol like DSDV, DSR, AODV etc being traced. This field consists of a leading "-P" and list of tags for different application is listed as below:
-P arp Address Resolution Protocol. Details for ARP is given by the following tags:
-Po: ARP Request/Reply
-Pm: src mac address
-Ps: src address
-Pa: dst mac address
-Pd: dst address

-P dsr This denotes the adhoc routing protocol called Dynamic source routing. Information on DSR is represented bythe following tags:
-Pn: how many nodes traversed
-Pq: routing request flag
-Pi: route request sequence number
-Pp: routing reply flag
-Pl: reply length
-Pe: src of srcrouting->dst of the source routing
-Pw: error report flag ?
-Pm: number of errors
-Pc: report to whom
-Pb: link error from linka->linkb

-P cbr Constant bit rate. Information about the CBR application is represented by the following tags:
-Pi: sequence number
-Pf: how many times this pkt was forwarded
-Po: optimal number of forwards

-P tcp Information about TCP flow is given by the following subtags:
-Ps: seq number
-Pa: ack number
-Pf: how many times this pkt was forwarded
-Po: optimal number of forwards

This field is still under development and new tags shall be added for other applications as they get included along theway.

1.2 Old trace format

By default, NS2 uses old trace format in 802.11 simulation.

An example of the old trace format is as following:

The old trace format can be divided into following fields:

1). ACTION [s r D] s - sent, r - received, D - dropped

2). WHEN: the time when the action happened

3). WHERE: the node where the action happened

4). LAYER: AGT -- application,

RTR -- routing,

LL -- link layer (ARP is done here) ,

IFQ -- outgoing packet queue (between link and mac layer),

MAC -- mac,

PHY -- physical

5). SEQNO: the sequence number of the packet

6). TYPE: the packet type

cbr -- CBR data stream packet

DSR -- DSR routing packet (control packet generated by routing)

RTS -- RTS packet generated by MAC 802.11

ARP -- link layer ARP packet

7). SIZE: the size of packet at current layer, when packet goes down, size increases, goes up size decreases

[a b c d]: a -- the packet duration in mac layer header

b -- the mac address of destination

c -- the mac address of source

d -- the mac type of the packet body

8). flags:

[......]: [

source node ip : port_number

destination node ip (-1 means broadcast) : port_number

ip header ttl

ip of next hop (0 means node 0 or broadcast)

]


2. Analyzing by using perl

3. Tools for trace analysis

cygwin+ns2.33安装过程遇到的问题及解决方法

1. cygwin安装组件的选择
为了简单,我直接选择的是完全安装,但实际上在之后ns2的安装上还是会存在找不到某些必须组件的问题。问题在于选择package的时候,点选了"Hide obsolete packages"的选项,而这些obsolete packages中的一些默认选项是not install,所以即使使用完全安装,也要show obsolete packages,从而确保"完全安装"。当然,也可以按照网上的方法只安装ns2必要的组件,但其中的一些也是位于obsolete packages中的。

2. bash.bashrc文件
按照网络上的说法,安装ns2之后需要把环境变量写入bash文件,而且据说在第一次运行cygwin后会自动在/home/usrname文件夹中生成针对此用户的bash文件。但是在我尝试了两次,并没有在/home/usrname中找到bash,原因未知。
解决方法1:copy系统默认的global bash文件到/home/usrname, 并命名为.bashrc, global bash在/etc/defaults/etc/bash.bashrc。这是网络上提供的方法,我没尝试过。
解决方法2:由于cygwin实际上是单用户的unix模拟环境,所以可以直接修改系统默认的global bash, 即位于/etc文件夹中的bash.bashrc,添加ns2相关路径到此bash文件即可。Attention:为了是修改后的bash文件有效,需要执行source bash.bashrc命令。

3. bash & bash script


Bourne Again shell

The UNIX shell program interprets user commands, which are either directly entered by the user, or which can be read from a file called the shell script or shell program. Shell scripts are interpreted, not compiled.

Apart from passing commands to the kernel, the main task of a shell is providing a user environment, which can be configured individually using shell resource configuration files.

bash or Bourne Again shell: the standard GNU shell, intuitive and flexible. On Linux, bash is the standard shell for common users. Bash offers functions including command line editing, unlimited size command history, job control, shell functions and aliases, indexed arrays of unlimited size, and integer arithmetic in any base from two to sixty-four.

Executing commands

Bash determines the type of program that is to be executed. Normal programs are system commands that exist in compiled form on your system. When such a program is executed, a new process is created because Bash makes an exact copy of itself. This child process has the same environment as its parent, only the process ID number is different. This procedure is called forking.

After the forking process, the address space of the child process is overwritten with the new process data. This is done through an exec call to the system.


The fork-and-exec mechanism thus switches an old command with a new, while the environment in which the new program is executed remains the same, including configuration of input and output devices, environment variables and priority. This mechanism is used to create all UNIX processes, so it also applies to the Linux operating system. Even the first process, init, with process ID 1, is forked during the boot procedure in the so-called bootstrapping procedure.

Shell script

Shell scripts consist of three kinds of commands - the shell functions, shell built-ins and existing commands in a directory on your system, which are arranged as shell syntax dictates. Scripts are read and executed line per line and should have a logical structure.

4. 针对ns2.33中nam的问题
安装ns2完成后,运行simple.tcl,nam执行时候会报错:
[code omitted because of length]
: no event type or button # or keysym
while executing
"bind Listbox {
%W yview scroll [expr {- (%D / 120) * 4}] units
}"
invoked from within
"if {[tk windowingsystem] eq "classic" [tk windowingsystem] eq "aqua"} {
bind Listbox {
%W yview scroll [expr {- (%D)}] units
}
bind Li..."


这个是ns2.33特有的一个问题,原因据说是tcl/tk和x11-proto/xproto-7.0.13不兼容,网络上给出两种解决方法:
1. 给tk-8.4.18-tkBind打上补丁,具体来说,到http://bugs.gentoo.org/show_bug.cgi?id=225999 下载 tk-8.4.18-tkBind.patch,放在ns-allinone-2.33目录下,之后运行命令

patch -p0 < tk-8.4.18-tkBind.patch

然后重新编译安装ns2.

2. 直接修改 ns-allinone-2.33/tk8.4.18/generic/tkBind.c 文件如下:

...

static int flagArray [TK_LASTEVENT] = {

...

/*MappingNotify*/ 0,

+#ifdef GenericEvent
+/*GenericEvent*/ 0,
+#endif

/*VirtualEvent*/ VIRTUAL,
...

之后重新编译安装ns2.

我使用了第二种方法,可以解决执行nam时报错的问题。