/src/PcapPlusPlus/Packet++/header/NullLoopbackLayer.h
Line | Count | Source (jump to first uncovered line) |
1 | | #pragma once |
2 | | |
3 | | /// @file |
4 | | |
5 | | #include "Layer.h" |
6 | | |
7 | | namespace pcpp |
8 | | { |
9 | | |
10 | | /** IPv4 protocol **/ |
11 | 3.70k | #define PCPP_BSD_AF_INET 2 |
12 | | /** XEROX NS protocols */ |
13 | | #define PCPP_BSD_AF_NS 6 |
14 | | /** ISO */ |
15 | | #define PCPP_BSD_AF_ISO 7 |
16 | | /** AppleTalk */ |
17 | | #define PCPP_BSD_AF_APPLETALK 16 |
18 | | /** IPX */ |
19 | | #define PCPP_BSD_AF_IPX 23 |
20 | | /** OpenBSD (and probably NetBSD), BSD/OS IPv6 */ |
21 | 0 | #define PCPP_BSD_AF_INET6_BSD 24 |
22 | | /** FreeBSD IPv6 */ |
23 | 449 | #define PCPP_BSD_AF_INET6_FREEBSD 28 |
24 | | /** Darwin IPv6 */ |
25 | 617 | #define PCPP_BSD_AF_INET6_DARWIN 30 |
26 | | |
27 | | /** |
28 | | * @class NullLoopbackLayer |
29 | | * Represents a NULL/Loopback layer |
30 | | */ |
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 | | */ |
39 | 10.6k | NullLoopbackLayer(uint8_t* data, size_t dataLen, Packet* packet) : Layer(data, dataLen, NULL, packet) { m_Protocol = NULL_LOOPBACK; } |
40 | | |
41 | | /** |
42 | | * A constructor that allocates a new Null/Loopback header |
43 | | * @param[in] family The family protocol to set |
44 | | */ |
45 | | explicit NullLoopbackLayer(uint32_t family); |
46 | | |
47 | | /** |
48 | | * A destructor for this layer (does nothing) |
49 | | */ |
50 | 0 | ~NullLoopbackLayer() {} |
51 | | |
52 | | /** |
53 | | * @return The protocol family in this layer |
54 | | */ |
55 | | uint32_t getFamily() const; |
56 | | |
57 | | /** |
58 | | * Set a protocol family |
59 | | * @param[in] family The family protocol to set |
60 | | */ |
61 | | void setFamily(uint32_t family); |
62 | | |
63 | | |
64 | | // implement abstract methods |
65 | | |
66 | | /** |
67 | | * Identifies the next layers by family: |
68 | | * - for ::PCPP_BSD_AF_INET the next layer is IPv4Layer |
69 | | * - for ::PCPP_BSD_AF_INET6_BSD, ::PCPP_BSD_AF_INET6_FREEBSD, ::PCPP_BSD_AF_INET6_DARWIN the next layer is IPv6Layer |
70 | | * - for other values the next layer in PayloadLayer (unknown protocol) |
71 | | */ |
72 | | void parseNextLayer(); |
73 | | |
74 | | /** |
75 | | * @return Size of Null/Loopback header = 4B |
76 | | */ |
77 | 2.65k | size_t getHeaderLen() const { return sizeof(uint32_t); } |
78 | | |
79 | | /** |
80 | | * Does nothing for this layer |
81 | | */ |
82 | 2.63k | void computeCalculateFields() {} |
83 | | |
84 | | std::string toString() const; |
85 | | |
86 | 2.63k | OsiModelLayer getOsiModelLayer() const { return OsiModelDataLinkLayer; } |
87 | | }; |
88 | | |
89 | | } // namespace pcpp |