PcapPlusPlus  Next
TpktLayer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "EthLayer.h"
4 #include "Layer.h"
5 
7 
10 namespace pcpp
11 {
14 #pragma pack(push, 1)
15  struct tpkthdr
16  {
18  uint8_t version;
20  uint8_t reserved;
22  uint16_t length;
23  };
24 #pragma pack(pop)
25  static_assert(sizeof(tpkthdr) == 4, "tpkthdr size is not 4 bytes");
26 
29  class TpktLayer : public Layer
30  {
31  public:
37  TpktLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
38  : Layer(data, dataLen, prevLayer, packet, TPKT)
39  {}
40 
44  TpktLayer(uint8_t version, uint16_t length);
45 
46  ~TpktLayer() override = default;
47 
49  uint8_t getReserved() const;
50 
52  uint8_t getVersion() const;
53 
55  uint16_t getLength() const;
56 
59  void setVersion(uint8_t version) const;
60 
63  void setLength(uint16_t length) const;
64 
66  size_t getHeaderLen() const override
67  {
68  return sizeof(tpkthdr);
69  }
70 
72  void computeCalculateFields() override
73  {}
74 
76  void parseNextLayer() override;
77 
82  static bool isTpktPort(uint16_t portSrc, uint16_t portDst)
83  {
84  return portSrc == 102 || portDst == 102;
85  }
86 
91  static bool isDataValid(const uint8_t* data, size_t dataSize)
92  {
93  return canReinterpretAs<tpkthdr>(data, dataSize);
94  }
95 
96  std::string toString() const override;
97 
99  {
100  return OsiModelTransportLayer;
101  }
102 
107  {
109  static std::vector<FieldDescriptor> all()
110  {
111  auto result = Layer::SerializedFields::all();
112  std::initializer_list<FieldDescriptor> extra{ Version };
113  std::copy(extra.begin(), extra.end(), std::back_inserter(result));
114  return result;
115  }
116 
118  static const FieldDescriptor Version;
119  };
120 
121  protected:
122  void serializeLayer(ObjectScope& serializer) const override;
123 
124  private:
129  tpkthdr* getTpktHeader() const
130  {
131  return reinterpret_cast<tpkthdr*>(m_Data);
132  }
133  };
134 
135 } // namespace pcpp
Definition: Layer.h:117
Definition: Serializers.h:230
Definition: Packet.h:49
Definition: TpktLayer.h:30
void setVersion(uint8_t version) const
size_t getHeaderLen() const override
Definition: TpktLayer.h:66
std::string toString() const override
uint8_t getVersion() const
TpktLayer(uint8_t version, uint16_t length)
uint16_t getLength() const
static bool isTpktPort(uint16_t portSrc, uint16_t portDst)
Definition: TpktLayer.h:82
uint8_t getReserved() const
void computeCalculateFields() override
Does nothing for this layer.
Definition: TpktLayer.h:72
TpktLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
Definition: TpktLayer.h:37
static bool isDataValid(const uint8_t *data, size_t dataSize)
Definition: TpktLayer.h:91
void serializeLayer(ObjectScope &serializer) const override
void parseNextLayer() override
Currently parses the rest of the packet as a COTP protocol or generic payload (PayloadLayer)
void setLength(uint16_t length) const
OsiModelLayer getOsiModelLayer() const override
Definition: TpktLayer.h:98
const ProtocolType TPKT
TPKT protocol.
Definition: ProtocolType.h:213
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:420
@ OsiModelTransportLayer
Transport layer (layer 4)
Definition: ProtocolType.h:428
Definition: Serializers.h:18
Definition: Layer.h:212
static std::vector< FieldDescriptor > all()
Definition: Layer.h:214
Definition: TpktLayer.h:107
static const FieldDescriptor Version
TPKT version.
Definition: TpktLayer.h:118
static std::vector< FieldDescriptor > all()
Definition: TpktLayer.h:109
Definition: TpktLayer.h:16
uint8_t version
message version
Definition: TpktLayer.h:18
uint8_t reserved
message reserved
Definition: TpktLayer.h:20
uint16_t length
message length
Definition: TpktLayer.h:22