31 |
31 |
32 |
32 |
33 namespace ns3 { |
33 namespace ns3 { |
34 |
34 |
35 enum { |
35 enum { |
36 PCAP_ETHERNET = 1 |
36 PCAP_ETHERNET = 1 |
37 }; |
37 }; |
38 |
38 |
39 PcapWriter::PcapWriter () |
39 PcapWriter::PcapWriter () |
40 { |
40 { |
41 m_writer = 0; |
41 m_writer = 0; |
42 } |
42 } |
43 PcapWriter::~PcapWriter () |
43 PcapWriter::~PcapWriter () |
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 Write32 (0xa1b2c3d4); |
58 Write32 (0xa1b2c3d4); |
59 Write16 (2); |
59 Write16 (2); |
60 Write16 (4); |
60 Write16 (4); |
61 Write32 (0); |
61 Write32 (0); |
62 Write32 (0); |
62 Write32 (0); |
63 Write32 (0xffff); |
63 Write32 (0xffff); |
64 Write32 (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 { |
71 { |
72 uint64_t current = Simulator::Now ().ApproximateToMicroSeconds (); |
72 uint64_t current = Simulator::Now ().ApproximateToMicroSeconds (); |
73 uint64_t s = current / 1000000; |
73 uint64_t s = current / 1000000; |
74 uint64_t us = current % 1000000; |
74 uint64_t us = current % 1000000; |
75 Write32 (s & 0xffffffff); |
75 Write32 (s & 0xffffffff); |
76 Write32 (us & 0xffffffff); |
76 Write32 (us & 0xffffffff); |
77 Write32 (packet.GetSize ()); |
77 Write32 (packet.GetSize ()); |
78 Write32 (packet.GetSize ()); |
78 Write32 (packet.GetSize ()); |
79 m_writer->Write (packet.PeekData (), packet.GetSize ()); |
79 m_writer->Write (packet.PeekData (), packet.GetSize ()); |
80 } |
80 } |
81 } |
81 } |
82 |
82 |
83 void |
83 void |
84 PcapWriter::WriteData (uint8_t *buffer, uint32_t size) |
84 PcapWriter::WriteData (uint8_t *buffer, uint32_t size) |
85 { |
85 { |
86 m_writer->Write (buffer, size); |
86 m_writer->Write (buffer, size); |
87 } |
87 } |
88 void |
88 void |
89 PcapWriter::Write32 (uint32_t data) |
89 PcapWriter::Write32 (uint32_t data) |
90 { |
90 { |
91 m_writer->Write ((uint8_t*)&data, 4); |
91 m_writer->Write ((uint8_t*)&data, 4); |
92 } |
92 } |
93 void |
93 void |
94 PcapWriter::Write16 (uint16_t data) |
94 PcapWriter::Write16 (uint16_t data) |
95 { |
95 { |
96 m_writer->Write ((uint8_t*)&data, 2); |
96 m_writer->Write ((uint8_t*)&data, 2); |
97 } |
97 } |
98 |
98 |
99 }; // namespace ns3 |
99 }; // namespace ns3 |