00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "ns3/net-device.h"
00022 #include "ns3/callback.h"
00023 #include "ns3/node.h"
00024 #include "ns3/core-config.h"
00025
00026 #include "udp-l4-protocol.h"
00027 #include "tcp-l4-protocol.h"
00028 #include "ipv4-l3-protocol.h"
00029 #include "arp-l3-protocol.h"
00030 #include "udp-socket-factory-impl.h"
00031 #include "tcp-socket-factory-impl.h"
00032 #include "ipv4-impl.h"
00033 #include "ipv4-raw-socket-factory-impl.h"
00034 #include "icmpv4-l4-protocol.h"
00035 #ifdef NETWORK_SIMULATION_CRADLE
00036 #include "nsc-tcp-socket-factory-impl.h"
00037 #include "nsc-tcp-l4-protocol.h"
00038 #endif
00039
00040 namespace ns3 {
00041
00042 static void
00043 AddArpStack (Ptr<Node> node)
00044 {
00045 Ptr<ArpL3Protocol> arp = CreateObject<ArpL3Protocol> ();
00046 arp->SetNode (node);
00047 node->AggregateObject (arp);
00048 }
00049
00050 static void
00051 AddUdpStack(Ptr<Node> node)
00052 {
00053 Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> ();
00054 Ptr<UdpL4Protocol> udp = CreateObject<UdpL4Protocol> ();
00055 udp->SetNode (node);
00056 ipv4->Insert (udp);
00057 Ptr<UdpSocketFactoryImpl> udpFactory = CreateObject<UdpSocketFactoryImpl> ();
00058 udpFactory->SetUdp (udp);
00059 node->AggregateObject (udpFactory);
00060 }
00061
00062 static void
00063 AddIcmpStack (Ptr<Node> node)
00064 {
00065 Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> ();
00066 Ptr<Icmpv4L4Protocol> icmp = CreateObject<Icmpv4L4Protocol> ();
00067 icmp->SetNode (node);
00068 ipv4->Insert (icmp);
00069 Ptr<Ipv4RawSocketFactoryImpl> rawFactory = CreateObject<Ipv4RawSocketFactoryImpl> ();
00070 node->AggregateObject (rawFactory);
00071 }
00072
00073 static void
00074 AddTcpStack(Ptr<Node> node)
00075 {
00076 Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> ();
00077 Ptr<TcpL4Protocol> tcp = CreateObject<TcpL4Protocol> ();
00078 tcp->SetNode (node);
00079
00080 ipv4->Insert (tcp);
00081
00082 Ptr<TcpSocketFactoryImpl> tcpFactory = CreateObject<TcpSocketFactoryImpl> ();
00083 tcpFactory->SetTcp (tcp);
00084 node->AggregateObject (tcpFactory);
00085 }
00086
00087 static void
00088 AddIpv4Stack(Ptr<Node> node)
00089 {
00090 Ptr<Ipv4L3Protocol> ipv4 = CreateObject<Ipv4L3Protocol> ();
00091 ipv4->SetNode (node);
00092 node->AggregateObject (ipv4);
00093 Ptr<Ipv4Impl> ipv4Impl = CreateObject<Ipv4Impl> ();
00094 ipv4Impl->SetIpv4 (ipv4);
00095 node->AggregateObject (ipv4Impl);
00096 }
00097
00098 void
00099 AddInternetStack (Ptr<Node> node)
00100 {
00101 AddArpStack (node);
00102 AddIpv4Stack (node);
00103 AddIcmpStack (node);
00104 AddUdpStack (node);
00105 AddTcpStack (node);
00106 }
00107
00108 #ifdef NETWORK_SIMULATION_CRADLE
00109 static void
00110 AddNscStack(Ptr<Node> node, const std::string &soname)
00111 {
00112 Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> ();
00113 Ptr<NscTcpL4Protocol> tcp = CreateObject<NscTcpL4Protocol> ();
00114 tcp->SetNscLibrary(soname);
00115 tcp->SetNode (node);
00116 ipv4->Insert (tcp);
00117 Ptr<NscTcpSocketFactoryImpl> tcpFactory = CreateObject<NscTcpSocketFactoryImpl> ();
00118 tcpFactory->SetTcp (tcp);
00119 node->AggregateObject (tcpFactory);
00120 }
00121
00122
00123 void
00124 AddNscInternetStack (Ptr<Node> node, const std::string &soname)
00125 {
00126 AddArpStack (node);
00127 AddIpv4Stack (node);
00128 AddIcmpStack (node);
00129 AddUdpStack (node);
00130 AddNscStack (node, soname);
00131 }
00132 #else
00133 void
00134 AddNscInternetStack (Ptr<Node> node, const std::string &soname)
00135 {
00136 NS_FATAL_ERROR ("NSC Not enabled on this platform.");
00137 }
00138 #endif
00139 }