blob: 05c2fe7fa1965caafea4a71f65f470c7d66f62c8 [file] [log] [blame]
#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();
/**
* 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
*/
inline size_t getHeaderLen() { return sizeof(uint32_t); }
/**
* Does nothing for this layer
*/
void computeCalculateFields() {}
std::string toString();
OsiModelLayer getOsiModelLayer() { return OsiModelDataLinkLayer; }
};
} // namespace pcpp
#endif /* PACKETPP_NULL_LOOPBACK_LAYER */