Coverage Report

Created: 2026-10-17 07:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/PcapPlusPlus/Packet++/header/NullLoopbackLayer.h
Line
Count
Source
1
#pragma once
2
3
#include "Layer.h"
4
5
/// @file
6
7
/// @namespace pcpp
8
/// @brief The main namespace for the PcapPlusPlus lib
9
namespace pcpp
10
{
11
12
/// IPv4 protocol *
13
264
#define PCPP_BSD_AF_INET 2
14
/// XEROX NS protocols
15
#define PCPP_BSD_AF_NS 6
16
/// ISO
17
#define PCPP_BSD_AF_ISO 7
18
/// AppleTalk
19
#define PCPP_BSD_AF_APPLETALK 16
20
/// IPX
21
#define PCPP_BSD_AF_IPX 23
22
/// OpenBSD (and probably NetBSD), BSD/OS IPv6
23
321
#define PCPP_BSD_AF_INET6_BSD 24
24
/// FreeBSD IPv6
25
321
#define PCPP_BSD_AF_INET6_FREEBSD 28
26
/// Darwin IPv6
27
1.07k
#define PCPP_BSD_AF_INET6_DARWIN 30
28
29
  /// @class NullLoopbackLayer
30
  /// Represents a Null/Loopback layer
31
  class NullLoopbackLayer : public Layer
32
  {
33
  public:
34
    /// A constructor that creates the layer from an existing packet raw data
35
    /// @param[in] data A pointer to the raw data
36
    /// @param[in] dataLen Size of the data in bytes
37
    /// @param[in] packet A pointer to the Packet instance where layer will be stored in
38
    NullLoopbackLayer(uint8_t* data, size_t dataLen, Packet* packet)
39
12.6k
        : Layer(data, dataLen, nullptr, packet, NULL_LOOPBACK)
40
12.6k
    {}
41
42
    /// A constructor that allocates a new Null/Loopback header
43
    /// @param[in] family The family protocol to set
44
    explicit NullLoopbackLayer(uint32_t family);
45
46
    /// A destructor for this layer (does nothing)
47
    ~NullLoopbackLayer() override = default;
48
49
    /// @return The protocol family in this layer
50
    uint32_t getFamily() const;
51
52
    /// Set a protocol family
53
    /// @param[in] family The family protocol to set
54
    void setFamily(uint32_t family);
55
56
    // implement abstract methods
57
58
    /// Identifies the next layers by family:
59
    /// - for ::PCPP_BSD_AF_INET the next layer is IPv4Layer
60
    /// - for ::PCPP_BSD_AF_INET6_BSD, ::PCPP_BSD_AF_INET6_FREEBSD, ::PCPP_BSD_AF_INET6_DARWIN the next layer is
61
    /// IPv6Layer
62
    /// - for other values the next layer in PayloadLayer (unknown protocol)
63
    void parseNextLayer() override;
64
65
    /// @return Size of Null/Loopback header = 4B
66
    size_t getHeaderLen() const override
67
2.51k
    {
68
2.51k
      return sizeof(uint32_t);
69
2.51k
    }
70
71
    /// Does nothing for this layer
72
    void computeCalculateFields() override
73
2.51k
    {}
74
75
    std::string toString() const override;
76
77
    OsiModelLayer getOsiModelLayer() const override
78
2.51k
    {
79
2.51k
      return OsiModelDataLinkLayer;
80
2.51k
    }
81
82
    /// @brief Check if the data passes minimal validity checks for Null/Loopback layer
83
    /// @param data A pointer to the data
84
    /// @param dataLen Size of the data in bytes
85
    /// @return True if the data can represent a valid Null/Loopback layer, false otherwise
86
    bool static isDataValid(const uint8_t* data, size_t dataLen)
87
12.9k
    {
88
12.9k
      return data != nullptr && dataLen >= sizeof(uint32_t);
89
12.9k
    }
90
91
    /// @struct SerializedFields
92
    /// Fields written by NullLoopbackLayer's serializeLayer(), in addition to
93
    /// Layer::SerializedFields.
94
    struct SerializedFields : Layer::SerializedFields
95
    {
96
      /// @return All field descriptors for NullLoopbackLayer
97
      static std::vector<FieldDescriptor> all()
98
0
      {
99
0
        auto result = Layer::SerializedFields::all();
100
0
        std::initializer_list<FieldDescriptor> extra{ Family };
101
0
        std::copy(extra.begin(), extra.end(), std::back_inserter(result));
102
0
        return result;
103
0
      }
104
105
      /// @brief Protocol family (AF_* value) of the payload
106
      static const FieldDescriptor Family;
107
    };
108
109
  protected:
110
    void serializeLayer(ObjectScope& serializer) const override;
111
  };
112
}  // namespace pcpp