Coverage Report

Created: 2026-10-17 07:07

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/PcapPlusPlus/Packet++/src/LLCLayer.cpp
Line
Count
Source
1
#define LOG_MODULE PacketLogModuleLLCLayer
2
3
#include "LLCLayer.h"
4
#include "PayloadLayer.h"
5
#include "StpLayer.h"
6
7
#include <cstring>
8
9
namespace pcpp
10
{
11
12
  LLCLayer::LLCLayer(uint8_t dsap, uint8_t ssap, uint8_t control)
13
0
  {
14
0
    allocData(sizeof(llc_header));
15
0
    m_Protocol = LLC;
16
17
    // Set values
18
0
    llc_header* header = getLlcHeader();
19
0
    header->dsap = dsap;
20
0
    header->ssap = ssap;
21
0
    header->control = control;
22
0
  }
23
24
  void LLCLayer::parseNextLayer()
25
0
  {
26
0
    if (m_DataLen <= sizeof(llc_header))
27
0
      return;
28
29
0
    llc_header* hdr = getLlcHeader();
30
0
    uint8_t* payload = m_Data + sizeof(llc_header);
31
0
    size_t payloadLen = m_DataLen - sizeof(llc_header);
32
33
0
    if (hdr->dsap == 0x42 && hdr->ssap == 0x42 && StpLayer::isDataValid(payload, payloadLen))
34
0
    {
35
0
      constructNextLayerFromFactory(StpLayer::parseStpLayer, payload, payloadLen);
36
0
    }
37
38
0
    if (!hasNextLayer())
39
0
    {
40
0
      constructNextLayer<PayloadLayer>(payload, payloadLen);
41
0
    }
42
0
  }
43
44
  std::string LLCLayer::toString() const
45
0
  {
46
0
    return "Logical Link Control";
47
0
  }
48
49
  bool LLCLayer::isDataValid(const uint8_t* data, size_t dataLen)
50
0
  {
51
0
    return dataLen >= sizeof(llc_header) && !(data[0] == 0xFF && data[1] == 0xFF);
52
0
  }
53
54
  const FieldDescriptor LLCLayer::SerializedFields::DSAP{ Layer::SerializedFields::MaxID + 1, "dsap" };
55
  const FieldDescriptor LLCLayer::SerializedFields::SSAP{ Layer::SerializedFields::MaxID + 2, "ssap" };
56
  const FieldDescriptor LLCLayer::SerializedFields::Control{ Layer::SerializedFields::MaxID + 3, "control" };
57
58
  void LLCLayer::serializeLayer(ObjectScope& serializer) const
59
0
  {
60
0
    auto* header = getLlcHeader();
61
0
    serializer.writeField(SerializedFields::DSAP, header->dsap);
62
0
    serializer.writeField(SerializedFields::SSAP, header->ssap);
63
0
    serializer.writeField(SerializedFields::Control, header->control);
64
0
  }
65
}  // namespace pcpp