93 lines
2.3 KiB
C++
93 lines
2.3 KiB
C++
#ifndef PACKETPP_NULL_LOOPBACK_LAYER
|
|
#define PACKETPP_NULL_LOOPBACK_LAYER
|
|
|
|
/// @file
|
|
|
|
#include "Layer.h"
|
|
|
|
namespace pcpp
|
|
{
|
|
|
|
/** IPv4 protocol **/
|
|
#define PCPP_BSD_AF_INET 2
|
|
/** XEROX NS protocols */
|
|
#define PCPP_BSD_AF_NS 6
|
|
/** ISO */
|
|
#define PCPP_BSD_AF_ISO 7
|
|
/** AppleTalk */
|
|
#define PCPP_BSD_AF_APPLETALK 16
|
|
/** IPX */
|
|
#define PCPP_BSD_AF_IPX 23
|
|
/** OpenBSD (and probably NetBSD), BSD/OS IPv6 */
|
|
#define PCPP_BSD_AF_INET6_BSD 24
|
|
/** FreeBSD IPv6 */
|
|
#define PCPP_BSD_AF_INET6_FREEBSD 28
|
|
/** Darwin IPv6 */
|
|
#define PCPP_BSD_AF_INET6_DARWIN 30
|
|
|
|
/**
|
|
* @class NullLoopbackLayer
|
|
* Represents a NULL/Loopback layer
|
|
*/
|
|
class NullLoopbackLayer : public Layer
|
|
{
|
|
public:
|
|
/** A constructor that creates the layer from an existing packet raw data
|
|
* @param[in] data A pointer to the raw data
|
|
* @param[in] dataLen Size of the data in bytes
|
|
* @param[in] packet A pointer to the Packet instance where layer will be stored in
|
|
*/
|
|
NullLoopbackLayer(uint8_t* data, size_t dataLen, Packet* packet) : Layer(data, dataLen, NULL, packet) { m_Protocol = NULL_LOOPBACK; }
|
|
|
|
/**
|
|
* A constructor that allocates a new Null/Loopback header
|
|
* @param[in] family The family protocol to set
|
|
*/
|
|
NullLoopbackLayer(uint32_t family);
|
|
|
|
/**
|
|
* A destructor for this layer (does nothing)
|
|
*/
|
|
~NullLoopbackLayer() {}
|
|
|
|
/**
|
|
* @return The protocol family in this layer
|
|
*/
|
|
uint32_t getFamily() const;
|
|
|
|
/**
|
|
* Set a protocol family
|
|
* @param[in] family The family protocol to set
|
|
*/
|
|
void setFamily(uint32_t family);
|
|
|
|
|
|
// implement abstract methods
|
|
|
|
/**
|
|
* Identifies the next layers by family:
|
|
* - for ::PCPP_BSD_AF_INET the next layer is IPv4Layer
|
|
* - for ::PCPP_BSD_AF_INET6_BSD, ::PCPP_BSD_AF_INET6_FREEBSD, ::PCPP_BSD_AF_INET6_DARWIN the next layer is IPv6Layer
|
|
* - for other values the next layer in PayloadLayer (unknown protocol)
|
|
*/
|
|
void parseNextLayer();
|
|
|
|
/**
|
|
* @return Size of Null/Loopback header = 4B
|
|
*/
|
|
size_t getHeaderLen() const { return sizeof(uint32_t); }
|
|
|
|
/**
|
|
* Does nothing for this layer
|
|
*/
|
|
void computeCalculateFields() {}
|
|
|
|
std::string toString() const;
|
|
|
|
OsiModelLayer getOsiModelLayer() const { return OsiModelDataLinkLayer; }
|
|
};
|
|
|
|
} // namespace pcpp
|
|
|
|
#endif /* PACKETPP_NULL_LOOPBACK_LAYER */
|