25 #include "ns3/command-line.h" 
   26 #include "ns3/system-wall-clock-ms.h" 
   27 #include "ns3/packet.h" 
   28 #include "ns3/packet-metadata.h" 
   51   bool IsOk (
void) 
const;
 
   57   static TypeId GetTypeId (
void);
 
   58   virtual TypeId GetInstanceTypeId (
void) 
const;
 
   59   virtual void Print (std::ostream &os) 
const;
 
   60   virtual uint32_t GetSerializedSize (
void) 
const;
 
   68   static std::string GetTypeName (
void);
 
   88   std::ostringstream oss;
 
   89   oss << 
"ns3::BenchHeader<" << N << 
">";
 
   99     .SetGroupName (
"Utils")
 
  100     .HideFromDocumentation ()
 
  135   for (
int i = 0; i < N; i++)
 
  155     std::ostringstream oss;
 
  156     oss << 
"anon::BenchTag<" << N << 
">";
 
  166       .SetGroupName (
"Utils")
 
  167       .HideFromDocumentation ()
 
  179     for (uint32_t i = 0; i < N; ++i)
 
  185     for (uint32_t i = 0; i < N; ++i)
 
  190   virtual void Print (std::ostream &os)
 const {
 
  206   for (uint32_t i = 0; i < n; i++) {
 
  230   NS_ASSERT_MSG (ipv4.
IsOk () == 
false, 
"IsOk() should be false before deserialization");
 
  231   for (uint32_t i = 0; i < n; i++) {
 
  239   NS_ASSERT_MSG (ipv4.
IsOk () == 
true, 
"IsOk() should be true after deserialization");
 
  248   for (uint32_t i = 0; i < n; i++) {
 
  277   for (uint32_t i = 0; i < n; i++) {
 
  291   for (uint32_t i= 0; i < n; i++) {
 
  316   for (uint32_t i = 0; i < n; i++)
 
  319       for (uint32_t j = 0; j < 100; j++)
 
  337   uint64_t deltaMs = time.
End ();
 
  343 runBench (
void (*bench) (uint32_t), uint32_t n, uint32_t minIterations, 
char const *name)
 
  346   for (uint32_t i = 0; i < minIterations; i++)
 
  349       minDelay = 
std::min(minDelay, delay);
 
  354   std::cout << ps << 
" packets/s" 
  355             << 
" (" << minDelay << 
" ms elapsed)\t" 
  360 int main (
int argc, 
char *argv[])
 
  363   uint32_t minIterations = 1;
 
  364   bool enablePrinting = 
false;
 
  367   cmd.
Usage (
"Benchmark Packet class");
 
  368   cmd.
AddValue (
"n", 
"number of iterations", n);
 
  369   cmd.
AddValue (
"min-iterations", 
"number of subiterations to minimize iteration time over", minIterations);
 
  370   cmd.
AddValue (
"enable-printing", 
"enable packet printing", enablePrinting);
 
  371   cmd.
Parse (argc, argv);
 
  375       std::cerr << 
"Error-- number of packets must be specified " <<
 
  376         "by command-line argument --n=(number of packets)" << std::endl;
 
  379   std::cout << 
"Running bench-packets with n=" << n << std::endl;
 
  380   std::cout << 
"All tests begin by adding UDP and IPv4 headers." << std::endl;
 
  382   runBench (&
benchA, n, minIterations, 
"Copy packet, remove headers");
 
  385   runBench (&
benchD, n, minIterations, 
"Intermixed add/remove headers and tags");
 
uint32_t RemoveHeader(Header &header)
Deserialize and remove the header from the internal buffer. 
static void C1(Ptr< Packet > p)
static void benchFragment(uint32_t n)
static void benchByteTags(uint32_t n)
void AddPacketTag(const Tag &tag) const 
Add a packet tag. 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
static std::string GetName(void)
Get the bench tag name. 
TAG_BUFFER_INLINE uint8_t ReadU8(void)
iterator in a Buffer instance 
void Usage(const std::string usage)
Supply the program usage and documentation. 
Ptr< Packet > CreateFragment(uint32_t start, uint32_t length) const 
Create a new packet which contains a fragment of the original packet. 
void AddAtEnd(Ptr< const Packet > packet)
Concatenate the input packet at the end of the current packet. 
Measure elapsed wall clock time in milliseconds. 
NS_ASSERT_MSG(false,"Ipv4AddressGenerator::MaskToIndex(): Impossible")
static void benchA(uint32_t n)
virtual uint32_t GetSerializedSize(void) const 
void Start(void)
Start a measure. 
static uint64_t runBenchOneIteration(void(*bench)(uint32_t), uint32_t n)
static void benchD(uint32_t n)
Parse command-line arguments. 
static void benchB(uint32_t n)
static TypeId GetTypeId(void)
Register this type. 
Ptr< Packet > Copy(void) const 
performs a COW copy of the packet. 
tag a set of bytes in a packet 
virtual TypeId GetInstanceTypeId(void) const 
Get the most derived TypeId for this Object. 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
virtual void Serialize(TagBuffer buf) const 
TAG_BUFFER_INLINE void WriteU8(uint8_t v)
static void runBench(void(*bench)(uint32_t), uint32_t n, uint32_t minIterations, char const *name)
BenchTag class used for benchmarking packet serialization/deserialization. 
void WriteU8(uint8_t data)
void AddValue(const std::string &name, const std::string &help, T &value)
Add a program argument, assigning to POD. 
bool RemovePacketTag(Tag &tag)
Remove a packet tag. 
void Print(ComponentCarrier cc)
virtual void Print(std::ostream &os) const 
void Parse(int argc, char *argv[])
Parse the program arguments. 
static void C2(Ptr< Packet > p)
static void benchC(uint32_t n)
int64_t End(void)
Stop measuring the time since Start() was called. 
a unique identifier for an interface. 
TypeId SetParent(TypeId tid)
Set the parent TypeId. 
void AddHeader(const Header &header)
Add header to this packet. 
void AddByteTag(const Tag &tag) const 
Tag each byte included in this packet with a new byte tag. 
virtual void Deserialize(TagBuffer buf)