author | Craig Dowell <craigdo@ee.washington.edu> |
Tue, 20 Jan 2009 17:39:18 -0800 | |
changeset 4140 | 6bbf05bf4826 |
parent 4139 | d45e62c78504 |
child 4141 | 3f7f08d9daad |
permissions | -rw-r--r-- |
4139
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
2 |
/* |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
3 |
* This program is free software; you can redistribute it and/or modify |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
4 |
* it under the terms of the GNU General Public License version 2 as |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
5 |
* published by the Free Software Foundation; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
6 |
* |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
7 |
* This program is distributed in the hope that it will be useful, |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
8 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
9 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
10 |
* GNU General Public License for more details. |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
11 |
* |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
12 |
* You should have received a copy of the GNU General Public License |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
13 |
* along with this program; if not, write to the Free Software |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
14 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
15 |
*/ |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
16 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
17 |
// Network topology |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
18 |
// |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
19 |
// n0 n1 n2 n3 |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
20 |
// | | | | |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
21 |
// ================= |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
22 |
// LAN |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
23 |
// |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
24 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
25 |
#include "ns3/core-module.h" |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
26 |
#include "ns3/simulator-module.h" |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
27 |
#include "ns3/helper-module.h" |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
28 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
29 |
using namespace ns3; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
30 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
31 |
NS_LOG_COMPONENT_DEFINE ("NamesExample"); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
32 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
33 |
void |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
34 |
RxEvent (std::string context, Ptr<const Packet> packet) |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
35 |
{ |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
36 |
NS_LOG_INFO (context << " packet " << packet); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
37 |
} |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
38 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
39 |
int |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
40 |
main (int argc, char *argv[]) |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
41 |
{ |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
42 |
#if 1 |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
43 |
LogComponentEnable ("NamesExample", LOG_LEVEL_INFO); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
44 |
#endif |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
45 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
46 |
CommandLine cmd; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
47 |
cmd.Parse (argc, argv); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
48 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
49 |
NodeContainer n; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
50 |
n.Create (4); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
51 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
52 |
// |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
53 |
// We're going to use the zeroth node in the container as the client, and |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
54 |
// the first node as the server. Add some "human readable" names for these |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
55 |
// nodes. The first parameter specifies the root of the "/Names" name space |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
56 |
// as the destination, so these will go into the name system as "/Names/client" |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
57 |
// and "/Names/server". |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
58 |
// |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
59 |
Names::Add ("/Names", "client", n.Get (0)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
60 |
Names::Add ("/Names", "server", n.Get (1)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
61 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
62 |
InternetStackHelper internet; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
63 |
internet.Install (n); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
64 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
65 |
CsmaHelper csma; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
66 |
csma.SetChannelAttribute ("DataRate", DataRateValue (DataRate(5000000))); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
67 |
csma.SetChannelAttribute ("Delay", TimeValue (MilliSeconds (2))); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
68 |
csma.SetDeviceAttribute ("Mtu", UintegerValue (1400)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
69 |
NetDeviceContainer d = csma.Install (n); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
70 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
71 |
// |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
72 |
// Add some human readable names for the devices we'll be interested in. |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
73 |
// We add the names to the name space "under" the nodes we created above. |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
74 |
// This has the effect of making "/Names/client/eth0" and "/Names/server/eth0" |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
75 |
// Note that the first parameter must reference a previously named object, |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
76 |
// and we have, in fact, already named objects "/Names/client" and |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
77 |
// "/Names/server" |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
78 |
// |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
79 |
Names::Add ("/Names/client", "eth0", d.Get (0)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
80 |
Names::Add ("/Names/server", "eth0", d.Get (1)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
81 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
82 |
Ipv4AddressHelper ipv4; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
83 |
ipv4.SetBase ("10.1.1.0", "255.255.255.0"); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
84 |
Ipv4InterfaceContainer i = ipv4.Assign (d); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
85 |
|
4140
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
86 |
uint16_t port = 9; |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
87 |
UdpEchoServerHelper server (port); |
4139
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
88 |
// |
4140
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
89 |
// Install the UdpEchoServer application on the server node using its name |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
90 |
// directly. |
4139
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
91 |
// |
4140
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
92 |
ApplicationContainer apps = server.Install ("/Names/server"); |
4139
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
93 |
apps.Start (Seconds (1.0)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
94 |
apps.Stop (Seconds (10.0)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
95 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
96 |
uint32_t packetSize = 1024; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
97 |
uint32_t maxPacketCount = 1; |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
98 |
Time interPacketInterval = Seconds (1.); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
99 |
UdpEchoClientHelper client (i.GetAddress (1), port); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
100 |
client.SetAttribute ("MaxPackets", UintegerValue (maxPacketCount)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
101 |
client.SetAttribute ("Interval", TimeValue (interPacketInterval)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
102 |
client.SetAttribute ("PacketSize", UintegerValue (packetSize)); |
4140
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
103 |
// |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
104 |
// Install the UdpEchoClient application on the server node using its name |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
105 |
// directly. |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
106 |
// |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
107 |
apps = client.Install ("/Names/client"); |
4139
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
108 |
apps.Start (Seconds (2.0)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
109 |
apps.Stop (Seconds (10.0)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
110 |
|
4140
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
111 |
// |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
112 |
// Use the config system to connect a trace source using the object name |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
113 |
// system to specify the path. |
6bbf05bf4826
Brute force all of the helpers to use object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
4139
diff
changeset
|
114 |
// |
4139
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
115 |
Config::Connect ("/Names/client/eth0/Rx", MakeCallback (&RxEvent)); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
116 |
|
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
117 |
Simulator::Run (); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
118 |
Simulator::Destroy (); |
d45e62c78504
add an object name service
Craig Dowell <craigdo@ee.washington.edu>
parents:
diff
changeset
|
119 |
} |