add packet type logging
authormathieu@mathieu.inria.fr
Wed, 28 Mar 2007 18:33:03 +0200
changeset 388 306ff042af2f
parent 387 fd2186a4520f
child 389 d8f84756cf21
add packet type logging
examples/simple-p2p.cc
--- a/examples/simple-p2p.cc	Wed Mar 28 17:58:17 2007 +0200
+++ b/examples/simple-p2p.cc	Wed Mar 28 18:33:03 2007 +0200
@@ -81,6 +81,7 @@
   void TraceAllQueues (void);
   void TraceAllNetDeviceRx (void);
 private:
+  void PrintType (Packet const &p);
   void LogDevQueue (TraceContext const &context, const Packet &p);
   void LogDevRx (TraceContext const &context, Packet &p);
   std::ofstream m_os;
@@ -107,8 +108,46 @@
                       MakeCallback (&AsciiTrace::LogDevRx, this));
 }
 
+void
+AsciiTrace::PrintType (Packet const &packet)
+{
+  Packet p = packet;
+  LlcSnapHeader llc;
+  p.Peek (llc);
+  p.Remove (llc);
+  switch (llc.GetType ())
+    {
+    case 0x0800: {
+      Ipv4Header ipv4;
+      p.Peek (ipv4);
+      p.Remove (ipv4);
+      if (ipv4.GetProtocol () == 17)
+        {
+          UdpHeader udp;
+          p.Peek (udp);
+          p.Remove (udp);
+          m_os << "udp size=" << p.GetSize ();
+        }
+    } break;
+    case 0x0806: {
+      ArpHeader arp;
+      p.Peek (arp);
+      p.Remove (arp);
+      m_os << "arp ";
+      if (arp.IsRequest ())
+        {
+          m_os << "request";
+        }
+      else
+        {
+          m_os << "reply ";
+        }
+    } break;
+    }
+} 
+
 void 
-AsciiTrace::LogDevQueue (TraceContext const &context, Packet const &p)
+AsciiTrace::LogDevQueue (TraceContext const &context, Packet const &packet)
 {
   enum Queue::TraceType type;
   context.Get (type);
@@ -131,7 +170,8 @@
   Ipv4::InterfaceIndex interfaceIndex;
   context.Get (interfaceIndex);
   m_os << "interface=" << interfaceIndex << " ";
-  m_os << "pkt-uid=" << p.GetUid () << " ";
+  m_os << "pkt-uid=" << packet.GetUid () << " ";
+  PrintType (packet);
   m_os << std::endl;
 }
 void 
@@ -145,6 +185,7 @@
   context.Get (interfaceIndex);
   m_os << "interface=" << interfaceIndex << " ";
   m_os << "pkt-uid=" << p.GetUid () << " ";
+  PrintType (p);
   m_os << std::endl;  
 }