From 6be343530f19c49913a62cd5dec49a219047167d Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Mon, 12 May 2008 23:02:23 -0700 Subject: [PATCH] Add SocketDefaults to store socket option attributes --- src/helper/packet-socket-helper.cc | 3 +++ src/internet-node/internet-stack.cc | 3 +++ src/internet-node/tcp-socket.cc | 13 +++++++++++++ src/internet-node/udp-socket.cc | 17 ++++++++++++----- src/node/packet-socket.cc | 12 ++++++++++++ src/node/socket.cc | 14 ++++++++++++-- src/node/udp.cc | 14 -------------- src/node/udp.h | 5 ----- src/node/wscript | 2 ++ 9 files changed, 57 insertions(+), 26 deletions(-) diff --git a/src/helper/packet-socket-helper.cc b/src/helper/packet-socket-helper.cc index dd8d2b3fe..ad744bfb1 100644 --- a/src/helper/packet-socket-helper.cc +++ b/src/helper/packet-socket-helper.cc @@ -1,5 +1,6 @@ #include "packet-socket-helper.h" #include "ns3/packet-socket-factory.h" +#include "ns3/socket-defaults.h" namespace ns3 { @@ -11,6 +12,8 @@ PacketSocketHelper::Install (NodeContainer c) Ptr node = *i; Ptr factory = CreateObject (); node->AggregateObject (factory); + Ptr sockDefaults = CreateObject (); + node->AggregateObject (sockDefaults); } } diff --git a/src/internet-node/internet-stack.cc b/src/internet-node/internet-stack.cc index 916f436ac..f4d7c66a4 100644 --- a/src/internet-node/internet-stack.cc +++ b/src/internet-node/internet-stack.cc @@ -21,6 +21,7 @@ #include "ns3/net-device.h" #include "ns3/callback.h" #include "ns3/node.h" +#include "ns3/socket-defaults.h" #include "ipv4-l4-demux.h" #include "udp-l4-protocol.h" @@ -61,6 +62,7 @@ AddInternetStack (Ptr node) Ptr udpImpl = CreateObject (); Ptr tcpImpl = CreateObject (); Ptr ipv4Impl = CreateObject (); + Ptr sockDef = CreateObject (); udpImpl->SetUdp (udp); tcpImpl->SetTcp (tcp); @@ -72,6 +74,7 @@ AddInternetStack (Ptr node) node->AggregateObject (udpImpl); node->AggregateObject (tcpImpl); node->AggregateObject (ipv4L4Demux); + node->AggregateObject (sockDef); } }//namespace ns3 diff --git a/src/internet-node/tcp-socket.cc b/src/internet-node/tcp-socket.cc index 8127d8f87..9055c9f61 100644 --- a/src/internet-node/tcp-socket.cc +++ b/src/internet-node/tcp-socket.cc @@ -31,6 +31,8 @@ #include "tcp-typedefs.h" #include "ns3/simulator.h" #include "ns3/packet.h" +#include "ns3/uinteger.h" +#include "ns3/socket-defaults.h" #include "ns3/trace-source-accessor.h" #include @@ -185,6 +187,17 @@ TcpSocket::SetNode (Ptr node) m_cnCount = t->GetDefaultConnCount (); m_delAckTimout = Seconds(t->GetDefaultDelAckTimeout ()); m_delAckMaxCount = t->GetDefaultDelAckCount (); + + // Pull default values for socket options from SocketDefaults + // object that was aggregated to the node + Ptr sd = node->GetObject (); + NS_ASSERT (sd != 0); + UintegerValue uiv; + sd->GetAttribute ("DefaultSndBufLimit", uiv); + m_sndBufLimit = uiv.Get(); + sd->GetAttribute ("DefaultRcvBufLimit", uiv); + m_rcvBufLimit = uiv.Get(); + } void diff --git a/src/internet-node/udp-socket.cc b/src/internet-node/udp-socket.cc index 8305b17ba..9f1764b1c 100644 --- a/src/internet-node/udp-socket.cc +++ b/src/internet-node/udp-socket.cc @@ -23,13 +23,15 @@ #include "ns3/inet-socket-address.h" #include "ns3/ipv4-route.h" #include "ns3/ipv4.h" +#include "ns3/ipv4.h" +#include "ns3/udp.h" +#include "ns3/socket-defaults.h" +#include "ns3/trace-source-accessor.h" +#include "ns3/uinteger.h" #include "udp-socket.h" #include "udp-l4-protocol.h" #include "ipv4-end-point.h" #include "ipv4-l4-demux.h" -#include "ns3/ipv4.h" -#include "ns3/udp.h" -#include "ns3/trace-source-accessor.h" NS_LOG_COMPONENT_DEFINE ("UdpSocket"); @@ -89,9 +91,14 @@ void UdpSocket::SetNode (Ptr node) { NS_LOG_FUNCTION_NOARGS (); + // Pull default values for socket options from SocketDefaults + // object that was aggregated to the node m_node = node; - Ptr u = node->GetObject (); - m_rcvBufLimit =u->GetDefaultRxBuffer (); + Ptr sd = node->GetObject (); + NS_ASSERT (sd != 0); + UintegerValue uiv; + sd->GetAttribute ("DefaultRcvBufLimit", uiv); + m_rcvBufLimit = uiv.Get(); } void diff --git a/src/node/packet-socket.cc b/src/node/packet-socket.cc index a0d2668a9..4067410c1 100644 --- a/src/node/packet-socket.cc +++ b/src/node/packet-socket.cc @@ -24,6 +24,8 @@ #include "ns3/log.h" #include "ns3/node.h" #include "ns3/packet.h" +#include "ns3/uinteger.h" +#include "ns3/socket-defaults.h" #include "ns3/trace-source-accessor.h" NS_LOG_COMPONENT_DEFINE ("PacketSocket"); @@ -56,6 +58,16 @@ PacketSocket::SetNode (Ptr node) { NS_LOG_FUNCTION_NOARGS (); m_node = node; + // Pull default values for socket options from SocketDefaults + // object that was aggregated to the node + Ptr sd = node->GetObject (); + NS_ASSERT (sd != 0); + UintegerValue uiv; + sd->GetAttribute ("DefaultSndBufLimit", uiv); + m_sndBufLimit = uiv.Get(); + sd->GetAttribute ("DefaultRcvBufLimit", uiv); + m_rcvBufLimit = uiv.Get(); + } PacketSocket::~PacketSocket () diff --git a/src/node/socket.cc b/src/node/socket.cc index 07e44be6d..69a6d4d98 100644 --- a/src/node/socket.cc +++ b/src/node/socket.cc @@ -54,23 +54,33 @@ SocketOptions::~SocketOptions (void) void SocketOptions::SetSndBuf (uint32_t size) { + NS_LOG_FUNCTION_NOARGS (); + Ptr sock = GetObject (); + sock->SetSndBuf (size); } uint32_t SocketOptions::GetSndBuf (void) const { - return 0; + NS_LOG_FUNCTION_NOARGS (); + Ptr sock = GetObject (); + return sock->GetSndBuf (); } void SocketOptions::SetRcvBuf (uint32_t size) { + NS_LOG_FUNCTION_NOARGS (); + Ptr sock = GetObject (); + sock->SetRcvBuf (size); } uint32_t SocketOptions::GetRcvBuf (void) const { - return 0; + NS_LOG_FUNCTION_NOARGS (); + Ptr sock = GetObject (); + return sock->GetRcvBuf (); } Socket::Socket (void) diff --git a/src/node/udp.cc b/src/node/udp.cc index 28046152d..14311a2bb 100644 --- a/src/node/udp.cc +++ b/src/node/udp.cc @@ -28,22 +28,8 @@ TypeId Udp::GetTypeId (void) { static TypeId tid = TypeId ("ns3::Udp") .SetParent () - .AddAttribute ("DefaultRxBufferSize", - "Default UDP maximum receive buffer size (bytes)", - UintegerValue (0xffffffffl), - MakeUintegerAccessor (&Udp::m_defaultRxBuffer), - MakeUintegerChecker ()) ; return tid; } -Udp::Udp () -{} - -uint32_t -Udp::GetDefaultRxBuffer (void) const -{ - return m_defaultRxBuffer; -} - } // namespace ns3 diff --git a/src/node/udp.h b/src/node/udp.h index addcb583d..be6b0149d 100644 --- a/src/node/udp.h +++ b/src/node/udp.h @@ -44,8 +44,6 @@ class Udp : public SocketFactory public: static TypeId GetTypeId (void); - Udp (); - /** * \return smart pointer to Socket * @@ -54,9 +52,6 @@ public: */ virtual Ptr CreateSocket (void) = 0; - uint32_t GetDefaultRxBuffer (void) const; -private: - uint32_t m_defaultRxBuffer; }; } // namespace ns3 diff --git a/src/node/wscript b/src/node/wscript index 770b1edb9..747537254 100644 --- a/src/node/wscript +++ b/src/node/wscript @@ -23,6 +23,7 @@ def build(bld): 'node-list.cc', 'socket.cc', 'socket-factory.cc', + 'socket-defaults.cc', 'packet-socket-factory.cc', 'packet-socket.cc', 'udp.cc', @@ -56,6 +57,7 @@ def build(bld): 'node-list.h', 'socket.h', 'socket-factory.h', + 'socket-defaults.h', 'packet-socket-factory.h', 'udp.h', 'tcp.h',