The flow monitor defines a trace format which may be used by post-processing scripts to determine various counts on a per-flow basis. The format is defined by the following code in ~ns/flowmon.cc:
void
FlowMon::fformat(Flow* f)
{
double now = Scheduler::instance().clock();
sprintf(wrk_, "%8.3f %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d
now,
f-\>flowid(), // flowid
0, // category
f-\>ptype(), // type (from common header)
f-\>flowid(), // flowid (formerly class)
f-\>src(),
f-\>dst(),
f-\>parrivals(), // arrivals this flow (pkts)
f-\>barrivals(), // arrivals this flow (bytes)
f-\>epdrops(), // early drops this flow (pkts)
f-\>ebdrops(), // early drops this flow (bytes)
parrivals(), // all arrivals (pkts)
barrivals(), // all arrivals (bytes)
epdrops(), // total early drops (pkts)
ebdrops(), // total early drops (bytes)
pdrops(), // total drops (pkts)
bdrops(), // total drops (bytes)
f-\>pdrops(), // drops this flow (pkts) [includes edrops]
f-\>bdrops() // drops this flow (bytes) [includes edrops]
);
};
Most of the fields are explained in the code comments.
The ``category'' is historical, but is used to maintain loose backward-
compatibility with the flow manager format in ns version 1.