author | Tom Henderson <tomh@tomh.org> |
Sun, 30 Mar 2008 14:04:57 -0700 | |
changeset 2798 | 143e2e1c5167 |
parent 2602 | d9262bff6df2 |
child 2800 | b3e87b8fa9d2 |
permissions | -rw-r--r-- |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
2 |
/* |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
3 |
* This program is free software; you can redistribute it and/or modify |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
4 |
* it under the terms of the GNU General Public License version 2 as |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
5 |
* published by the Free Software Foundation; |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
6 |
* |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
7 |
* This program is distributed in the hope that it will be useful, |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
8 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
9 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
10 |
* GNU General Public License for more details. |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
11 |
* |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
12 |
* You should have received a copy of the GNU General Public License |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
13 |
* along with this program; if not, write to the Free Software |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
14 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
15 |
*/ |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
16 |
|
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
17 |
// Network topology |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
18 |
// |
1433
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
19 |
// Lan1 |
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
20 |
// =========== |
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
21 |
// | | | |
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
22 |
// n0 n1 n2 n3 n4 |
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
23 |
// | | | |
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
24 |
// =========== |
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
25 |
// Lan0 |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
26 |
// |
1433
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
27 |
// - Multicast source is at node n0; |
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
28 |
// - Multicast forwarded by node n2 onto LAN1; |
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
29 |
// - Nodes n0, n1, n2, n3, and n4 receive the multicast frame. |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
30 |
// - Node n4 listens for the data |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
31 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
32 |
#include "ns3/core-module.h" |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
33 |
#include "ns3/helper-module.h" |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
34 |
#include "ns3/simulator-module.h" |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
35 |
#include "ns3/ascii-trace.h" |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
36 |
#include "ns3/pcap-trace.h" |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
37 |
|
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
38 |
|
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
39 |
using namespace ns3; |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
40 |
|
1504
36ecc970ba96
checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents:
1501
diff
changeset
|
41 |
NS_LOG_COMPONENT_DEFINE ("CsmaMulticastExample"); |
1429
31cb0668defd
debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents:
1428
diff
changeset
|
42 |
|
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
43 |
int |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
44 |
main (int argc, char *argv[]) |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
45 |
{ |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
46 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
47 |
// Users may find it convenient to turn on explicit debugging |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
48 |
// for selected modules; the below lines suggest how to do this |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
49 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
50 |
// LogComponentEnable ("CsmaMulticastExample", LOG_LEVEL_INFO); |
1433
a6fb891b59fd
cleanup. more complex multicast example
Craig Dowell <craigdo@ee.washington.edu>
parents:
1432
diff
changeset
|
51 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
52 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
53 |
// Set up default values for the simulation. |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
54 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
55 |
// Select Ethernet II-style encapsulation (no LLC/Snap header) |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
56 |
Config::SetDefault ("ns3::CsmaNetDevice::EncapsulationMode", String ("IpArp")); |
2533
80cdc3eec057
do not use Queue::CreateDefault
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2502
diff
changeset
|
57 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
58 |
// Allow the user to override any of the defaults at |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
59 |
// run-time, via command-line arguments |
2575
1aae382e65e2
rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2533
diff
changeset
|
60 |
CommandLine cmd; |
1aae382e65e2
rewrite CommandLine to not handle DefaultValues anymore.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2533
diff
changeset
|
61 |
cmd.Parse (argc, argv); |
1432
3aef7d7a71c2
more multicast plumbing
Craig Dowell <craigdo@ee.washington.edu>
parents:
1430
diff
changeset
|
62 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
63 |
NS_LOG_INFO ("Create nodes."); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
64 |
NodeContainer c; |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
65 |
c.Create (5); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
66 |
// We will later want two subcontainers of these nodes, for the two LANs |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
67 |
NodeContainer c0 = NodeContainer (c.Get (0), c.Get (1), c.Get (2)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
68 |
NodeContainer c1 = NodeContainer (c.Get (2), c.Get (3), c.Get (4)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
69 |
|
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
70 |
NS_LOG_INFO ("Build Topology."); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
71 |
CsmaHelper csma; |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
72 |
csma.SetChannelParameter ("BitRate", DataRate (5000000)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
73 |
csma.SetChannelParameter ("Delay", MilliSeconds (2)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
74 |
|
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
75 |
// We will use these NetDevice containers later, for IP addressing |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
76 |
NetDeviceContainer nd0 = csma.Build (c0); // First LAN |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
77 |
NetDeviceContainer nd1 = csma.Build (c1); // Second LAN |
1440
c77745b2731c
add ipv4 methods, remove source multicast route requirement, fix udp socket source address prob
Craig Dowell <craigdo@ee.washington.edu>
parents:
1437
diff
changeset
|
78 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
79 |
NS_LOG_INFO ("Add IP Stack."); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
80 |
InternetStackHelper internet; |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
81 |
internet.Build (c0); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
82 |
internet.Build (c1); |
1429
31cb0668defd
debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents:
1428
diff
changeset
|
83 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
84 |
NS_LOG_INFO ("Assign IP Addresses."); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
85 |
Ipv4AddressHelper ipv4Addr; |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
86 |
ipv4Addr.SetBase ("10.1.1.0", "255.255.255.0"); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
87 |
ipv4Addr.Allocate (nd0); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
88 |
ipv4Addr.SetBase ("10.1.2.0", "255.255.255.0"); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
89 |
ipv4Addr.Allocate (nd1); |
1436
9f9fe7919c89
Silliness for optimized version
Craig Dowell <craigdo@ee.washington.edu>
parents:
1435
diff
changeset
|
90 |
|
1504
36ecc970ba96
checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents:
1501
diff
changeset
|
91 |
NS_LOG_INFO ("Configure multicasting."); |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
92 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
93 |
// Now we can configure multicasting. As described above, the multicast |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
94 |
// source is at node zero, which we assigned the IP address of 10.1.1.1 |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
95 |
// earlier. We need to define a multicast group to send packets to. This |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
96 |
// can be any multicast address from 224.0.0.0 through 239.255.255.255 |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
97 |
// (avoiding the reserved routing protocol addresses). |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
98 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
99 |
|
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
100 |
Ipv4Address multicastSource ("10.1.1.1"); |
1442
bb5cf98c0c64
real multicast enet addr, more source routes, default multicast route
Craig Dowell <craigdo@ee.washington.edu>
parents:
1440
diff
changeset
|
101 |
Ipv4Address multicastGroup ("225.1.2.4"); |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
102 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
103 |
// Now, we will set up multicast routing. We need to do three things: |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
104 |
// 1) Configure a (static) multicast route on node n2 |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
105 |
// 2) Set up a default multicast route on the sender n0 |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
106 |
// 3) Have node n4 join the multicast group |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
107 |
// We have a helper that can help us with static multicast |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
108 |
StaticMulticastRouteHelper multicast; |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
109 |
|
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
110 |
// 1) Configure a (static) multicast route on node n2 (multicastRouter) |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
111 |
Ptr<Node> multicastRouter = c.Get (2); // The node in question |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
112 |
Ptr<NetDevice> inputIf = nd0.Get (2); // The input NetDevice |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
113 |
NetDeviceContainer outputDevices; // A container of output NetDevices |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
114 |
outputDevices.Add (nd1.Get (0)); // (we only need one NetDevice here) |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
115 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
116 |
multicast.AddMulticastRoute (multicastRouter, multicastSource, |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
117 |
multicastGroup, inputIf, outputDevices); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
118 |
|
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
119 |
// 2) Set up a default multicast route on the sender n0 |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
120 |
Ptr<Node> sender = c.Get (0); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
121 |
Ptr<NetDevice> senderIf = nd0.Get(0); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
122 |
multicast.SetDefaultMulticastRoute (sender, senderIf); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
123 |
|
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
124 |
// 3) Have node n4 join the multicast group |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
125 |
Ptr<Node> receiver = c.Get (4); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
126 |
multicast.JoinMulticastGroup (receiver, multicastSource, multicastGroup); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
127 |
|
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
128 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
129 |
// Create an OnOff application to send UDP datagrams from node zero to the |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
130 |
// multicast group (node four will be listening). |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
131 |
// |
1504
36ecc970ba96
checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents:
1501
diff
changeset
|
132 |
NS_LOG_INFO ("Create Applications."); |
1514
addb79f47ba5
change port number used by example scripts to 'discard' or 'echo' instead of '80'
Tom Henderson <tomh@tomh.org>
parents:
1509
diff
changeset
|
133 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
134 |
uint16_t multicastPort = 9; // Discard port (RFC 863) |
1514
addb79f47ba5
change port number used by example scripts to 'discard' or 'echo' instead of '80'
Tom Henderson <tomh@tomh.org>
parents:
1509
diff
changeset
|
135 |
|
1515
e87ff7b66737
Add PacketSink to receive multicast
Tom Henderson <tomh@tomh.org>
parents:
1514
diff
changeset
|
136 |
// Configure a multicast packet generator that generates a packet |
e87ff7b66737
Add PacketSink to receive multicast
Tom Henderson <tomh@tomh.org>
parents:
1514
diff
changeset
|
137 |
// every few seconds |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
138 |
OnOffHelper onoff; |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
139 |
onoff.SetUdpRemote (multicastGroup, multicastPort); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
140 |
onoff.SetAppAttribute ("OnTime", ConstantVariable (1)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
141 |
onoff.SetAppAttribute ("OffTime", ConstantVariable (0)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
142 |
onoff.SetAppAttribute ("DataRate", DataRate ("255b/s")); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
143 |
onoff.SetAppAttribute ("PacketSize", Uinteger (128)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
144 |
|
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
145 |
ApplicationContainer srcC = onoff.Build (c0.Get (0)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
146 |
|
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
147 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
148 |
// Tell the application when to start and stop. |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
149 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
150 |
srcC.Start(Seconds(1.)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
151 |
srcC.Stop (Seconds(10.)); |
1515
e87ff7b66737
Add PacketSink to receive multicast
Tom Henderson <tomh@tomh.org>
parents:
1514
diff
changeset
|
152 |
|
e87ff7b66737
Add PacketSink to receive multicast
Tom Henderson <tomh@tomh.org>
parents:
1514
diff
changeset
|
153 |
// Create an optional packet sink to receive these packets |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
154 |
PacketSinkHelper sink; |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
155 |
sink.SetupUdp (Ipv4Address::GetAny(), multicastPort); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
156 |
ApplicationContainer sinkC = sink.Build (c1.Get (2)); // Node n4 |
1515
e87ff7b66737
Add PacketSink to receive multicast
Tom Henderson <tomh@tomh.org>
parents:
1514
diff
changeset
|
157 |
// Start the sink |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
158 |
sinkC.Start (Seconds (1.0)); |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
159 |
sinkC.Stop (Seconds (10.0)); |
1515
e87ff7b66737
Add PacketSink to receive multicast
Tom Henderson <tomh@tomh.org>
parents:
1514
diff
changeset
|
160 |
|
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
161 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
162 |
// Configure tracing of all enqueue, dequeue, and NetDevice receive events. |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
163 |
// Trace output will be sent to the file "csma-multicast.tr" |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
164 |
// |
1504
36ecc970ba96
checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents:
1501
diff
changeset
|
165 |
NS_LOG_INFO ("Configure Tracing."); |
1429
31cb0668defd
debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents:
1428
diff
changeset
|
166 |
AsciiTrace asciitrace ("csma-multicast.tr"); |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
167 |
asciitrace.TraceAllNetDeviceRx (); |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
168 |
asciitrace.TraceAllQueues (); |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
169 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
170 |
// Also configure some tcpdump traces; each interface will be traced. |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
171 |
// The output files will be named: |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
172 |
// csma-multicast.pcap-<nodeId>-<interfaceId> |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
173 |
// and can be read by the "tcpdump -r" command (use "-tt" option to |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
174 |
// display timestamps correctly) |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
175 |
// |
1429
31cb0668defd
debug prints to make validation easier
Craig Dowell <craigdo@ee.washington.edu>
parents:
1428
diff
changeset
|
176 |
PcapTrace pcaptrace ("csma-multicast.pcap"); |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
177 |
pcaptrace.TraceAllIp (); |
2798
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
178 |
// |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
179 |
// Now, do the actual simulation. |
143e2e1c5167
csma-multicast helper-ized (w/o tracing cutover yet)
Tom Henderson <tomh@tomh.org>
parents:
2602
diff
changeset
|
180 |
// |
1504
36ecc970ba96
checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents:
1501
diff
changeset
|
181 |
NS_LOG_INFO ("Run Simulation."); |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
182 |
Simulator::Run (); |
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
183 |
Simulator::Destroy (); |
1504
36ecc970ba96
checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents:
1501
diff
changeset
|
184 |
NS_LOG_INFO ("Done."); |
1428
a8f3d01d4a2c
untested multicast support
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
185 |
} |