|
|
| 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 |
} |