SLIDE 6 6
31
New Packet Header – Step 1
Create header structure
struct struct hdr_msg hdr_msg { char msg_[64]; char msg_[64]; static static int int offset_;
inline static inline static int int& offset() { return & offset() { return
inline static inline static hdr_msg hdr_msg* * access(Packet access(Packet* p) { * p) { return ( return (hdr_msg hdr_msg*) p *) p->access(offset access(offset_); _); } /* per /* per-field member functions */ field member functions */ char* char* msg msg() { return ( () { return (msg msg_); } _); } int int maxmsg maxmsg() { return ( () { return (sizeof(msg sizeof(msg_)); } _)); } }; };
32
New Packet Header – Step 2
PacketHeader/Message static class static class MessageHeaderClass MessageHeaderClass : : public public PacketHeaderClass PacketHeaderClass { public: public: MessageHeaderClass MessageHeaderClass() : () : PacketHeaderClass("PacketHeader PacketHeaderClass("PacketHeader/Message /Message ", ", sizeof(hdr_msg sizeof(hdr_msg)) { )) { bind_offset(&hdr_msg::offset bind_offset(&hdr_msg::offset_); _); } } } class_msghdr class_msghdr;
33
New Packet Header – Step 3
Enable tracing (packet.h): enum enum packet_t packet_t { PT_TCP, PT_TCP, …, …, PT_MESSAGE, PT_MESSAGE, PT_NTYPE // This MUST be the LAST one PT_NTYPE // This MUST be the LAST one }; }; class class p_info p_info { …… …… name_[PT_MESSAGE name_[PT_MESSAGE] = “message”; ] = “message”; name_[PT_NTYPE name_[PT_NTYPE]= "undefined"; ]= "undefined"; …… …… }; };
34
New Packet Header – Step 4
Register new header (tcl/lib/ns-
packet.tcl)
foreach foreach pair { pair { { Common { Common off_cmn
_ } … { Message { Message off_msg
_ } }
35
Packet Header: Caution
Some old code, e.g.: RtpAgent::RtpAgent RtpAgent::RtpAgent() { () { …… …… bind(“off_rtp bind(“off_rtp_”, & _”, &off_rtp
); } …… …… hdr_rtp hdr_rtp* * rh rh = ( = (hdr_rtp hdr_rtp*)p *)p- >access(off_rtp access(off_rtp_); _); Don’t follow this example!
36
Agent/Message – Step 1
TclObject NsObject Connector Classifier Delay AddrClassifier Agent McastClasifier Queue Trace DropTail RED TCP Enq Deq Drop Reno SACK Message