diff --git a/utils/bench-packets.cc b/utils/bench-packets.cc index 6fe97ecb0..ca5b1484f 100644 --- a/utils/bench-packets.cc +++ b/utils/bench-packets.cc @@ -114,10 +114,72 @@ BenchHeader::Deserialize (Buffer::Iterator start) return N; } +template +class BenchTag : public Tag +{ +public: + static std::string GetName (void) { + std::ostringstream oss; + oss << "anon::BenchTag<" << N << ">"; + return oss.str (); + } + static TypeId GetTypeId (void) { + static TypeId tid = TypeId (GetName ().c_str ()) + .SetParent () + .AddConstructor () + .HideFromDocumentation () + ; + return tid; + } + virtual TypeId GetInstanceTypeId (void) const { + return GetTypeId (); + } + virtual uint32_t GetSerializedSize (void) const { + return N; + } + virtual void Serialize (TagBuffer buf) const { + for (uint32_t i = 0; i < N; ++i) + { + buf.WriteU8 (N); + } + } + virtual void Deserialize (TagBuffer buf) { + for (uint32_t i = 0; i < N; ++i) + { + buf.ReadU8 (); + } + } + BenchTag () + : Tag () {} +}; static void -benchPtrA (uint32_t n) +benchD (uint32_t n) +{ + BenchHeader<25> ipv4; + BenchHeader<8> udp; + BenchTag<16> tag1; + BenchTag<17> tag2; + + for (uint32_t i = 0; i < n; i++) { + Ptr p = Create (2000); + p->AddTag (tag1); + p->AddHeader (udp); + p->FindFirstMatchingTag (tag1); + p->AddTag (tag2); + p->AddHeader (ipv4); + Ptr o = p->Copy (); + o->RemoveHeader (ipv4); + p->FindFirstMatchingTag (tag2); + o->RemoveHeader (udp); + } +} + + + +static void +benchA (uint32_t n) { BenchHeader<25> ipv4; BenchHeader<8> udp; @@ -133,7 +195,7 @@ benchPtrA (uint32_t n) } static void -benchPtrB (uint32_t n) +benchB (uint32_t n) { BenchHeader<25> ipv4; BenchHeader<8> udp; @@ -146,7 +208,7 @@ benchPtrB (uint32_t n) } static void -ptrC2 (Ptr p) +C2 (Ptr p) { BenchHeader<8> udp; @@ -154,15 +216,15 @@ ptrC2 (Ptr p) } static void -ptrC1 (Ptr p) +C1 (Ptr p) { BenchHeader<25> ipv4; p->RemoveHeader (ipv4); - ptrC2 (p); + C2 (p); } static void -benchPtrC (uint32_t n) +benchC (uint32_t n) { BenchHeader<25> ipv4; BenchHeader<8> udp; @@ -171,7 +233,7 @@ benchPtrC (uint32_t n) Ptr p = Create (2000); p->AddHeader (udp); p->AddHeader (ipv4); - ptrC1 (p); + C1 (p); } } @@ -209,14 +271,16 @@ int main (int argc, char *argv[]) } std::cout << "Running bench-packets with n=" << n << std::endl; - runBench (&benchPtrA, n, "a"); - runBench (&benchPtrB, n, "b"); - runBench (&benchPtrC, n, "c"); + runBench (&benchA, n, "a"); + runBench (&benchB, n, "b"); + runBench (&benchC, n, "c"); + runBench (&benchD, n, "d"); Packet::EnableMetadata (); - runBench (&benchPtrA, n, "meta-a"); - runBench (&benchPtrB, n, "meta-b"); - runBench (&benchPtrC, n, "meta-c"); + runBench (&benchA, n, "meta-a"); + runBench (&benchB, n, "meta-b"); + runBench (&benchC, n, "meta-c"); + runBench (&benchD, n, "meta-d");