author | Sebastien Vincent <vincent@clarinet.u-strasbg.fr> |
Fri, 04 Sep 2009 16:25:55 +0200 | |
changeset 4753 | 81146e4a3993 |
child 4754 | 77c878bc3e84 |
permissions | -rw-r--r-- |
4753
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
1 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
2 |
# Copyright (c) 2008-2009 Strasbourg University |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
3 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
4 |
# This program is free software; you can redistribute it and/or modify |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
5 |
# it under the terms of the GNU General Public License version 2 as |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
6 |
# published by the Free Software Foundation; |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
7 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
8 |
# This program is distributed in the hope that it will be useful, |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
9 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
10 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
11 |
# GNU General Public License for more details. |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
12 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
13 |
# You should have received a copy of the GNU General Public License |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
14 |
# along with this program; if not, write to the Free Software |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
15 |
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
16 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
17 |
# Author: David Gross <david.gross@eturs.u-strasbg.fr> |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
18 |
# Sebastien Vincent <vincent@clarinet.u-strasbg.fr> |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
19 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
20 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
21 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
22 |
# Network topology: |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
23 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
24 |
# n0 r n1 |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
25 |
# | _ | |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
26 |
# ====|_|==== |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
27 |
# router |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
28 |
# |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
29 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
30 |
import ns3; |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
31 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
32 |
def main(argv): |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
33 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
34 |
cmd = ns3.CommandLine (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
35 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
36 |
cmd.Parse (argv); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
37 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
38 |
# Create nodes |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
39 |
print "Create nodes" |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
40 |
n0 = ns3.Node (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
41 |
r = ns3.Node (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
42 |
n1 = ns3.Node (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
43 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
44 |
net1 = ns3.NodeContainer (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
45 |
net1.Add (n0); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
46 |
net1.Add (r); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
47 |
net2 = ns3.NodeContainer (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
48 |
net2.Add (r); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
49 |
net2.Add (n1); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
50 |
all = ns3.NodeContainer (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
51 |
all.Add (n0); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
52 |
all.Add (r); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
53 |
all.Add (n1); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
54 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
55 |
# Create IPv6 Internet Stack |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
56 |
internetv6 = ns3.InternetStackHelper (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
57 |
internetv6.Install (all); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
58 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
59 |
# Create channels |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
60 |
csma = ns3.CsmaHelper (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
61 |
csma.SetChannelAttribute ("DataRate", ns3.DataRateValue (ns3.DataRate (5000000))); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
62 |
csma.SetChannelAttribute ("Delay", ns3.TimeValue (ns3.MilliSeconds (2))); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
63 |
d1 = csma.Install (net1); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
64 |
d2 = csma.Install (net2); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
65 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
66 |
# Create networks and assign IPv6 Addresses |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
67 |
print "Addressing" |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
68 |
ipv6 = ns3.Ipv6AddressHelper (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
69 |
ipv6.NewNetwork (ns3.Ipv6Address ("2001:1::"), ns3.Ipv6Prefix (64)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
70 |
i1 = ipv6.Assign (d1); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
71 |
i1.SetRouter (1, True); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
72 |
ipv6.NewNetwork (ns3.Ipv6Address ("2001:2::"), ns3.Ipv6Prefix (64)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
73 |
i2 = ipv6.Assign (d2); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
74 |
i2.SetRouter (0, True); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
75 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
76 |
# Create a Ping6 application to send ICMPv6 echo request from n0 to n1 via r |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
77 |
print "Application" |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
78 |
packetSize = 1024; |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
79 |
maxPacketCount = 5; |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
80 |
interPacketInterval = ns3.Seconds (1.); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
81 |
ping6 = ns3.Ping6Helper (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
82 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
83 |
ping6.SetLocal (i1.GetAddress (0, 1)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
84 |
ping6.SetRemote (i2.GetAddress (1, 1)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
85 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
86 |
ping6.SetAttribute ("MaxPackets", ns3.UintegerValue (maxPacketCount)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
87 |
ping6.SetAttribute ("Interval", ns3.TimeValue (interPacketInterval)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
88 |
ping6.SetAttribute ("PacketSize", ns3.UintegerValue (packetSize)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
89 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
90 |
apps = ping6.Install (ns3.NodeContainer (net1.Get (0))); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
91 |
apps.Start (ns3.Seconds (2.0)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
92 |
apps.Stop (ns3.Seconds (20.0)); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
93 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
94 |
print "Tracing" |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
95 |
ascii = ns3.ofstream ("simple-routing-ping6.tr"); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
96 |
ns3.CsmaHelper.EnableAsciiAll (ascii); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
97 |
ns3.CsmaHelper.EnablePcapAll ("simple-routing-ping6", True); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
98 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
99 |
# Run Simulation |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
100 |
ns3.Simulator.Run (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
101 |
ns3.Simulator.Destroy (); |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
102 |
|
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
103 |
if __name__ == '__main__': |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
104 |
import sys |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
105 |
main(sys.argv) |
81146e4a3993
Add IPv6 python example.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents:
diff
changeset
|
106 |