samples/main-packet-printer.cc
changeset 901 454dbce6dc4e
parent 893 9d50280ae588
child 913 f1a5508f155e
--- a/samples/main-packet-printer.cc	Thu Jun 28 11:07:38 2007 +0200
+++ b/samples/main-packet-printer.cc	Thu Jun 28 11:48:37 2007 +0200
@@ -2,70 +2,25 @@
 #include "ns3/packet.h"
 #include "ns3/header.h"
 #include "ns3/packet-printer.h"
+#include "ns3/ipv4-header.h"
+#include "ns3/udp-header.h"
 
 using namespace ns3;
 
-#define MY_HEADER(name,size) \
-class MyHeader##name : public Header \
-{ \
-public: \
-  void Set (uint8_t v) \
-  { \
-    m_v = v; \
-  } \
-  uint8_t Get (void) const \
-  { \
-    return m_v; \
-  } \
-private: \
-  virtual std::string DoGetName (void) const \
-  { \
-    return #name; \
-  } \
-  virtual void PrintTo (std::ostream &os) const \
-  { \
-    uint32_t v = m_v; \
-    os << #name << ", v=" << v; \
-  } \
-  virtual uint32_t GetSerializedSize (void) const \
-  { \
-    return size; \
-  } \
-  virtual void SerializeTo (Buffer::Iterator start) const \
-  { \
-    start.WriteU8 (m_v, size); \
-  } \
-  virtual uint32_t DeserializeFrom (Buffer::Iterator start) \
-  { \
-    NS_ASSERT (size >= 1); \
-    m_v = start.ReadU8 (); \
-    for (uint32_t i = 2; i < size; i++) \
-      { \
-	NS_ASSERT (start.ReadU8 () == m_v); \
-      } \
-    return size; \
-  } \
-  uint8_t m_v; \
-};
-
-MY_HEADER(A,10);
-MY_HEADER(B,100);
-MY_HEADER(C,20);
 
 void DefaultPrint (void)
 {
   // We create a packet with 1000 bytes of zero payload
   // and add 3 headers to this packet.
   Packet p (1000);
-  MyHeaderA a;
-  MyHeaderB b;
-  MyHeaderC c;
-  a.Set (1);
-  b.Set (3);
-  c.Set (2);
-  p.AddHeader (a);
-  p.AddHeader (b);
-  p.AddHeader (c);
+  Ipv4Header ipv4;
+  UdpHeader udp;
+  ipv4.SetSource (Ipv4Address ("192.168.0.1"));
+  ipv4.SetDestination (Ipv4Address ("192.168.0.2"));
+  udp.SetSource (1025);
+  udp.SetDestination (80);
+  p.AddHeader (udp);
+  p.AddHeader (ipv4);
 
   std::cout << "full packet size=" << p.GetSize () << std::endl;
   p.Print (std::cout);
@@ -75,7 +30,7 @@
   // Now, we fragment our packet in 3 consecutive pieces.
   Packet p1 = p.CreateFragment (0, 2);
   Packet p2 = p.CreateFragment (2, 1000);
-  Packet p3 = p.CreateFragment (1002, 128);
+  Packet p3 = p.CreateFragment (1002, 26);
 
   std::cout << "fragment1" << std::endl;
   p1.Print (std::cout);
@@ -98,27 +53,26 @@
 
 void 
 DoPrintDefault (std::ostream &os,uint32_t packetUid, uint32_t size, 
-                     std::string &name, struct PacketPrinter::FragmentInformation info)
+                std::string &name, struct PacketPrinter::FragmentInformation info)
 {
-  os << "default name="<<name<<", size=" << size << ", [" << info.start << ":" << info.end << "]";
+  os << name <<" (size " << size << " trim_start " << info.start << " trim_end " << info.end << ")";
 }
 void
 DoPrintPayload (std::ostream & os,uint32_t packetUid,uint32_t size,
                 struct PacketPrinter::FragmentInformation info)
 {
-  os << "payload size="<<size<< ", [" << info.start << ":" << info.end << "]";
+  os << "PAYLOAD (size " << size << " trim_start " << info.start << " trim_end " << info.end << ")";
 }
 void 
-DoPrintMyHeaderA (std::ostream &os, uint32_t packetUid, uint32_t size, const MyHeaderA *headerA)
+DoPrintIpv4Header (std::ostream &os, uint32_t packetUid, uint32_t size, const Ipv4Header *ipv4)
 {
-  uint32_t v = headerA->Get ();
-  os << "A v=" << v;
+  os << "IPV4 " << ipv4->GetSource () << " > " << ipv4->GetDestination ();
 }
 void 
-DoPrintMyHeaderAFragment (std::ostream &os, uint32_t packetUid, uint32_t size,
-                             std::string &name, struct PacketPrinter::FragmentInformation info)
+DoPrintIpv4HeaderFragment (std::ostream &os, uint32_t packetUid, uint32_t size,
+                          std::string &name, struct PacketPrinter::FragmentInformation info)
 {
-  os << "A fragment";
+  os << "IPV4 fragment";
 }
 
 void NonDefaultPrint (void)
@@ -136,23 +90,21 @@
   printer.AddDefaultPrinter (MakeCallback (&DoPrintDefault));
   // set the payload print function
   printer.AddPayloadPrinter (MakeCallback (&DoPrintPayload));
-  // set the print function for the header type MyHeaderA.
-  printer.AddHeaderPrinter (MakeCallback (&DoPrintMyHeaderA),
-                            MakeCallback (&DoPrintMyHeaderAFragment));
+  // set the print function for the header type Ipv4Header.
+  printer.AddHeaderPrinter (MakeCallback (&DoPrintIpv4Header),
+                            MakeCallback (&DoPrintIpv4HeaderFragment));
 
 
   // We create a packet with 1000 bytes of zero payload
-  // and add 3 headers to this packet.
   Packet p (1000);
-  MyHeaderA a;
-  MyHeaderB b;
-  MyHeaderC c;
-  a.Set (1);
-  b.Set (3);
-  c.Set (2);
-  p.AddHeader (a);
-  p.AddHeader (b);
-  p.AddHeader (c);
+  Ipv4Header ipv4;
+  UdpHeader udp;
+  ipv4.SetSource (Ipv4Address ("192.168.0.1"));
+  ipv4.SetDestination (Ipv4Address ("192.168.0.2"));
+  udp.SetSource (1025);
+  udp.SetDestination (80);
+  p.AddHeader (udp);
+  p.AddHeader (ipv4);
 
   std::cout << "full packet size=" << p.GetSize () << std::endl;
   p.Print (std::cout, printer);
@@ -162,7 +114,7 @@
   // fragment our packet in 3 pieces
   Packet p1 = p.CreateFragment (0, 2);
   Packet p2 = p.CreateFragment (2, 1000);
-  Packet p3 = p.CreateFragment (1002, 128);
+  Packet p3 = p.CreateFragment (1002, 26);
   std::cout << "fragment1" << std::endl;
   p1.Print (std::cout, printer);
   std::cout << std::endl;