author | Tom Henderson <tomh@tomh.org> |
Mon, 26 Mar 2007 06:39:20 -0700 | |
changeset 376 | 5801e09f82bf |
parent 375 | de64c081a2e0 |
child 377 | 8fec8bed8a9e |
permissions | -rw-r--r-- |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
2 |
// |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
3 |
// Copyright (c) 2006 Georgia Tech Research Corporation |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
4 |
// |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
5 |
// This program is free software; you can redistribute it and/or modify |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
6 |
// it under the terms of the GNU General Public License version 2 as |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
7 |
// published by the Free Software Foundation; |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
8 |
// |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
9 |
// This program is distributed in the hope that it will be useful, |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
10 |
// but WITHOUT ANY WARRANTY; without even the implied warranty of |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
11 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
12 |
// GNU General Public License for more details. |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
13 |
// |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
14 |
// You should have received a copy of the GNU General Public License |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
15 |
// along with this program; if not, write to the Free Software |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
16 |
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
17 |
// |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
18 |
// Author: George F. Riley<riley@ece.gatech.edu> |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
19 |
// |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
20 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
21 |
// |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
22 |
// Topology helper for ns3. |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
23 |
// George F. Riley, Georgia Tech, Spring 2007 |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
24 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
25 |
#include "ns3/debug.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
26 |
#include "ns3/assert.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
27 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
28 |
#include "ns3/nstime.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
29 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
30 |
#include "ns3/internet-node.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
31 |
#include "ns3/ipv4-address.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
32 |
#include "ns3/drop-tail.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
33 |
#include "ns3/arp-ipv4-interface.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
34 |
#include "ns3/ipv4.h" |
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
35 |
#include "ns3/net-device-list.h" |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
36 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
37 |
#include "p2p-channel.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
38 |
#include "p2p-net-device.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
39 |
#include "p2p-topology.h" |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
40 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
41 |
#define nil 0 |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
42 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
43 |
namespace ns3 { |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
44 |
|
369
29ea5d1a83c8
Rename classes from Serial to PointToPoint
Tom Henderson <tomh@tomh.org>
parents:
368
diff
changeset
|
45 |
PointToPointChannel * |
29ea5d1a83c8
Rename classes from Serial to PointToPoint
Tom Henderson <tomh@tomh.org>
parents:
368
diff
changeset
|
46 |
PointToPointTopology::AddPointToPointLink( |
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
47 |
Node* n1, |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
48 |
const Ipv4Address& addr1, |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
49 |
Node* n2, |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
50 |
const Ipv4Address& addr2, |
373
960c8e8721de
Move simple-p2p.cc to DataRate; fix small bug in DataRate and add include guards
Tom Henderson <tomh@tomh.org>
parents:
369
diff
changeset
|
51 |
const DataRate& bps, |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
52 |
const Time& delay) |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
53 |
{ |
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
54 |
// First get the NetDeviceList capability from each node |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
55 |
NetDeviceList* ndl1 = n1->GetNetDeviceList(); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
56 |
NetDeviceList* ndl2 = n2->GetNetDeviceList(); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
57 |
if (!ndl1 || !ndl2) return nil; // Both ends must have NetDeviceList |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
58 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
59 |
// Duplex link is assumed to be subnetted as a /30 |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
60 |
// May run this unnumbered in the future? |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
61 |
Ipv4Mask netmask("255.255.255.252"); |
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
62 |
NS_ASSERT (netmask.IsMatch(addr1,addr2)); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
63 |
|
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
64 |
// create channel expicitly (XXX no reference counting here yet) |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
65 |
PointToPointChannel* channel = new PointToPointChannel(bps, delay); |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
66 |
|
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
67 |
PointToPointNetDevice* net1 = new PointToPointNetDevice(n1); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
68 |
net1->AddQueue(Queue::Default().Copy()); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
69 |
ndl1->Add(net1); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
70 |
Ipv4Interface *interf1 = new ArpIpv4Interface (n1, net1); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
71 |
uint32_t index1 = n1->GetIpv4 ()->AddInterface (interf1); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
72 |
net1->Attach (channel); |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
73 |
|
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
74 |
interf1->SetAddress (addr1); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
75 |
interf1->SetNetworkMask (netmask); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
76 |
interf1->SetUp (); |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
77 |
|
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
78 |
PointToPointNetDevice* net2 = new PointToPointNetDevice(n2); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
79 |
net2->AddQueue(Queue::Default().Copy()); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
80 |
ndl2->Add(net2); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
81 |
Ipv4Interface *interf2 = new ArpIpv4Interface (n2, net2); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
82 |
uint32_t index2 = n2->GetIpv4 ()->AddInterface (interf2); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
83 |
net2->Attach (channel); |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
84 |
|
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
85 |
interf2->SetAddress (addr2); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
86 |
interf2->SetNetworkMask (netmask); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
87 |
interf2->SetUp (); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
88 |
|
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
89 |
n1->GetIpv4 ()->AddHostRouteTo (addr2, index1); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
90 |
n2->GetIpv4 ()->AddHostRouteTo (addr1, index2); |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
91 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
92 |
return channel; |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
93 |
} |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
94 |
|
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
95 |
#if 0 |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
96 |
// Get the channel connecting node n1 to node n2 |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
97 |
Channel* Topology::GetChannel(Node* n1, Node* n2) |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
98 |
{ |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
99 |
NetDevice* nd = GetNetDevice(n1, n2); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
100 |
if (!nd) return 0; // No net device, so no channel |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
101 |
return nd->GetChannel(); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
102 |
} |
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
103 |
|
376
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
104 |
Queue* Topology::GetQueue(Node* n1, Node* n2) |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
105 |
{ |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
106 |
NetDevice* nd = GetNetDevice(n1, n2); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
107 |
if (!nd) return 0; // No net device, so in queue |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
108 |
return nd->GetQueue(); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
109 |
} |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
110 |
|
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
111 |
Queue* Topology::SetQueue(Node* n1, Node* n2, const Queue& q) |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
112 |
{ |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
113 |
NetDevice* nd = GetNetDevice(n1, n2); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
114 |
if (!nd) return 0; // No net device, can't set queue |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
115 |
// Add the specified queue to the netdevice |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
116 |
return nd->SetQueue(q); |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
117 |
} |
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
118 |
|
5801e09f82bf
Add net devices to net-device-list in topology
Tom Henderson <tomh@tomh.org>
parents:
375
diff
changeset
|
119 |
|
368
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
120 |
P2PChannel* Topology::AddDuplexLink(Node* n1, const IPAddr& ip1, |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
121 |
Node* n2, const IPAddr& ip2, |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
122 |
const Rate& rate, const Time& delay) |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
123 |
{ |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
124 |
// First get the NetDeviceList capability from each node |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
125 |
NetDeviceList* ndl1 = n1->GetNetDeviceList(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
126 |
NetDeviceList* ndl2 = n2->GetNetDeviceList(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
127 |
if (!ndl1 || !ndl2) return nil; // Both ends must have NetDeviceList |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
128 |
// Get the net devices |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
129 |
P2PNetDevice* nd1 = ndl1->Add(P2PNetDevice(n1, rate, nil)); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
130 |
P2PNetDevice* nd2 = ndl2->Add(P2PNetDevice(n1, rate, nd1->GetChannel())); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
131 |
// Not implemented yet. Add appropriate layer 2 protocol for |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
132 |
// the net devices. |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
133 |
// Get the L3 proto for node 1 and configure it with this device |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
134 |
L3Demux* l3demux1 = n1->GetL3Demux(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
135 |
L3Protocol* l3proto1 = nil; |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
136 |
// If the node 1 l3 demux exists, find the coresponding l3 protocol |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
137 |
if (l3demux1) l3proto1 = l3demux1->Lookup(ip1.L3Proto()); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
138 |
// If the l3 protocol exists, configure this net device. Use a mask |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
139 |
// of all ones, since there is only one device on the remote end |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
140 |
// of this link |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
141 |
if (l3proto1) l3proto1->AddNetDevice(nd1, ip1, ip1.GetMask(ip1.Size()*8)); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
142 |
// Same for node 2 |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
143 |
L3Demux* l3demux2 = n2->GetL3Demux(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
144 |
L3Protocol* l3proto2 = nil; |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
145 |
// If the node 2 l3 demux exists, find the coresponding l3 protocol |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
146 |
if (l3demux2) l3proto2 = l3demux2->Lookup(ip2.L3Proto()); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
147 |
if (l3proto2) l3proto2->AddNetDevice(nd2, ip2, ip2.GetMask(ip2.Size()*8)); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
148 |
return dynamic_cast<P2PChannel*>(nd1->GetChannel()); // Always succeeds |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
149 |
} |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
150 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
151 |
// Get the net device connecting node n1 to n2. For topologies where |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
152 |
// there are possibly multiple devices connecting n1 and n2 (for example |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
153 |
// wireless with two devices on different channels) this will return |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
154 |
// the first one found. |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
155 |
NetDevice* Topology::GetNetDevice(Node* n1, Node* n2) |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
156 |
{ |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
157 |
// First get the NetDeviceList capability from node 1 |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
158 |
NetDeviceList* ndl1 = n1->GetNetDeviceList(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
159 |
if (!ndl1) return 0; // No devices, return nil |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
160 |
// Get the list of devices |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
161 |
const NetDeviceList::NetDevices_t& dlist = ndl1->GetAll(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
162 |
for (NetDeviceList::NetDevices_t::const_iterator i = dlist.Begin(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
163 |
i != dlist.End(); ++i) |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
164 |
{ // Check each device |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
165 |
NetDevice* nd = *i; // next device |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
166 |
Channel* c = nd->GetChannel(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
167 |
if (!c) continue; // No channel |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
168 |
if (c->NodeIsPeer(n2)) return nd; // found it |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
169 |
} |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
170 |
return 0; // None found |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
171 |
} |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
172 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
173 |
// Get the channel connecting node n1 to node n2 |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
174 |
Channel* Topology::GetChannel(Node* n1, Node* n2) |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
175 |
{ |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
176 |
NetDevice* nd = GetNetDevice(n1, n2); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
177 |
if (!nd) return 0; // No net device, so no channel |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
178 |
return nd->GetChannel(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
179 |
} |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
180 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
181 |
Queue* Topology::GetQueue(Node* n1, Node* n2) |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
182 |
{ |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
183 |
NetDevice* nd = GetNetDevice(n1, n2); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
184 |
if (!nd) return 0; // No net device, so in queue |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
185 |
return nd->GetQueue(); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
186 |
} |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
187 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
188 |
Queue* Topology::SetQueue(Node* n1, Node* n2, const Queue& q) |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
189 |
{ |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
190 |
NetDevice* nd = GetNetDevice(n1, n2); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
191 |
if (!nd) return 0; // No net device, can't set queue |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
192 |
// Add the specified queue to the netdevice |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
193 |
return nd->SetQueue(q); |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
194 |
} |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
195 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
196 |
#endif |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
197 |
|
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
198 |
} // namespace ns3 |
1df1165d6a68
Rename file names from serial to p2p
Tom Henderson <tomh@tomh.org>
parents:
diff
changeset
|
199 |