/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 |