44 { |
44 { |
45 delete m_writer; |
45 delete m_writer; |
46 } |
46 } |
47 |
47 |
48 void |
48 void |
49 PcapWriter::open (char const *name) |
49 PcapWriter::Open (char const *name) |
50 { |
50 { |
51 m_writer = new SystemFile (); |
51 m_writer = new SystemFile (); |
52 m_writer->open (name); |
52 m_writer->Open (name); |
53 } |
53 } |
54 |
54 |
55 void |
55 void |
56 PcapWriter::writeHeaderEthernet (void) |
56 PcapWriter::WriteHeaderEthernet (void) |
57 { |
57 { |
58 write_32 (0xa1b2c3d4); |
58 Write32 (0xa1b2c3d4); |
59 write_16 (2); |
59 Write16 (2); |
60 write_16 (4); |
60 Write16 (4); |
61 write_32 (0); |
61 Write32 (0); |
62 write_32 (0); |
62 Write32 (0); |
63 write_32 (0xffff); |
63 Write32 (0xffff); |
64 write_32 (PCAP_ETHERNET); |
64 Write32 (PCAP_ETHERNET); |
65 } |
65 } |
66 |
66 |
67 void |
67 void |
68 PcapWriter::writePacket (Packet const packet) |
68 PcapWriter::WritePacket (Packet const packet) |
69 { |
69 { |
70 if (m_writer != 0) { |
70 if (m_writer != 0) { |
71 uint64_t current = Simulator::now ().us (); |
71 uint64_t current = Simulator::Now ().Us (); |
72 uint64_t s = current / 1000000; |
72 uint64_t s = current / 1000000; |
73 uint64_t us = current % 1000000; |
73 uint64_t us = current % 1000000; |
74 write_32 (s & 0xffffffff); |
74 Write32 (s & 0xffffffff); |
75 write_32 (us & 0xffffffff); |
75 Write32 (us & 0xffffffff); |
76 write_32 (packet.getSize ()); |
76 Write32 (packet.GetSize ()); |
77 write_32 (packet.getSize ()); |
77 Write32 (packet.GetSize ()); |
78 m_writer->write (packet.peekData (), packet.getSize ()); |
78 m_writer->Write (packet.PeekData (), packet.GetSize ()); |
79 } |
79 } |
80 } |
80 } |
81 |
81 |
82 void |
82 void |
83 PcapWriter::writeData (uint8_t *buffer, uint32_t size) |
83 PcapWriter::WriteData (uint8_t *buffer, uint32_t size) |
84 { |
84 { |
85 m_writer->write (buffer, size); |
85 m_writer->Write (buffer, size); |
86 } |
86 } |
87 void |
87 void |
88 PcapWriter::write_32 (uint32_t data) |
88 PcapWriter::Write32 (uint32_t data) |
89 { |
89 { |
90 m_writer->write ((uint8_t*)&data, 4); |
90 m_writer->Write ((uint8_t*)&data, 4); |
91 } |
91 } |
92 void |
92 void |
93 PcapWriter::write_16 (uint16_t data) |
93 PcapWriter::Write16 (uint16_t data) |
94 { |
94 { |
95 m_writer->write ((uint8_t*)&data, 2); |
95 m_writer->Write ((uint8_t*)&data, 2); |
96 } |
96 } |
97 |
97 |
98 }; // namespace ns3 |
98 }; // namespace ns3 |