LEFT | RIGHT |
(no file at all) | |
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ | 1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
2 /* | 2 /* |
3 * Copyright (c) 2007 Georgia Tech Research Corporation | 3 * Copyright (c) 2007 Georgia Tech Research Corporation |
4 *· | 4 *· |
5 * This program is free software; you can redistribute it and/or modify | 5 * This program is free software; you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 2 as | 6 * it under the terms of the GNU General Public License version 2 as |
7 * published by the Free Software Foundation; | 7 * published by the Free Software Foundation; |
8 * | 8 * |
9 * This program is distributed in the hope that it will be useful, | 9 * This program is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 10 matching lines...) Expand all Loading... |
21 * This is the test code for udp-socket-impl.cc, it was moved out of udp-socket-
impl.cc to· | 21 * This is the test code for udp-socket-impl.cc, it was moved out of udp-socket-
impl.cc to· |
22 * be in an independent file for clarity purposes. | 22 * be in an independent file for clarity purposes. |
23 */ | 23 */ |
24 | 24 |
25 #include "ns3/test.h" | 25 #include "ns3/test.h" |
26 #include "ns3/socket-factory.h" | 26 #include "ns3/socket-factory.h" |
27 #include "ns3/udp-socket-factory.h" | 27 #include "ns3/udp-socket-factory.h" |
28 #include "ns3/simulator.h" | 28 #include "ns3/simulator.h" |
29 #include "ns3/simple-channel.h" | 29 #include "ns3/simple-channel.h" |
30 #include "ns3/simple-net-device.h" | 30 #include "ns3/simple-net-device.h" |
| 31 #include "ns3/simple-net-device-helper.h" |
31 #include "ns3/drop-tail-queue.h" | 32 #include "ns3/drop-tail-queue.h" |
32 #include "ns3/socket.h" | 33 #include "ns3/socket.h" |
33 | 34 |
| 35 #include "ns3/boolean.h" |
34 #include "ns3/log.h" | 36 #include "ns3/log.h" |
35 #include "ns3/node.h" | 37 #include "ns3/node.h" |
36 #include "ns3/inet-socket-address.h" | 38 #include "ns3/inet-socket-address.h" |
37 #include "ns3/inet6-socket-address.h" | 39 #include "ns3/inet6-socket-address.h" |
| 40 #include "ns3/internet-stack-helper.h" |
38 | 41 |
39 #include "ns3/arp-l3-protocol.h" | 42 #include "ns3/arp-l3-protocol.h" |
40 #include "ns3/ipv4-l3-protocol.h" | 43 #include "ns3/ipv4-l3-protocol.h" |
41 #include "ns3/ipv6-l3-protocol.h" | 44 #include "ns3/ipv6-l3-protocol.h" |
42 #include "ns3/icmpv4-l4-protocol.h" | 45 #include "ns3/icmpv4-l4-protocol.h" |
43 #include "ns3/icmpv6-l4-protocol.h" | 46 #include "ns3/icmpv6-l4-protocol.h" |
44 #include "ns3/udp-l4-protocol.h" | 47 #include "ns3/udp-l4-protocol.h" |
45 #include "ns3/tcp-l4-protocol.h" | 48 #include "ns3/tcp-l4-protocol.h" |
46 #include "ns3/ipv4-list-routing.h" | 49 #include "ns3/ipv4-list-routing.h" |
47 #include "ns3/ipv4-static-routing.h" | 50 #include "ns3/ipv4-static-routing.h" |
48 #include "ns3/ipv6-list-routing.h" | 51 #include "ns3/ipv6-list-routing.h" |
49 #include "ns3/ipv6-static-routing.h" | 52 #include "ns3/ipv6-static-routing.h" |
| 53 #include "ns3/ipv6-address-helper.h" |
50 | 54 |
51 #include <string> | 55 #include <string> |
52 #include <limits> | 56 #include <limits> |
53 | 57 |
54 using namespace ns3; | 58 using namespace ns3; |
55 | |
56 static void | |
57 AddInternetStack (Ptr<Node> node) | |
58 { | |
59 //ARP | |
60 Ptr<ArpL3Protocol> arp = CreateObject<ArpL3Protocol> (); | |
61 node->AggregateObject (arp); | |
62 //IPV4 | |
63 Ptr<Ipv4L3Protocol> ipv4 = CreateObject<Ipv4L3Protocol> (); | |
64 //Routing for Ipv4 | |
65 Ptr<Ipv4ListRouting> ipv4Routing = CreateObject<Ipv4ListRouting> (); | |
66 ipv4->SetRoutingProtocol (ipv4Routing); | |
67 Ptr<Ipv4StaticRouting> ipv4staticRouting = CreateObject<Ipv4StaticRouting> (); | |
68 ipv4Routing->AddRoutingProtocol (ipv4staticRouting, 0); | |
69 node->AggregateObject (ipv4); | |
70 //ICMP | |
71 Ptr<Icmpv4L4Protocol> icmp = CreateObject<Icmpv4L4Protocol> (); | |
72 node->AggregateObject (icmp); | |
73 //UDP | |
74 Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> (); | |
75 node->AggregateObject (udp); | |
76 //TCP | |
77 Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> (); | |
78 node->AggregateObject (tcp); | |
79 } | |
80 | |
81 static void | |
82 AddInternetStack6 (Ptr<Node> node) | |
83 { | |
84 //IPV6 | |
85 Ptr<Ipv6L3Protocol> ipv6 = CreateObject<Ipv6L3Protocol> (); | |
86 //Routing for Ipv6 | |
87 Ptr<Ipv6ListRouting> ipv6Routing = CreateObject<Ipv6ListRouting> (); | |
88 ipv6->SetRoutingProtocol (ipv6Routing); | |
89 Ptr<Ipv6StaticRouting> ipv6staticRouting = CreateObject<Ipv6StaticRouting> (); | |
90 ipv6Routing->AddRoutingProtocol (ipv6staticRouting, 0); | |
91 node->AggregateObject (ipv6); | |
92 //ICMP | |
93 Ptr<Icmpv6L4Protocol> icmp = CreateObject<Icmpv6L4Protocol> (); | |
94 node->AggregateObject (icmp); | |
95 //Ipv6 Extensions | |
96 ipv6->RegisterExtensions (); | |
97 ipv6->RegisterOptions (); | |
98 //UDP | |
99 Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> (); | |
100 node->AggregateObject (udp); | |
101 //TCP | |
102 Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> (); | |
103 node->AggregateObject (tcp); | |
104 } | |
105 | 59 |
106 | 60 |
107 class UdpSocketLoopbackTest : public TestCase | 61 class UdpSocketLoopbackTest : public TestCase |
108 { | 62 { |
109 public: | 63 public: |
110 UdpSocketLoopbackTest (); | 64 UdpSocketLoopbackTest (); |
111 virtual void DoRun (void); | 65 virtual void DoRun (void); |
112 | 66 |
113 void ReceivePkt (Ptr<Socket> socket); | 67 void ReceivePkt (Ptr<Socket> socket); |
114 Ptr<Packet> m_receivedPacket; | 68 Ptr<Packet> m_receivedPacket; |
115 }; | 69 }; |
116 | 70 |
117 UdpSocketLoopbackTest::UdpSocketLoopbackTest () | 71 UdpSocketLoopbackTest::UdpSocketLoopbackTest () |
118 : TestCase ("UDP loopback test")· | 72 : TestCase ("UDP loopback test")· |
119 { | 73 { |
120 } | 74 } |
121 | 75 |
122 void UdpSocketLoopbackTest::ReceivePkt (Ptr<Socket> socket) | 76 void UdpSocketLoopbackTest::ReceivePkt (Ptr<Socket> socket) |
123 { | 77 { |
124 uint32_t availableData; | 78 uint32_t availableData; |
125 availableData = socket->GetRxAvailable (); | 79 availableData = socket->GetRxAvailable (); |
126 m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0); | 80 m_receivedPacket = socket->Recv (std::numeric_limits<uint32_t>::max (), 0); |
127 NS_ASSERT (availableData == m_receivedPacket->GetSize ()); | 81 NS_ASSERT (availableData == m_receivedPacket->GetSize ()); |
128 } | 82 } |
129 | 83 |
130 void | 84 void |
131 UdpSocketLoopbackTest::DoRun () | 85 UdpSocketLoopbackTest::DoRun () |
132 { | 86 { |
133 Ptr<Node> rxNode = CreateObject<Node> (); | 87 Ptr<Node> rxNode = CreateObject<Node> (); |
134 AddInternetStack (rxNode); | 88 InternetStackHelper internet; |
| 89 internet.Install (rxNode); |
135 | 90 |
136 Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> (); | 91 Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> (); |
137 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); | 92 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); |
138 rxSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), 80)); | 93 rxSocket->Bind (InetSocketAddress (Ipv4Address::GetAny (), 80)); |
139 rxSocket->SetRecvCallback (MakeCallback (&UdpSocketLoopbackTest::ReceivePkt, t
his)); | 94 rxSocket->SetRecvCallback (MakeCallback (&UdpSocketLoopbackTest::ReceivePkt, t
his)); |
140 | 95 |
141 Ptr<Socket> txSocket = rxSocketFactory->CreateSocket (); | 96 Ptr<Socket> txSocket = rxSocketFactory->CreateSocket (); |
142 txSocket->SendTo (Create<Packet> (246), 0, InetSocketAddress ("127.0.0.1", 80)
); | 97 txSocket->SendTo (Create<Packet> (246), 0, InetSocketAddress ("127.0.0.1", 80)
); |
143 Simulator::Run (); | 98 Simulator::Run (); |
144 Simulator::Destroy (); | 99 Simulator::Destroy (); |
(...skipping 23 matching lines...) Expand all Loading... |
168 NS_ASSERT (availableData == m_receivedPacket->GetSize ()); | 123 NS_ASSERT (availableData == m_receivedPacket->GetSize ()); |
169 //cast availableData to void, to suppress 'availableData' set but not used | 124 //cast availableData to void, to suppress 'availableData' set but not used |
170 //compiler warning | 125 //compiler warning |
171 (void) availableData; | 126 (void) availableData; |
172 } | 127 } |
173 | 128 |
174 void | 129 void |
175 Udp6SocketLoopbackTest::DoRun () | 130 Udp6SocketLoopbackTest::DoRun () |
176 { | 131 { |
177 Ptr<Node> rxNode = CreateObject<Node> (); | 132 Ptr<Node> rxNode = CreateObject<Node> (); |
178 AddInternetStack6 (rxNode); | 133 InternetStackHelper internet; |
| 134 internet.Install (rxNode); |
179 | 135 |
180 Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> (); | 136 Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> (); |
181 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); | 137 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); |
182 rxSocket->Bind (Inet6SocketAddress (Ipv6Address::GetAny (), 80)); | 138 rxSocket->Bind (Inet6SocketAddress (Ipv6Address::GetAny (), 80)); |
183 rxSocket->SetRecvCallback (MakeCallback (&Udp6SocketLoopbackTest::ReceivePkt,
this)); | 139 rxSocket->SetRecvCallback (MakeCallback (&Udp6SocketLoopbackTest::ReceivePkt,
this)); |
184 | 140 |
185 Ptr<Socket> txSocket = rxSocketFactory->CreateSocket (); | 141 Ptr<Socket> txSocket = rxSocketFactory->CreateSocket (); |
186 txSocket->SendTo (Create<Packet> (246), 0, Inet6SocketAddress ("::1", 80)); | 142 txSocket->SendTo (Create<Packet> (246), 0, Inet6SocketAddress ("::1", 80)); |
187 Simulator::Run (); | 143 Simulator::Run (); |
188 Simulator::Destroy (); | 144 Simulator::Destroy (); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 Simulator::Run (); | 211 Simulator::Run (); |
256 } | 212 } |
257 | 213 |
258 void | 214 void |
259 UdpSocketImplTest::DoRun (void) | 215 UdpSocketImplTest::DoRun (void) |
260 { | 216 { |
261 // Create topology | 217 // Create topology |
262 | 218 |
263 // Receiver Node | 219 // Receiver Node |
264 Ptr<Node> rxNode = CreateObject<Node> (); | 220 Ptr<Node> rxNode = CreateObject<Node> (); |
265 AddInternetStack (rxNode); | |
266 Ptr<SimpleNetDevice> rxDev1, rxDev2; | |
267 { // first interface | |
268 rxDev1 = CreateObject<SimpleNetDevice> (); | |
269 rxDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); | |
270 rxNode->AddDevice (rxDev1); | |
271 Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); | |
272 uint32_t netdev_idx = ipv4->AddInterface (rxDev1); | |
273 Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.0.1
"), Ipv4Mask (0xffff0000U)); | |
274 ipv4->AddAddress (netdev_idx, ipv4Addr); | |
275 ipv4->SetUp (netdev_idx); | |
276 } | |
277 | |
278 { // second interface | |
279 rxDev2 = CreateObject<SimpleNetDevice> (); | |
280 rxDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); | |
281 rxNode->AddDevice (rxDev2); | |
282 Ptr<Ipv4> ipv4 = rxNode->GetObject<Ipv4> (); | |
283 uint32_t netdev_idx = ipv4->AddInterface (rxDev2); | |
284 Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.1.1
"), Ipv4Mask (0xffff0000U)); | |
285 ipv4->AddAddress (netdev_idx, ipv4Addr); | |
286 ipv4->SetUp (netdev_idx); | |
287 } | |
288 | |
289 // Sender Node | 221 // Sender Node |
290 Ptr<Node> txNode = CreateObject<Node> (); | 222 Ptr<Node> txNode = CreateObject<Node> (); |
291 AddInternetStack (txNode); | 223 |
292 Ptr<SimpleNetDevice> txDev1; | 224 NodeContainer nodes (rxNode, txNode); |
293 { | 225 |
294 txDev1 = CreateObject<SimpleNetDevice> (); | 226 SimpleNetDeviceHelper helperChannel1; |
295 txDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); | 227 helperChannel1.SetNetDevicePointToPointMode (true); |
296 txNode->AddDevice (txDev1); | 228 NetDeviceContainer net1 = helperChannel1.Install (nodes); |
297 Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> (); | 229 |
298 uint32_t netdev_idx = ipv4->AddInterface (txDev1); | 230 SimpleNetDeviceHelper helperChannel2; |
299 Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.0.2
"), Ipv4Mask (0xffff0000U)); | 231 helperChannel2.SetNetDevicePointToPointMode (true); |
300 ipv4->AddAddress (netdev_idx, ipv4Addr); | 232 NetDeviceContainer net2 = helperChannel2.Install (nodes); |
301 ipv4->SetUp (netdev_idx); | 233 |
302 } | 234 InternetStackHelper internet; |
303 Ptr<SimpleNetDevice> txDev2; | 235 internet.Install (nodes); |
304 { | 236 |
305 txDev2 = CreateObject<SimpleNetDevice> (); | 237 Ptr<Ipv4> ipv4; |
306 txDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); | 238 uint32_t netdev_idx; |
307 txNode->AddDevice (txDev2); | 239 Ipv4InterfaceAddress ipv4Addr; |
308 Ptr<Ipv4> ipv4 = txNode->GetObject<Ipv4> (); | 240 |
309 uint32_t netdev_idx = ipv4->AddInterface (txDev2); | 241 // Receiver Node |
310 Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.1.2
"), Ipv4Mask (0xffff0000U)); | 242 ipv4 = rxNode->GetObject<Ipv4> (); |
311 ipv4->AddAddress (netdev_idx, ipv4Addr); | 243 netdev_idx = ipv4->AddInterface (net1.Get (0)); |
312 ipv4->SetUp (netdev_idx); | 244 ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.0.1"), Ipv4Mask (0xffff000
0U)); |
313 } | 245 ipv4->AddAddress (netdev_idx, ipv4Addr); |
314 | 246 ipv4->SetUp (netdev_idx); |
315 // link the two nodes | 247 |
316 Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> (); | 248 netdev_idx = ipv4->AddInterface (net2.Get (0)); |
317 rxDev1->SetChannel (channel1); | 249 ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.1.1"), Ipv4Mask (0xffff000
0U)); |
318 txDev1->SetChannel (channel1); | 250 ipv4->AddAddress (netdev_idx, ipv4Addr); |
319 | 251 ipv4->SetUp (netdev_idx); |
320 Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> (); | 252 |
321 rxDev2->SetChannel (channel2); | 253 // Sender Node |
322 txDev2->SetChannel (channel2); | 254 ipv4 = txNode->GetObject<Ipv4> (); |
323 | 255 netdev_idx = ipv4->AddInterface (net1.Get (1)); |
| 256 ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.0.2"), Ipv4Mask (0xffff000
0U)); |
| 257 ipv4->AddAddress (netdev_idx, ipv4Addr); |
| 258 ipv4->SetUp (netdev_idx); |
| 259 |
| 260 netdev_idx = ipv4->AddInterface (net2.Get (1)); |
| 261 ipv4Addr = Ipv4InterfaceAddress (Ipv4Address ("10.0.1.2"), Ipv4Mask (0xffff000
0U)); |
| 262 ipv4->AddAddress (netdev_idx, ipv4Addr); |
| 263 ipv4->SetUp (netdev_idx); |
324 | 264 |
325 // Create the UDP sockets | 265 // Create the UDP sockets |
326 Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> (); | 266 Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> (); |
327 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); | 267 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); |
328 NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.0
.1"), 1234)), 0, "trivial"); | 268 NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (InetSocketAddress (Ipv4Address ("10.0.0
.1"), 1234)), 0, "trivial"); |
329 rxSocket->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt, this)
); | 269 rxSocket->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt, this)
); |
330 | 270 |
331 Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket (); | 271 Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket (); |
332 rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt2, thi
s)); | 272 rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt2, thi
s)); |
333 NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("10.0.
1.1"), 1234)), 0, "trivial"); | 273 NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("10.0.
1.1"), 1234)), 0, "trivial"); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 | 307 |
368 SendData (txSocket, "255.255.255.255"); | 308 SendData (txSocket, "255.255.255.255"); |
369 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial"); | 309 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial"); |
370 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "trivial"); | 310 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "trivial"); |
371 | 311 |
372 m_receivedPacket = 0; | 312 m_receivedPacket = 0; |
373 m_receivedPacket2 = 0; | 313 m_receivedPacket2 = 0; |
374 | 314 |
375 // Simple Link-local multicast test | 315 // Simple Link-local multicast test |
376 | 316 |
377 txSocket->BindToNetDevice (txDev1); | 317 txSocket->BindToNetDevice (net1.Get (1)); |
378 SendData (txSocket, "224.0.0.9"); | 318 SendData (txSocket, "224.0.0.9"); |
379 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "first socket should n
ot receive it (it is bound specifically to the second interface's address"); | 319 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "first socket should n
ot receive it (it is bound specifically to the second interface's address"); |
380 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "recv2: 224.0.0.9")
; | 320 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "recv2: 224.0.0.9")
; |
381 | 321 |
382 m_receivedPacket->RemoveAllByteTags (); | 322 m_receivedPacket->RemoveAllByteTags (); |
383 m_receivedPacket2->RemoveAllByteTags (); | 323 m_receivedPacket2->RemoveAllByteTags (); |
384 | 324 |
385 Simulator::Destroy (); | 325 Simulator::Destroy (); |
386 | 326 |
387 } | 327 } |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 Simulator::Run (); | 398 Simulator::Run (); |
459 } | 399 } |
460 | 400 |
461 void | 401 void |
462 Udp6SocketImplTest::DoRun (void) | 402 Udp6SocketImplTest::DoRun (void) |
463 { | 403 { |
464 // Create topology | 404 // Create topology |
465 | 405 |
466 // Receiver Node | 406 // Receiver Node |
467 Ptr<Node> rxNode = CreateObject<Node> (); | 407 Ptr<Node> rxNode = CreateObject<Node> (); |
468 AddInternetStack6 (rxNode); | |
469 Ptr<SimpleNetDevice> rxDev1, rxDev2; | |
470 { // first interface | |
471 rxDev1 = CreateObject<SimpleNetDevice> (); | |
472 rxDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); | |
473 rxNode->AddDevice (rxDev1); | |
474 Ptr<Ipv6> ipv6 = rxNode->GetObject<Ipv6> (); | |
475 uint32_t netdev_idx = ipv6->AddInterface (rxDev1); | |
476 Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:010
0::1"), Ipv6Prefix (64)); | |
477 ipv6->AddAddress (netdev_idx, ipv6Addr); | |
478 ipv6->SetUp (netdev_idx); | |
479 } | |
480 { // second interface | |
481 rxDev2 = CreateObject<SimpleNetDevice> (); | |
482 rxDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); | |
483 rxNode->AddDevice (rxDev2); | |
484 Ptr<Ipv6> ipv6 = rxNode->GetObject<Ipv6> (); | |
485 uint32_t netdev_idx = ipv6->AddInterface (rxDev2); | |
486 Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:010
0:1::1"), Ipv6Prefix (64)); | |
487 ipv6->AddAddress (netdev_idx, ipv6Addr); | |
488 ipv6->SetUp (netdev_idx); | |
489 } | |
490 | |
491 // Sender Node | 408 // Sender Node |
492 Ptr<Node> txNode = CreateObject<Node> (); | 409 Ptr<Node> txNode = CreateObject<Node> (); |
493 AddInternetStack6 (txNode); | 410 |
494 Ptr<SimpleNetDevice> txDev1; | 411 NodeContainer nodes (rxNode, txNode); |
495 { | 412 |
496 txDev1 = CreateObject<SimpleNetDevice> (); | 413 SimpleNetDeviceHelper helperChannel1; |
497 txDev1->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); | 414 helperChannel1.SetNetDevicePointToPointMode (true); |
498 txNode->AddDevice (txDev1); | 415 NetDeviceContainer net1 = helperChannel1.Install (nodes); |
499 Ptr<Ipv6> ipv6 = txNode->GetObject<Ipv6> (); | 416 |
500 uint32_t netdev_idx = ipv6->AddInterface (txDev1); | 417 SimpleNetDeviceHelper helperChannel2; |
501 Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:010
0::2"), Ipv6Prefix (64)); | 418 helperChannel2.SetNetDevicePointToPointMode (true); |
502 ipv6->AddAddress (netdev_idx, ipv6Addr); | 419 NetDeviceContainer net2 = helperChannel2.Install (nodes); |
503 ipv6->SetUp (netdev_idx); | 420 |
504 } | 421 InternetStackHelper internetv6; |
505 Ptr<SimpleNetDevice> txDev2; | 422 internetv6.Install (nodes); |
506 { | 423 |
507 txDev2 = CreateObject<SimpleNetDevice> (); | 424 txNode->GetObject<Icmpv6L4Protocol> ()->SetAttribute ("DAD", BooleanValue (fal
se)); |
508 txDev2->SetAddress (Mac48Address::ConvertFrom (Mac48Address::Allocate ())); | 425 rxNode->GetObject<Icmpv6L4Protocol> ()->SetAttribute ("DAD", BooleanValue (fal
se)); |
509 txNode->AddDevice (txDev2); | 426 |
510 Ptr<Ipv6> ipv6 = txNode->GetObject<Ipv6> (); | 427 Ipv6AddressHelper ipv6helper; |
511 uint32_t netdev_idx = ipv6->AddInterface (txDev2); | 428 Ipv6InterfaceContainer iic1 = ipv6helper.AssignWithoutAddress (net1); |
512 Ipv6InterfaceAddress ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:010
0:1::2"), Ipv6Prefix (64)); | 429 Ipv6InterfaceContainer iic2 = ipv6helper.AssignWithoutAddress (net2); |
513 ipv6->AddAddress (netdev_idx, ipv6Addr); | 430 |
514 ipv6->SetUp (netdev_idx); | 431 Ptr<NetDevice> device; |
515 } | 432 Ptr<Ipv6> ipv6; |
516 | 433 int32_t ifIndex; |
517 // link the two nodes | 434 Ipv6InterfaceAddress ipv6Addr; |
518 Ptr<SimpleChannel> channel1 = CreateObject<SimpleChannel> (); | 435 |
519 rxDev1->SetChannel (channel1); | 436 ipv6 = rxNode->GetObject<Ipv6> (); |
520 txDev1->SetChannel (channel1); | 437 device = net1.Get (0); |
521 | 438 ifIndex = ipv6->GetInterfaceForDevice (device); |
522 Ptr<SimpleChannel> channel2 = CreateObject<SimpleChannel> (); | 439 ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::1"), Ipv6Prefix (64)
); |
523 rxDev2->SetChannel (channel2); | 440 ipv6->AddAddress (ifIndex, ipv6Addr); |
524 txDev2->SetChannel (channel2); | 441 ipv6->SetUp (ifIndex); |
525 | 442 |
| 443 device = net2.Get (0); |
| 444 ifIndex = ipv6->GetInterfaceForDevice (device); |
| 445 ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100:1::1"), Ipv6Prefix (6
4)); |
| 446 ipv6->AddAddress (ifIndex, ipv6Addr); |
| 447 ipv6->SetUp (ifIndex); |
| 448 |
| 449 ipv6 = txNode->GetObject<Ipv6> (); |
| 450 device = net1.Get (1); |
| 451 ifIndex = ipv6->GetInterfaceForDevice (device); |
| 452 ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100::2"), Ipv6Prefix (64)
); |
| 453 ipv6->AddAddress (ifIndex, ipv6Addr); |
| 454 ipv6->SetUp (ifIndex); |
| 455 |
| 456 device = net2.Get (1); |
| 457 ifIndex = ipv6->GetInterfaceForDevice (device); |
| 458 ipv6Addr = Ipv6InterfaceAddress (Ipv6Address ("2001:0100:1::2"), Ipv6Prefix (6
4)); |
| 459 ipv6->AddAddress (ifIndex, ipv6Addr); |
| 460 ipv6->SetUp (ifIndex); |
526 | 461 |
527 // Create the UDP sockets | 462 // Create the UDP sockets |
528 Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> (); | 463 Ptr<SocketFactory> rxSocketFactory = rxNode->GetObject<UdpSocketFactory> (); |
529 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); | 464 Ptr<Socket> rxSocket = rxSocketFactory->CreateSocket (); |
530 NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("2001:
0100::1"), 1234)), 0, "trivial"); | 465 NS_TEST_EXPECT_MSG_EQ (rxSocket->Bind (Inet6SocketAddress (Ipv6Address ("2001:
0100::1"), 1234)), 0, "trivial"); |
531 rxSocket->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt, this
)); | 466 rxSocket->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt, this
)); |
532 | 467 |
533 Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket (); | 468 Ptr<Socket> rxSocket2 = rxSocketFactory->CreateSocket (); |
534 rxSocket2->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt2, th
is)); | 469 rxSocket2->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt2, th
is)); |
535 NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (Inet6SocketAddress (Ipv6Address ("2001
:0100:1::1"), 1234)), 0, "trivial"); | 470 NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (Inet6SocketAddress (Ipv6Address ("2001
:0100:1::1"), 1234)), 0, "trivial"); |
(...skipping 14 matching lines...) Expand all Loading... |
550 // Simple Link-local multicast test | 485 // Simple Link-local multicast test |
551 | 486 |
552 // When receiving broadcast packets, all sockets sockets bound to | 487 // When receiving broadcast packets, all sockets sockets bound to |
553 // the address/port should receive a copy of the same packet -- if | 488 // the address/port should receive a copy of the same packet -- if |
554 // the socket address matches. | 489 // the socket address matches. |
555 rxSocket2->Dispose (); | 490 rxSocket2->Dispose (); |
556 rxSocket2 = rxSocketFactory->CreateSocket (); | 491 rxSocket2 = rxSocketFactory->CreateSocket (); |
557 rxSocket2->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt2, th
is)); | 492 rxSocket2->SetRecvCallback (MakeCallback (&Udp6SocketImplTest::ReceivePkt2, th
is)); |
558 NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (Inet6SocketAddress (Ipv6Address ("::")
, 1234)), 0, "trivial"); | 493 NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (Inet6SocketAddress (Ipv6Address ("::")
, 1234)), 0, "trivial"); |
559 | 494 |
560 txSocket->BindToNetDevice (txDev1); | 495 txSocket->BindToNetDevice (net1.Get (1)); |
561 SendData (txSocket, "ff02::1"); | 496 SendData (txSocket, "ff02::1"); |
562 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "first socket should n
ot receive it (it is bound specifically to the second interface's address"); | 497 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 0, "first socket should n
ot receive it (it is bound specifically to the second interface's address"); |
563 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "recv2: ff02::1"); | 498 NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "recv2: ff02::1"); |
564 | 499 |
565 m_receivedPacket->RemoveAllByteTags (); | 500 m_receivedPacket->RemoveAllByteTags (); |
566 m_receivedPacket2->RemoveAllByteTags (); | 501 m_receivedPacket2->RemoveAllByteTags (); |
567 | 502 |
568 Simulator::Destroy (); | 503 Simulator::Destroy (); |
569 | 504 |
570 } | 505 } |
571 | 506 |
572 | 507 |
573 //----------------------------------------------------------------------------- | 508 //----------------------------------------------------------------------------- |
574 class UdpTestSuite : public TestSuite | 509 class UdpTestSuite : public TestSuite |
575 { | 510 { |
576 public: | 511 public: |
577 UdpTestSuite () : TestSuite ("udp", UNIT) | 512 UdpTestSuite () : TestSuite ("udp", UNIT) |
578 { | 513 { |
579 AddTestCase (new UdpSocketImplTest, TestCase::QUICK); | 514 AddTestCase (new UdpSocketImplTest, TestCase::QUICK); |
580 AddTestCase (new UdpSocketLoopbackTest, TestCase::QUICK); | 515 AddTestCase (new UdpSocketLoopbackTest, TestCase::QUICK); |
581 AddTestCase (new Udp6SocketImplTest, TestCase::QUICK); | 516 AddTestCase (new Udp6SocketImplTest, TestCase::QUICK); |
582 AddTestCase (new Udp6SocketLoopbackTest, TestCase::QUICK); | 517 AddTestCase (new Udp6SocketLoopbackTest, TestCase::QUICK); |
583 } | 518 } |
584 } g_udpTestSuite; | 519 } g_udpTestSuite; |
LEFT | RIGHT |