samples/main-packet-printer.cc
changeset 1866 e7dbcc4df546
parent 1141 a75fc1741700
child 2834 1aab57845b07
equal deleted inserted replaced
1865:829dc1815014 1866:e7dbcc4df546
    47 
    47 
    48 void DefaultPrint (void)
    48 void DefaultPrint (void)
    49 {
    49 {
    50   // We create a packet with 1000 bytes of zero payload
    50   // We create a packet with 1000 bytes of zero payload
    51   // and add 3 headers to this packet.
    51   // and add 3 headers to this packet.
    52   Packet p (1000);
    52   Ptr<Packet> p = Create<Packet> (1000);
    53   Ipv4Header ipv4;
    53   Ipv4Header ipv4;
    54   UdpHeader udp;
    54   UdpHeader udp;
    55   ipv4.SetSource (Ipv4Address ("192.168.0.1"));
    55   ipv4.SetSource (Ipv4Address ("192.168.0.1"));
    56   ipv4.SetDestination (Ipv4Address ("192.168.0.2"));
    56   ipv4.SetDestination (Ipv4Address ("192.168.0.2"));
    57   udp.SetSource (1025);
    57   udp.SetSource (1025);
    58   udp.SetDestination (80);
    58   udp.SetDestination (80);
    59   udp.SetPayloadSize (1000);
    59   udp.SetPayloadSize (1000);
    60   p.AddHeader (udp);
    60   p->AddHeader (udp);
    61   p.AddHeader (ipv4);
    61   p->AddHeader (ipv4);
    62 
    62 
    63   std::cout << "full packet size=" << p.GetSize () << std::endl;
    63   std::cout << "full packet size=" << p->GetSize () << std::endl;
    64   // Here, invoke the default Print routine, directed to std out
    64   // Here, invoke the default Print routine, directed to std out
    65   p.Print (std::cout);
    65   p->Print (std::cout);
    66   std::cout << std::endl;
    66   std::cout << std::endl;
    67 
    67 
    68 
    68 
    69   // Now, we fragment our packet in 3 consecutive pieces.
    69   // Now, we fragment our packet in 3 consecutive pieces.
    70   Packet p1 = p.CreateFragment (0, 2);
    70   Ptr<Packet> p1 = p->CreateFragment (0, 2);
    71   Packet p2 = p.CreateFragment (2, 1000);
    71   Ptr<Packet> p2 = p->CreateFragment (2, 1000);
    72   Packet p3 = p.CreateFragment (1002, 26);
    72   Ptr<Packet> p3 = p->CreateFragment (1002, 26);
    73 
    73 
    74   std::cout << "fragment1" << std::endl;
    74   std::cout << "fragment1" << std::endl;
    75   p1.Print (std::cout);
    75   p1->Print (std::cout);
    76   std::cout << std::endl;
    76   std::cout << std::endl;
    77   std::cout << "fragment2" << std::endl;
    77   std::cout << "fragment2" << std::endl;
    78   p2.Print (std::cout);
    78   p2->Print (std::cout);
    79   std::cout << std::endl;
    79   std::cout << std::endl;
    80   std::cout << "fragment3" << std::endl;
    80   std::cout << "fragment3" << std::endl;
    81   p3.Print (std::cout);
    81   p3->Print (std::cout);
    82   std::cout << std::endl;
    82   std::cout << std::endl;
    83 
    83 
    84   // And, finally, we re-aggregate the 3 consecutive pieces.
    84   // And, finally, we re-aggregate the 3 consecutive pieces.
    85   Packet aggregate = p1;
    85   Ptr<Packet> aggregate = p1->Copy ();
    86   aggregate.AddAtEnd (p2);
    86   aggregate->AddAtEnd (p2);
    87   aggregate.AddAtEnd (p3);
    87   aggregate->AddAtEnd (p3);
    88   std::cout << "aggregated" << std::endl;
    88   std::cout << "aggregated" << std::endl;
    89   aggregate.Print (std::cout);
    89   aggregate->Print (std::cout);
    90   std::cout << std::endl;
    90   std::cout << std::endl;
    91 }
    91 }
    92 
    92 
    93 void
    93 void
    94 DoPrintPayload (std::ostream & os,uint32_t packetUid,uint32_t size,
    94 DoPrintPayload (std::ostream & os,uint32_t packetUid,uint32_t size,
   126   printer.SetHeaderPrinter (MakeCallback (&DoPrintIpv4Header),
   126   printer.SetHeaderPrinter (MakeCallback (&DoPrintIpv4Header),
   127                             MakeCallback (&DoPrintIpv4HeaderFragment));
   127                             MakeCallback (&DoPrintIpv4HeaderFragment));
   128 
   128 
   129 
   129 
   130   // We create a packet with 1000 bytes of zero payload
   130   // We create a packet with 1000 bytes of zero payload
   131   Packet p (1000);
   131   Ptr<Packet> p = Create<Packet> (1000);
   132   Ipv4Header ipv4;
   132   Ipv4Header ipv4;
   133   UdpHeader udp;
   133   UdpHeader udp;
   134   ipv4.SetSource (Ipv4Address ("192.168.0.1"));
   134   ipv4.SetSource (Ipv4Address ("192.168.0.1"));
   135   ipv4.SetDestination (Ipv4Address ("192.168.0.2"));
   135   ipv4.SetDestination (Ipv4Address ("192.168.0.2"));
   136   udp.SetSource (1025);
   136   udp.SetSource (1025);
   137   udp.SetDestination (80);
   137   udp.SetDestination (80);
   138   udp.SetPayloadSize (1000);
   138   udp.SetPayloadSize (1000);
   139   p.AddHeader (udp);
   139   p->AddHeader (udp);
   140   p.AddHeader (ipv4);
   140   p->AddHeader (ipv4);
   141 
   141 
   142   std::cout << "full packet size=" << p.GetSize () << std::endl;
   142   std::cout << "full packet size=" << p->GetSize () << std::endl;
   143   p.Print (std::cout, printer);
   143   p->Print (std::cout, printer);
   144   std::cout << std::endl;
   144   std::cout << std::endl;
   145 
   145 
   146 
   146 
   147   // fragment our packet in 3 pieces
   147   // fragment our packet in 3 pieces
   148   Packet p1 = p.CreateFragment (0, 2);
   148   Ptr<Packet> p1 = p->CreateFragment (0, 2);
   149   Packet p2 = p.CreateFragment (2, 1000);
   149   Ptr<Packet> p2 = p->CreateFragment (2, 1000);
   150   Packet p3 = p.CreateFragment (1002, 26);
   150   Ptr<Packet> p3 = p->CreateFragment (1002, 26);
   151   std::cout << "fragment1" << std::endl;
   151   std::cout << "fragment1" << std::endl;
   152   p1.Print (std::cout, printer);
   152   p1->Print (std::cout, printer);
   153   std::cout << std::endl;
   153   std::cout << std::endl;
   154   std::cout << "fragment2" << std::endl;
   154   std::cout << "fragment2" << std::endl;
   155   p2.Print (std::cout, printer);
   155   p2->Print (std::cout, printer);
   156   std::cout << std::endl;
   156   std::cout << std::endl;
   157   std::cout << "fragment3" << std::endl;
   157   std::cout << "fragment3" << std::endl;
   158   p3.Print (std::cout, printer);
   158   p3->Print (std::cout, printer);
   159   std::cout << std::endl;
   159   std::cout << std::endl;
   160 
   160 
   161   // aggregate all 3 fragments of the original packet
   161   // aggregate all 3 fragments of the original packet
   162   // to reconstruct a copy of the original packet.
   162   // to reconstruct a copy of the original packet.
   163   Packet aggregate = p1;
   163   Ptr<Packet> aggregate = p1->Copy ();
   164   aggregate.AddAtEnd (p2);
   164   aggregate->AddAtEnd (p2);
   165   aggregate.AddAtEnd (p3);
   165   aggregate->AddAtEnd (p3);
   166   std::cout << "aggregated" << std::endl;
   166   std::cout << "aggregated" << std::endl;
   167   aggregate.Print (std::cout, printer);
   167   aggregate->Print (std::cout, printer);
   168   std::cout << std::endl;
   168   std::cout << std::endl;
   169 }
   169 }
   170 
   170 
   171 
   171 
   172 
   172