nsc: Fix build problem if gtk config store is disabled
gtk config store pulled in libdl.so for us, so things fail
to link of the config store isn't enabled. This makes nsc
pull in libdl itself when its enabled.
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
#include "ns3/ptr.h"
#include "ns3/packet.h"
#include "ns3/header.h"
#include <iostream>
using namespace ns3;
/* A sample Header implementation
*/
class MyHeader : public Header
{
public:
MyHeader ();
virtual ~MyHeader ();
void SetData (uint16_t data);
uint16_t GetData (void) const;
static TypeId GetTypeId (void);
virtual TypeId GetInstanceTypeId (void) const;
virtual void Print (std::ostream &os) const;
virtual void Serialize (Buffer::Iterator start) const;
virtual uint32_t Deserialize (Buffer::Iterator start);
virtual uint32_t GetSerializedSize (void) const;
private:
uint16_t m_data;
};
MyHeader::MyHeader ()
{
// we must provide a public default constructor,
// implicit or explicit, but never private.
}
MyHeader::~MyHeader ()
{}
TypeId
MyHeader::GetTypeId (void)
{
static TypeId tid = TypeId ("ns3::MyHeader")
.SetParent<Header> ()
;
return tid;
}
TypeId
MyHeader::GetInstanceTypeId (void) const
{
return GetTypeId ();
}
void
MyHeader::Print (std::ostream &os) const
{
// This method is invoked by the packet printing
// routines to print the content of my header.
os << "data=" << m_data << std::endl;
}
uint32_t
MyHeader::GetSerializedSize (void) const
{
// we reserve 2 bytes for our header.
return 2;
}
void
MyHeader::Serialize (Buffer::Iterator start) const
{
// we can serialize two bytes at the start of the buffer.
// we write them in network byte order.
start.WriteHtonU16 (m_data);
}
uint32_t
MyHeader::Deserialize (Buffer::Iterator start)
{
// we can deserialize two bytes from the start of the buffer.
// we read them in network byte order and store them
// in host byte order.
m_data = start.ReadNtohU16 ();
// we return the number of bytes effectively read.
return 2;
}
void
MyHeader::SetData (uint16_t data)
{
m_data = data;
}
uint16_t
MyHeader::GetData (void) const
{
return m_data;
}
int main (int argc, char *argv[])
{
// instantiate a header.
MyHeader sourceHeader;
sourceHeader.SetData (2);
// instantiate a packet
Ptr<Packet> p = Create<Packet> ();
// and store my header into the packet.
p->AddHeader (sourceHeader);
// print the content of my packet on the standard output.
p->Print (std::cout);
// you can now remove the header from the packet:
MyHeader destinationHeader;
p->RemoveHeader (destinationHeader);
// and check that the destination and source
// headers contain the same values.
NS_ASSERT (sourceHeader.GetData () == destinationHeader.GetData ());
return 0;
}