You could do as following steps: 1. Modify mac-802.11.cc 1.1 Mac802_11::sendCTS(int dst, double rts_duration) { Packet *p = Packet::alloc(); hdr_cmn* ch = HDR_CMN(p); struct cts_frame *cf = (struct cts_frame*)p->access(hdr_mac::offset_); assert(pktCTRL_ == 0); ch->uid() = 0; ch->ptype() = PT_MAC_CTS; ##### modify ch->size() = ETHER_CTS_LEN; ch->iface() = -2; ch->error() = 0; .... } 1.2 Mac802_11::sendRTS(int dst, double rts_duration) 1.2 Mac802_11::sendACK(int dst, double rts_duration) 2. Modify packet.h enum packet_t { .... /* CMU/Monarch's extnsions */ PT_ARP, PT_MAC, PT_MAC_RTS, PT_MAC_CTS, PT_MAC_ACK, PT_MAC_CTRL, .... } class p_info { .... name_[PT_ARP]= "ARP"; name_[PT_MAC]= "MAC"; name_[PT_MAC_RTS]= "MAC_RTS"; name_[PT_MAC_CTS]= "MAC_CTS"; name_[PT_MAC_ACK]= "MAC_ACK"; name_[PT_MAC_CTRL]= "MAC_CTRL"; } 3. modify cmu-tracc.cc void CMUTrace::format(Packet* p, const char *why) { hdr_cmn *ch = HDR_CMN(p); int offset = 0; /* * Log the MAC Header */ format_mac(p, why, offset); if (namChan_) nam_format(p, offset); offset = strlen(wrk_); switch(ch->ptype()) { case PT_MAC: case PT_MAC_RTS: case PT_MAC_CTS: case PT_MAC_ACK: case PT_MAC_CTRL: ... } 4.make clean, make 5. Test it, the trace would look like below example. So now you can distinguist mac packets r 1199.980118388 _5_ MAC --- 0 MAC_ACK 38 [0 2 0 0] r 1199.980152 2 5 udp 72 ------- 0 1.0.0.0 3.0.0.0 0 122607 s 1199.980608388 _5_ MAC --- 0 MAC_RTS 44 [38e 1a 2 0] r 1199.980784727 _29_ MAC --- 0 MAC_RTS 44 [38e 1a 2 0] s 1199.980794727 _29_ MAC --- 0 MAC_CTS 38 [2ec 2 0 0] r 1199.980947065 _5_ MAC --- 0 MAC_CTS 38 [2ec 2 0 0] s 1199.980997065 _5_ MAC --- 122607 udp 144 [a2 1a 2 800] ------- 0 [3.0.0.0 1.0.10.0 32 4194314] r 1199.981573404 _29_ MAC --- 122607 udp 92 [a2 1a 2 800] ------- 0 [3.0.0.0 1.0.10.0 32 4194314] s 1199.981583404 _29_ MAC --- 0 MAC_ACK 38 [0 2 0 0] r 1199.981735743 _5_ MAC ---
Saturday, March 27, 2010
Wireless MAC trace format
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment