Coverage Report

Created: 2025-07-11 07:47

/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
139
#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
258
#define PCPP_BSD_AF_INET6_BSD 24
24
/// FreeBSD IPv6
25
258
#define PCPP_BSD_AF_INET6_FREEBSD 28
26
/// Darwin IPv6
27
645
#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
1.42k
        : Layer(data, dataLen, nullptr, packet, NULL_LOOPBACK)
40
1.42k
    {}
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
444
    {
68
444
      return sizeof(uint32_t);
69
444
    }
70
71
    /// Does nothing for this layer
72
    void computeCalculateFields() override
73
444
    {}
74
75
    std::string toString() const override;
76
77
    OsiModelLayer getOsiModelLayer() const override
78
444
    {
79
444
      return OsiModelDataLinkLayer;
80
444
    }
81
  };
82
}  // namespace pcpp