Coverage Report

Created: 2026-07-16 07:15

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/PcapPlusPlus/Packet++/src/NullLoopbackLayer.cpp
Line
Count
Source
1
#include "NullLoopbackLayer.h"
2
#include "EthLayer.h"
3
#include "IPv4Layer.h"
4
#include "IPv6Layer.h"
5
#include "PayloadLayer.h"
6
7
namespace pcpp
8
{
9
10
111
#define BSWAP16(x) (((x) >> 8) | ((x) << 8))
11
13.0k
#define BSWAP32(x) (((x) >> 24) | (((x) & 0x00FF'0000) >> 8) | (((x) & 0x0000'FF00) << 8) | ((x) << 24))
12
13
14.9k
#define IEEE_802_3_MAX_LEN 0x5dc
14
15
  NullLoopbackLayer::NullLoopbackLayer(uint32_t family)
16
0
  {
17
0
    allocData(sizeof(uint32_t));
18
0
    m_Protocol = NULL_LOOPBACK;
19
20
0
    setFamily(family);
21
0
  }
22
23
  uint32_t NullLoopbackLayer::getFamily() const
24
14.9k
  {
25
14.9k
    uint32_t family = *(reinterpret_cast<uint32_t*>(m_Data));
26
14.9k
    if ((family & 0xFFFF'0000) != 0)
27
13.8k
    {
28
13.8k
      if ((family & 0xFF00'0000) == 0 && (family & 0x00FF'0000) < 0x0006'0000)
29
759
      {
30
759
        family >>= 16;
31
759
      }
32
13.0k
      else
33
13.0k
      {
34
13.0k
        family = BSWAP32(family);
35
13.0k
      }
36
13.8k
    }
37
1.12k
    else if ((family & 0x0000'00FF) == 0 && (family & 0x0000'FF00) < 0x0000'0600)
38
111
    {
39
111
      family = BSWAP16(family & 0xFFFF);
40
111
    }
41
42
14.9k
    return family;
43
14.9k
  }
44
45
  void NullLoopbackLayer::setFamily(uint32_t family)
46
0
  {
47
0
    *m_Data = family;
48
0
  }
49
50
  void NullLoopbackLayer::parseNextLayer()
51
14.9k
  {
52
14.9k
    uint8_t* payload = m_Data + sizeof(uint32_t);
53
14.9k
    size_t payloadLen = m_DataLen - sizeof(uint32_t);
54
55
14.9k
    uint32_t family = getFamily();
56
14.9k
    if (family > IEEE_802_3_MAX_LEN)
57
11.4k
    {
58
11.4k
      uint16_t ethType = static_cast<uint16_t>(family);
59
11.4k
      switch (ethType)
60
11.4k
      {
61
8.80k
      case PCPP_ETHERTYPE_IP:
62
8.80k
      {
63
8.80k
        tryConstructNextLayerWithFallback<IPv4Layer, PayloadLayer>(payload, payloadLen);
64
8.80k
        return;
65
0
      }
66
0
      case PCPP_ETHERTYPE_IPV6:
67
0
      {
68
0
        tryConstructNextLayerWithFallback<IPv6Layer, PayloadLayer>(payload, payloadLen);
69
0
        return;
70
0
      }
71
2.67k
      default:
72
2.67k
      {
73
2.67k
        constructNextLayer<PayloadLayer>(payload, payloadLen);
74
2.67k
        return;
75
0
      }
76
11.4k
      }
77
11.4k
    }
78
79
3.44k
    switch (family)
80
3.44k
    {
81
289
    case PCPP_BSD_AF_INET:
82
289
    {
83
289
      tryConstructNextLayerWithFallback<IPv4Layer, PayloadLayer>(payload, payloadLen);
84
289
      break;
85
0
    }
86
580
    case PCPP_BSD_AF_INET6_BSD:
87
580
    case PCPP_BSD_AF_INET6_FREEBSD:
88
2.26k
    case PCPP_BSD_AF_INET6_DARWIN:
89
2.26k
    {
90
2.26k
      tryConstructNextLayerWithFallback<IPv6Layer, PayloadLayer>(payload, payloadLen);
91
2.26k
      break;
92
580
    }
93
900
    default:
94
900
    {
95
900
      constructNextLayer<PayloadLayer>(payload, payloadLen);
96
900
      break;
97
580
    }
98
3.44k
    }
99
3.44k
  }
100
101
  std::string NullLoopbackLayer::toString() const
102
6.97k
  {
103
6.97k
    return "Null/Loopback";
104
6.97k
  }
105
106
}  // namespace pcpp