|
44 |
|
44 |
|
45 |
HwmpDoRfRegressionTest::HwmpDoRfRegressionTest () : TestCase ("HWMP target flags regression test"), |
45 |
HwmpDoRfRegressionTest::HwmpDoRfRegressionTest () : TestCase ("HWMP target flags regression test"), |
46 |
m_nodes (0), |
46 |
m_nodes (0), |
47 |
m_time (Seconds (5)) |
47 |
m_time (Seconds (5)), |
|
|
48 |
m_sentPktsCounterA (0), |
49 |
m_sentPktsCounterB (0), |
50 |
m_sentPktsCounterC (0) |
48 |
{ |
51 |
{ |
49 |
} |
52 |
} |
50 |
|
53 |
|
|
52 |
{ |
55 |
{ |
53 |
delete m_nodes; |
56 |
delete m_nodes; |
54 |
} |
57 |
} |
|
|
58 |
|
55 |
void |
59 |
void |
56 |
HwmpDoRfRegressionTest::DoRun () |
60 |
HwmpDoRfRegressionTest::DoRun () |
57 |
{ |
61 |
{ |
|
69 |
|
73 |
|
70 |
delete m_nodes, m_nodes = 0; |
74 |
delete m_nodes, m_nodes = 0; |
71 |
} |
75 |
} |
|
|
76 |
|
72 |
void |
77 |
void |
73 |
HwmpDoRfRegressionTest::CreateNodes () |
78 |
HwmpDoRfRegressionTest::CreateNodes () |
74 |
{ |
79 |
{ |
|
85 |
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); |
90 |
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel"); |
86 |
mobility.Install (*m_nodes); |
91 |
mobility.Install (*m_nodes); |
87 |
} |
92 |
} |
|
|
93 |
|
88 |
void |
94 |
void |
89 |
HwmpDoRfRegressionTest::InstallApplications () |
95 |
HwmpDoRfRegressionTest::InstallApplications () |
90 |
{ |
96 |
{ |
91 |
UdpEchoServerHelper echoServer (9); |
97 |
// server socket A |
92 |
ApplicationContainer serverApps = echoServer.Install (m_nodes->Get (0)); |
98 |
m_serverSocketA = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory")); |
93 |
serverApps.Start (Seconds (0.0)); |
99 |
m_serverSocketA->Bind (InetSocketAddress (Ipv4Address::GetAny (), 9)); |
94 |
serverApps.Stop (m_time); |
100 |
m_serverSocketA->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadServer, this)); |
95 |
UdpEchoClientHelper echoClient (m_interfaces.GetAddress (0), 9); |
101 |
|
96 |
echoClient.SetAttribute ("MaxPackets", UintegerValue (300)); |
102 |
// server socket B |
97 |
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0))); |
103 |
m_serverSocketB = Socket::CreateSocket (m_nodes->Get (3), TypeId::LookupByName ("ns3::UdpSocketFactory")); |
98 |
echoClient.SetAttribute ("PacketSize", UintegerValue (100)); |
104 |
m_serverSocketB->Bind (InetSocketAddress (Ipv4Address::GetAny (), 10)); |
99 |
//Install first client |
105 |
m_serverSocketB->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadServer, this)); |
100 |
ApplicationContainer clientApps = echoClient.Install (m_nodes->Get (1)); |
106 |
|
101 |
clientApps.Start (Seconds (2.2)); |
107 |
// client socket A |
102 |
clientApps.Stop (m_time); |
108 |
m_clientSocketA = Socket::CreateSocket (m_nodes->Get (1), TypeId::LookupByName ("ns3::UdpSocketFactory")); |
103 |
//Install second client |
109 |
m_clientSocketA->Bind (); |
104 |
clientApps = echoClient.Install (m_nodes->Get (2)); |
110 |
m_clientSocketA->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9)); |
105 |
clientApps.Start (Seconds (2.0)); |
111 |
m_clientSocketA->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadClient, this)); |
106 |
clientApps.Stop (m_time); |
112 |
Simulator::ScheduleWithContext (m_clientSocketA->GetNode ()->GetId (), Seconds (2.2), |
107 |
//Install second server and attach client to it: |
113 |
&HwmpDoRfRegressionTest::SendDataA, this, m_clientSocketA); |
108 |
UdpEchoServerHelper echoServer1 (10); |
114 |
|
109 |
serverApps = echoServer1.Install (m_nodes->Get (3)); |
115 |
// client socket B |
110 |
serverApps.Start (Seconds (0.0)); |
116 |
m_clientSocketB = Socket::CreateSocket (m_nodes->Get (2), TypeId::LookupByName ("ns3::UdpSocketFactory")); |
111 |
serverApps.Stop (m_time); |
117 |
m_clientSocketB->Bind (); |
112 |
UdpEchoClientHelper echoClient1 (m_interfaces.GetAddress (3), 10); |
118 |
m_clientSocketB->Connect (InetSocketAddress (m_interfaces.GetAddress (0), 9)); |
113 |
echoClient1.SetAttribute ("MaxPackets", UintegerValue (300)); |
119 |
m_clientSocketB->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadClient, this)); |
114 |
echoClient1.SetAttribute ("Interval", TimeValue (Seconds (1.0))); |
120 |
Simulator::ScheduleWithContext (m_clientSocketB->GetNode ()->GetId (), Seconds (2.0), |
115 |
echoClient1.SetAttribute ("PacketSize", UintegerValue (100)); |
121 |
&HwmpDoRfRegressionTest::SendDataB, this, m_clientSocketB); |
116 |
clientApps = echoClient1.Install (m_nodes->Get (0)); |
122 |
|
117 |
clientApps.Start (Seconds (2.4)); |
123 |
// client socket C |
118 |
clientApps.Stop (m_time); |
124 |
m_clientSocketB = Socket::CreateSocket (m_nodes->Get (0), TypeId::LookupByName ("ns3::UdpSocketFactory")); |
|
|
125 |
m_clientSocketB->Bind (); |
126 |
m_clientSocketB->Connect (InetSocketAddress (m_interfaces.GetAddress (3), 10)); |
127 |
m_clientSocketB->SetRecvCallback (MakeCallback (&HwmpDoRfRegressionTest::HandleReadClient, this)); |
128 |
Simulator::ScheduleWithContext (m_clientSocketB->GetNode ()->GetId (), Seconds (2.4), |
129 |
&HwmpDoRfRegressionTest::SendDataC, this, m_clientSocketB); |
119 |
} |
130 |
} |
|
|
131 |
|
120 |
void |
132 |
void |
121 |
HwmpDoRfRegressionTest::CreateDevices () |
133 |
HwmpDoRfRegressionTest::CreateDevices () |
122 |
{ |
134 |
{ |
|
160 |
} |
172 |
} |
161 |
} |
173 |
} |
162 |
|
174 |
|
|
|
175 |
void |
176 |
HwmpDoRfRegressionTest::SendDataA (Ptr<Socket> socket) |
177 |
{ |
178 |
if ((Simulator::Now () < m_time) && (m_sentPktsCounterA < 300)) |
179 |
{ |
180 |
socket->Send (Create<Packet> (100)); |
181 |
m_sentPktsCounterA ++; |
182 |
Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.0), |
183 |
&HwmpDoRfRegressionTest::SendDataA, this, socket); |
184 |
} |
185 |
} |
186 |
|
187 |
void |
188 |
HwmpDoRfRegressionTest::SendDataB (Ptr<Socket> socket) |
189 |
{ |
190 |
if ((Simulator::Now () < m_time) && (m_sentPktsCounterA < 300)) |
191 |
{ |
192 |
socket->Send (Create<Packet> (100)); |
193 |
m_sentPktsCounterB ++; |
194 |
Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.0), |
195 |
&HwmpDoRfRegressionTest::SendDataB, this, socket); |
196 |
} |
197 |
} |
198 |
|
199 |
void |
200 |
HwmpDoRfRegressionTest::SendDataC (Ptr<Socket> socket) |
201 |
{ |
202 |
if ((Simulator::Now () < m_time) && (m_sentPktsCounterA < 300)) |
203 |
{ |
204 |
socket->Send (Create<Packet> (100)); |
205 |
m_sentPktsCounterC ++; |
206 |
Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (1.0), |
207 |
&HwmpDoRfRegressionTest::SendDataC, this, socket); |
208 |
} |
209 |
} |
210 |
|
211 |
void |
212 |
HwmpDoRfRegressionTest::HandleReadServer (Ptr<Socket> socket) |
213 |
{ |
214 |
Ptr<Packet> packet; |
215 |
Address from; |
216 |
while ((packet = socket->RecvFrom (from))) |
217 |
{ |
218 |
packet->RemoveAllPacketTags (); |
219 |
packet->RemoveAllByteTags (); |
220 |
|
221 |
socket->SendTo (packet, 0, from); |
222 |
} |
223 |
} |
224 |
|
225 |
void |
226 |
HwmpDoRfRegressionTest::HandleReadClient (Ptr<Socket> socket) |
227 |
{ |
228 |
Ptr<Packet> packet; |
229 |
Address from; |
230 |
while ((packet = socket->RecvFrom (from))) |
231 |
{ |
232 |
} |
233 |
} |