[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ns] Add SACK info to trace file



Hello

I added SACK block infomation to trace file.
and wrote support code for visualize SACK blocks for tcptrace. (www.tcptrace.org)

What is the best way to include this feature in official ns release?
Introduce some switch valiable (for example "show_sackblk_") is more better?

--
Daikichi Osuga

/* code fragment from trace.cc */

        if (!show_tcphdr_) {
                sprintf(wrk_, "%c %g %d %d %s %d %s %d %s%s %s%s %d %d",
                        tt,
                        round(Scheduler::instance().clock()),
                        s,
                        d,
                        name,
                        th->size(),
                        flags,
                        iph->flowid() /* was p->class_ */,
                        // iph->src() >> (Address::instance().NodeShift_[1]), 
                        // iph->src() & (Address::instance().PortMask_), 
                        // iph->dst() >> (Address::instance().NodeShift_[1]), 
                        // iph->dst() & (Address::instance().PortMask_),
                        src_nodeaddr,
                        src_portaddr,
                        dst_nodeaddr,
                        dst_portaddr,
                        seqno,
                        th->uid() /* was p->uid_ */);
        } else {
                sprintf(wrk_, 
                        "%c %g %d %d %s %d %s %d %s%s %s%s %d %d %d 0x%x %d %d"
#ifdef SHOW_SACKBLK
                        " %d %d %d %d %d %d"
#endif
                        ,tt,
                        round(Scheduler::instance().clock()),
                        s,
                        d,
                        name,
                        th->size(),
                        flags,
                        iph->flowid(), /* was p->class_ */
                        // iph->src() >> (Address::instance().NodeShift_[1]), 
                        // iph->src() & (Address::instance().PortMask_), 
                        // iph->dst() >> (Address::instance().NodeShift_[1]), 
                        // iph->dst() & (Address::instance().PortMask_),
                        src_nodeaddr,
                        src_portaddr,
                        dst_nodeaddr,
                        dst_portaddr,
                        seqno,
                        th->uid(), /* was p->uid_ */
                        tcph->ackno(),
                        tcph->flags(),
                        tcph->hlen(),
                        tcph->sa_length()
#ifdef SHOW_SACKBLK
                        ,tcph->sa_length() >= 1 ? tcph->sa_left(0) : 0,
                        tcph->sa_length() >= 1 ? tcph->sa_right(0) : 0,
                        tcph->sa_length() >= 2 ? tcph->sa_left(1) : 0,
                        tcph->sa_length() >= 2 ? tcph->sa_right(1) : 0,
                        tcph->sa_length() >= 3 ? tcph->sa_left(2) : 0,
                        tcph->sa_length() >= 3 ? tcph->sa_right(2) : 0
#endif
                        );
        }