author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Mon, 04 Jun 2007 16:17:01 +0200 | |
changeset 728 | 95c426b1cb60 |
parent 607 | 1b7abeccfcda |
child 729 | b5e744285e92 |
permissions | -rw-r--r-- |
389
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
2 |
/* |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
3 |
* Copyright (c) 2007 INRIA |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
4 |
* All rights reserved. |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
5 |
* |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
6 |
* This program is free software; you can redistribute it and/or modify |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
7 |
* it under the terms of the GNU General Public License version 2 as |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
8 |
* published by the Free Software Foundation; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
9 |
* |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
10 |
* This program is distributed in the hope that it will be useful, |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
13 |
* GNU General Public License for more details. |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
14 |
* |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
16 |
* along with this program; if not, write to the Free Software |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
17 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
18 |
* |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
19 |
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
20 |
*/ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
21 |
#include "ascii-trace.h" |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
22 |
|
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
23 |
#include "ns3/trace-context.h" |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
24 |
#include "ns3/trace-root.h" |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
25 |
#include "ns3/simulator.h" |
604
0b6bef4e99bc
rename node.h to i-node.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
562
diff
changeset
|
26 |
#include "ns3/i-node.h" |
524
082ffdd8fbd7
move code around
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
485
diff
changeset
|
27 |
#include "ns3/queue.h" |
082ffdd8fbd7
move code around
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
485
diff
changeset
|
28 |
#include "ns3/node-list.h" |
082ffdd8fbd7
move code around
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
485
diff
changeset
|
29 |
#include "ns3/llc-snap-header.h" |
389
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
30 |
|
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
31 |
#include "ipv4.h" |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
32 |
#include "arp-header.h" |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
33 |
#include "udp-header.h" |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
34 |
#include "ipv4-header.h" |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
35 |
|
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
36 |
namespace ns3 { |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
37 |
|
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
38 |
AsciiTrace::AsciiTrace (std::string filename) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
39 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
40 |
m_os.open (filename.c_str ()); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
41 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
42 |
AsciiTrace::~AsciiTrace () |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
43 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
44 |
m_os.close (); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
45 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
46 |
void |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
47 |
AsciiTrace::TraceAllQueues (void) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
48 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
49 |
TraceRoot::Connect ("/nodes/*/ipv4/interfaces/*/netdevice/queue/*", |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
50 |
MakeCallback (&AsciiTrace::LogDevQueue, this)); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
51 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
52 |
void |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
53 |
AsciiTrace::TraceAllNetDeviceRx (void) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
54 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
55 |
TraceRoot::Connect ("/nodes/*/ipv4/interfaces/*/netdevice/rx", |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
56 |
MakeCallback (&AsciiTrace::LogDevRx, this)); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
57 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
58 |
|
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
59 |
void |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
60 |
AsciiTrace::PrintType (Packet const &packet) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
61 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
62 |
Packet p = packet; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
63 |
LlcSnapHeader llc; |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
389
diff
changeset
|
64 |
p.RemoveHeader (llc); |
389
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
65 |
switch (llc.GetType ()) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
66 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
67 |
case 0x0800: { |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
68 |
Ipv4Header ipv4; |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
389
diff
changeset
|
69 |
p.RemoveHeader (ipv4); |
389
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
70 |
if (ipv4.GetProtocol () == 17) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
71 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
72 |
UdpHeader udp; |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
389
diff
changeset
|
73 |
p.RemoveHeader (udp); |
389
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
74 |
m_os << "udp size=" << p.GetSize (); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
75 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
76 |
} break; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
77 |
case 0x0806: { |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
78 |
ArpHeader arp; |
463
c2082308e01a
merge Packet API changes needed for Packet pretty printing.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
389
diff
changeset
|
79 |
p.RemoveHeader (arp); |
389
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
80 |
m_os << "arp "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
81 |
if (arp.IsRequest ()) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
82 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
83 |
m_os << "request"; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
84 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
85 |
else |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
86 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
87 |
m_os << "reply "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
88 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
89 |
} break; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
90 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
91 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
92 |
|
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
93 |
void |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
94 |
AsciiTrace::LogDevQueue (TraceContext const &context, Packet const &packet) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
95 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
96 |
enum Queue::TraceType type; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
97 |
context.Get (type); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
98 |
switch (type) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
99 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
100 |
case Queue::ENQUEUE: |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
101 |
m_os << "+ "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
102 |
break; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
103 |
case Queue::DEQUEUE: |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
104 |
m_os << "- "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
105 |
break; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
106 |
case Queue::DROP: |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
107 |
m_os << "d "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
108 |
break; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
109 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
110 |
m_os << Simulator::Now ().GetSeconds () << " "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
111 |
NodeList::NodeIndex nodeIndex; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
112 |
context.Get (nodeIndex); |
728
95c426b1cb60
rename INode to Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
607
diff
changeset
|
113 |
m_os << "node=" << NodeList::GetNode (nodeIndex)->GetId () << " "; |
389
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
114 |
Ipv4::InterfaceIndex interfaceIndex; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
115 |
context.Get (interfaceIndex); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
116 |
m_os << "interface=" << interfaceIndex << " "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
117 |
m_os << "pkt-uid=" << packet.GetUid () << " "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
118 |
PrintType (packet); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
119 |
m_os << std::endl; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
120 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
121 |
void |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
122 |
AsciiTrace::LogDevRx (TraceContext const &context, Packet &p) |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
123 |
{ |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
124 |
m_os << "r " << Simulator::Now ().GetSeconds () << " "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
125 |
NodeList::NodeIndex nodeIndex; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
126 |
context.Get (nodeIndex); |
728
95c426b1cb60
rename INode to Node
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
607
diff
changeset
|
127 |
m_os << "node=" << NodeList::GetNode (nodeIndex)->GetId () << " "; |
389
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
128 |
Ipv4::InterfaceIndex interfaceIndex; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
129 |
context.Get (interfaceIndex); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
130 |
m_os << "interface=" << interfaceIndex << " "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
131 |
m_os << "pkt-uid=" << p.GetUid () << " "; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
132 |
PrintType (p); |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
133 |
m_os << std::endl; |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
134 |
} |
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
135 |
|
d8f84756cf21
split out AsciiTrace class from simple example
mathieu@mathieu.inria.fr
parents:
diff
changeset
|
136 |
}//namespace ns3 |