From e47319fedaccb4b8b344653ba41588dee31d6f18 Mon Sep 17 00:00:00 2001 From: "Srivats P." Date: Thu, 31 Mar 2011 21:04:05 +0530 Subject: [PATCH] Implemented UDP (and UDPLite) PDML Protocol --- common/pdml_p.cpp | 38 ++++++++++++++++++++++++++++++++++++++ common/pdml_p.h | 10 ++++++++++ 2 files changed, 48 insertions(+) diff --git a/common/pdml_p.cpp b/common/pdml_p.cpp index dc9cc8d..a639901 100644 --- a/common/pdml_p.cpp +++ b/common/pdml_p.cpp @@ -35,6 +35,7 @@ along with this program. If not, see #include "snap.pb.h" #include "svlan.pb.h" #include "tcp.pb.h" +#include "udp.pb.h" #include "vlan.pb.h" #include @@ -209,6 +210,8 @@ PdmlReader::PdmlReader(OstProto::StreamConfigList *streams) factory_.insert("llc", PdmlLlcProtocol::createInstance); factory_.insert("ieee8021ad", PdmlSvlanProtocol::createInstance); factory_.insert("tcp", PdmlTcpProtocol::createInstance); + factory_.insert("udp", PdmlUdpProtocol::createInstance); + factory_.insert("udplite", PdmlUdpProtocol::createInstance); factory_.insert("vlan", PdmlVlanProtocol::createInstance); } @@ -1368,3 +1371,38 @@ void PdmlTcpProtocol::postProtocolHandler(OstProto::Protocol *pbProto, #endif } +// ---------------------------------------------------------- // +// PdmlUdpProtocol // +// ---------------------------------------------------------- // + +PdmlUdpProtocol::PdmlUdpProtocol() +{ + pdmlProtoName_ = "udp"; // OR udplite + ostProtoId_ = OstProto::Protocol::kUdpFieldNumber; + + fieldMap_.insert("udp.srcport", OstProto::Udp::kSrcPortFieldNumber); + fieldMap_.insert("udp.dstport", OstProto::Udp::kDstPortFieldNumber); + fieldMap_.insert("udp.length", OstProto::Udp::kTotlenFieldNumber); + fieldMap_.insert("udp.checksum_coverage", + OstProto::Udp::kTotlenFieldNumber); + fieldMap_.insert("udp.checksum", OstProto::Udp::kCksumFieldNumber); +} + +PdmlDefaultProtocol* PdmlUdpProtocol::createInstance() +{ + return new PdmlUdpProtocol(); +} + +void PdmlUdpProtocol::postProtocolHandler(OstProto::Protocol *pbProto, + OstProto::Stream *stream) +{ + OstProto::Udp *udp = pbProto->MutableExtension(OstProto::udp); + + qDebug("Udp: post\n"); + + udp->set_is_override_src_port(true); + udp->set_is_override_dst_port(true); + udp->set_is_override_totlen(true); + udp->set_is_override_cksum(true); +} + diff --git a/common/pdml_p.h b/common/pdml_p.h index 2220898..94de053 100644 --- a/common/pdml_p.h +++ b/common/pdml_p.h @@ -265,4 +265,14 @@ private: QByteArray segmentData_; }; +class PdmlUdpProtocol : public PdmlDefaultProtocol +{ +public: + PdmlUdpProtocol(); + + static PdmlDefaultProtocol* createInstance(); + virtual void postProtocolHandler(OstProto::Protocol *pbProto, + OstProto::Stream *stream); +}; + #endif