Merge with ns-3-dev and fix doxygen.

This commit is contained in:
Sebastien Vincent
2009-11-15 11:30:20 +01:00
122 changed files with 2846 additions and 2082 deletions

View File

@@ -406,6 +406,7 @@ Ipv4L3Protocol::Receive( Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t pr
for (SocketList::iterator i = m_sockets.begin (); i != m_sockets.end (); ++i)
{
NS_LOG_LOGIC ("Forwarding to raw socket");
Ptr<Ipv4RawSocketImpl> socket = *i;
socket->ForwardUp (packet, ipHeader, device);
}
@@ -469,7 +470,6 @@ Ipv4L3Protocol::Send (Ptr<Packet> packet,
if (destination.IsBroadcast ())
{
NS_LOG_LOGIC ("Ipv4L3Protocol::Send case 1: limited broadcast");
ttl = 1;
ipHeader = BuildHeader (source, destination, protocol, packet->GetSize (), ttl, mayFragment);
uint32_t ifaceIndex = 0;
for (Ipv4InterfaceList::iterator ifaceIter = m_interfaces.begin ();
@@ -502,7 +502,6 @@ Ipv4L3Protocol::Send (Ptr<Packet> packet,
destination.CombineMask (ifAddr.GetMask ()) == ifAddr.GetLocal ().CombineMask (ifAddr.GetMask ()) )
{
NS_LOG_LOGIC ("Ipv4L3Protocol::Send case 2: subnet directed bcast to " << ifAddr.GetLocal ());
ttl = 1;
ipHeader = BuildHeader (source, destination, protocol, packet->GetSize (), ttl, mayFragment);
Ptr<Packet> packetCopy = packet->Copy ();
m_sendOutgoingTrace (ipHeader, packetCopy, ifaceIndex);

View File

@@ -80,6 +80,9 @@ class Ipv6ExtensionDemux : public Object
void Remove (Ptr<Ipv6Extension> extension);
protected:
/**
* \brief Dispose object.
*/
virtual void DoDispose ();
private:

View File

@@ -153,10 +153,10 @@ void OptionField::Serialize (Buffer::Iterator start) const
uint32_t OptionField::Deserialize (Buffer::Iterator start, uint32_t length)
{
uint8_t buf[length];
start.Read (buf,length);
start.Read (buf, length);
m_optionData = Buffer ();
m_optionData.AddAtEnd (length);
m_optionData.Begin ().Write (buf,length);
m_optionData.Begin ().Write (buf, length);
return length;
}

View File

@@ -129,6 +129,7 @@ class Ipv6ExtensionHeader : public Header
};
/**
* \class OptionField
* \brief Option field for an IPv6ExtensionHeader
* Enables adding options to an IPv6ExtensionHeader
*
@@ -137,11 +138,18 @@ class Ipv6ExtensionHeader : public Header
* return value. Call OptionField::Serialize and OptionField::Deserialize at the
* end of your corresponding IPv6ExtensionHeader methods.
*/
class OptionField
{
public:
OptionField (uint32_t opitonsOffset);
/**
* \brief Constructor.
* \param optionsOffset option offset
*/
OptionField (uint32_t optionsOffset);
/**
* \brief Destructor.
*/
~OptionField ();
/**
@@ -159,6 +167,7 @@ class OptionField
/**
* \brief Deserialize the packet.
* \param start Buffer iterator
* \param length length
* \return size of the packet
*/
uint32_t Deserialize (Buffer::Iterator start, uint32_t length);
@@ -176,13 +185,28 @@ class OptionField
*/
uint32_t GetOptionsOffset ();
/**
* \brief Get the buffer.
* \return buffer
*/
Buffer GetOptionBuffer ();
private:
/**
* \brief Calculate padding.
* \param alignment alignment
*/
uint32_t CalculatePad (Ipv6OptionHeader::Alignment alignment) const;
/**
* \brief Data payload.
*/
Buffer m_optionData;
/**
* \brief Offset.
*/
uint32_t m_optionsOffset;
};

View File

@@ -522,9 +522,8 @@ void Ipv6ExtensionFragment::GetFragments (Ptr<Packet> packet, uint32_t maxFragme
unfragmentablePart.clear ();
}
Ipv6ExtensionFragment::Fragments::Fragments ()
: m_moreFragment (0),
m_refCount (1)
Ipv6ExtensionFragment::Fragments::Fragments ()
: m_moreFragment (0)
{
}
@@ -532,21 +531,6 @@ Ipv6ExtensionFragment::Fragments::~Fragments ()
{
}
void Ipv6ExtensionFragment::Fragments::Ref () const
{
m_refCount++;
}
void Ipv6ExtensionFragment::Fragments::Unref () const
{
m_refCount--;
if (m_refCount == 0)
{
delete this;
}
}
void Ipv6ExtensionFragment::Fragments::AddFragment (Ptr<Packet> fragment, uint16_t fragmentOffset, bool moreFragment)
{
std::list<std::pair<Ptr<Packet>, uint16_t> >::iterator it;
@@ -756,8 +740,6 @@ void Ipv6ExtensionRoutingDemux::Remove (Ptr<Ipv6ExtensionRouting> extensionRouti
NS_OBJECT_ENSURE_REGISTERED (Ipv6ExtensionLooseRouting);
const uint8_t Ipv6ExtensionLooseRouting::TYPE_ROUTING = 0;
TypeId Ipv6ExtensionLooseRouting::GetTypeId ()
{
static TypeId tid = TypeId ("ns3::Ipv6ExtensionLooseRouting")

View File

@@ -125,6 +125,9 @@ private:
class Ipv6ExtensionHopByHop : public Ipv6Extension
{
public:
/**
* \brief Hop-by-hop extension number.
*/
static const uint8_t EXT_NUMBER = 0;
/**
@@ -170,6 +173,9 @@ public:
class Ipv6ExtensionDestination : public Ipv6Extension
{
public:
/**
* \brief Destination extension number.
*/
static const uint8_t EXT_NUMBER = 60;
/**
@@ -215,6 +221,9 @@ public:
class Ipv6ExtensionFragment : public Ipv6Extension
{
public:
/**
* \brief Fragmentation extension number.
*/
static const uint8_t EXT_NUMBER = 44;
/**
@@ -271,7 +280,7 @@ private:
* \class Fragments
* \brief A Set of Fragment
*/
class Fragments
class Fragments : public SimpleRefCount<Fragments>
{
public:
/**
@@ -284,9 +293,6 @@ private:
*/
~Fragments ();
void Ref () const;
void Unref () const;
/**
* \brief Add a fragment.
* \param fragment the fragment
@@ -352,6 +358,9 @@ private:
class Ipv6ExtensionRouting : public Ipv6Extension
{
public:
/**
* \brief Routing extension number.
*/
static const uint8_t EXT_NUMBER = 43;
/**
@@ -472,7 +481,10 @@ private:
class Ipv6ExtensionLooseRouting : public Ipv6ExtensionRouting
{
public:
static const uint8_t TYPE_ROUTING;
/**
* \brief Routing type.
*/
static const uint8_t TYPE_ROUTING = 0;
/**
* \brief Get the type identificator.
@@ -519,6 +531,9 @@ public:
class Ipv6ExtensionESP : public Ipv6Extension
{
public:
/**
* \brief ESP extension number.
*/
static const uint8_t EXT_NUMBER = 50;
/**
@@ -565,6 +580,9 @@ public:
class Ipv6ExtensionAH : public Ipv6Extension
{
public:
/**
* \brief AH extension number.
*/
static const uint8_t EXT_NUMBER = 51;
/**

View File

@@ -37,16 +37,16 @@ class Ipv6OptionHeader : public Header
public:
/**
* \struct Alignment
* \brief represents the alignment requirements of an option header
*
* Represented as factor*n+offset (eg. 8n+2) See RFC 2460.
* No alignemt is represented as 1n+0.
*
*/
struct Alignment
{
uint8_t factor;
uint8_t offset;
uint8_t factor; /**< Factor */
uint8_t offset; /**< Offset */
};
/**

View File

@@ -94,6 +94,9 @@ private:
class Ipv6OptionPad1 : public Ipv6Option
{
public:
/**
* \brief Pad1 option number.
*/
static const uint8_t OPT_NUMBER = 0;
/**
@@ -138,6 +141,9 @@ public:
class Ipv6OptionPadn : public Ipv6Option
{
public:
/**
* \brief PadN option number.
*/
static const uint8_t OPT_NUMBER = 60;
/**
@@ -182,6 +188,9 @@ public:
class Ipv6OptionJumbogram : public Ipv6Option
{
public:
/**
* \brief Jumbogram option number.
*/
static const uint8_t OPT_NUMBER = 44;
/**
@@ -231,6 +240,9 @@ private:
class Ipv6OptionRouterAlert : public Ipv6Option
{
public:
/**
* \brief Router alert option number.
*/
static const uint8_t OPT_NUMBER = 43;
/**

View File

@@ -77,6 +77,8 @@ class UdpSocketImplTest: public TestCase
{
Ptr<Packet> m_receivedPacket;
Ptr<Packet> m_receivedPacket2;
void DoSendData (Ptr<Socket> socket, std::string to);
void SendData (Ptr<Socket> socket, std::string to);
public:
virtual bool DoRun (void);
@@ -120,6 +122,24 @@ void UdpSocketImplTest::ReceivePkt2 (Ptr<Socket> socket)
NS_ASSERT (availableData == m_receivedPacket2->GetSize ());
}
void
UdpSocketImplTest::DoSendData (Ptr<Socket> socket, std::string to)
{
Address realTo = InetSocketAddress (Ipv4Address(to.c_str()), 1234);
NS_TEST_EXPECT_MSG_EQ (socket->SendTo (Create<Packet> (123), 0, realTo),
123, "XXX");
}
void
UdpSocketImplTest::SendData (Ptr<Socket> socket, std::string to)
{
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
Simulator::ScheduleWithContext (socket->GetNode ()->GetId (), Seconds (0),
&UdpSocketImplTest::DoSendData, this, socket, to);
Simulator::Run ();
}
bool
UdpSocketImplTest::DoRun (void)
{
@@ -203,11 +223,7 @@ UdpSocketImplTest::DoRun (void)
// ------ Now the tests ------------
// Unicast test
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_EXPECT_MSG_EQ (txSocket->SendTo ( Create<Packet> (123), 0,
InetSocketAddress (Ipv4Address("10.0.0.1"), 1234)), 123, "trivial");
Simulator::Run ();
SendData (txSocket, "10.0.0.1");
NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 0, "second interface should receive it");
@@ -216,11 +232,7 @@ UdpSocketImplTest::DoRun (void)
// Simple broadcast test
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_EXPECT_MSG_EQ (txSocket->SendTo ( Create<Packet> (123), 0,
InetSocketAddress (Ipv4Address("255.255.255.255"), 1234)), 123, "trivial");
Simulator::Run ();
SendData (txSocket, "255.255.255.255");
NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 0, "second socket should not receive it (it is bound specifically to the second interface's address");
@@ -237,11 +249,7 @@ UdpSocketImplTest::DoRun (void)
rxSocket2->SetRecvCallback (MakeCallback (&UdpSocketImplTest::ReceivePkt2, this));
NS_TEST_EXPECT_MSG_EQ (rxSocket2->Bind (InetSocketAddress (Ipv4Address ("0.0.0.0"), 1234)), 0, "trivial");
m_receivedPacket = Create<Packet> ();
m_receivedPacket2 = Create<Packet> ();
NS_TEST_EXPECT_MSG_EQ (txSocket->SendTo (Create<Packet> (123), 0,
InetSocketAddress (Ipv4Address("255.255.255.255"), 1234)), 123, "trivial");
Simulator::Run ();
SendData (txSocket, "255.255.255.255");
NS_TEST_EXPECT_MSG_EQ (m_receivedPacket->GetSize (), 123, "trivial");
NS_TEST_EXPECT_MSG_EQ (m_receivedPacket2->GetSize (), 123, "trivial");