Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reformat Packet++ documentation to use triple-slash doxygen format. #1659

Draft
wants to merge 18 commits into
base: dev
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 50 additions & 83 deletions Packet++/header/ArpLayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,165 +6,132 @@

/// @file

/**
* \namespace pcpp
* \brief The main namespace for the PcapPlusPlus lib
*/
/// @namespace pcpp
/// @brief The main namespace for the PcapPlusPlus lib
namespace pcpp
{

/**
* @struct arphdr
* Represents an ARP protocol header
*/
/// @struct arphdr
/// Represents an ARP protocol header
#pragma pack(push, 1)
struct arphdr
{
/** Hardware type (HTYPE) */
/// Hardware type (HTYPE)
uint16_t hardwareType;
/** Protocol type (PTYPE). The permitted PTYPE values share a numbering space with those for EtherType */
/// Protocol type (PTYPE). The permitted PTYPE values share a numbering space with those for EtherType
uint16_t protocolType;
/** Hardware address length (HLEN). For IPv4, this has the value 0x0800 */
/// Hardware address length (HLEN). For IPv4, this has the value 0x0800
uint8_t hardwareSize;
/** Protocol length (PLEN). Length (in octets) of addresses used in the upper layer protocol. (The upper layer
* protocol specified in PTYPE.) IPv4 address size is 4 */
/// Protocol length (PLEN). Length (in octets) of addresses used in the upper layer protocol. (The upper layer
/// protocol specified in PTYPE.) IPv4 address size is 4
uint8_t protocolSize;
/** Specifies the operation that the sender is performing: 1 (::ARP_REQUEST) for request, 2 (::ARP_REPLY) for
* reply */
/// Specifies the operation that the sender is performing: 1 (::ARP_REQUEST) for request, 2 (::ARP_REPLY) for
/// reply
uint16_t opcode;
/** Sender hardware address (SHA) */
/// Sender hardware address (SHA)
uint8_t senderMacAddr[6];
/** Sender protocol address (SPA) */
/// Sender protocol address (SPA)
uint32_t senderIpAddr;
/** Target hardware address (THA) */
/// Target hardware address (THA)
uint8_t targetMacAddr[6];
/** Target protocol address (TPA) */
/// Target protocol address (TPA)
uint32_t targetIpAddr;
};
#pragma pack(pop)

/**
* An enum for ARP message type
*/
/// An enum for ARP message type
enum ArpOpcode
{
ARP_REQUEST = 0x0001, ///< ARP request
ARP_REPLY = 0x0002 ///< ARP reply (response)
};

/**
* @class ArpLayer
* Represents an ARP protocol layer. Currently only IPv4 ARP messages are supported
*/
/// @class ArpLayer
/// Represents an ARP protocol layer. Currently only IPv4 ARP messages are supported
class ArpLayer : public Layer
{
public:
/**
* A constructor that creates the layer from an existing packet raw data
* @param[in] data A pointer to the raw data (will be casted to @ref arphdr)
* @param[in] dataLen Size of the data in bytes
* @param[in] prevLayer A pointer to the previous layer
* @param[in] packet A pointer to the Packet instance where layer will be stored in
*/
/// A constructor that creates the layer from an existing packet raw data
/// @param[in] data A pointer to the raw data (will be casted to @ref arphdr)
/// @param[in] dataLen Size of the data in bytes
/// @param[in] prevLayer A pointer to the previous layer
/// @param[in] packet A pointer to the Packet instance where layer will be stored in
ArpLayer(uint8_t* data, size_t dataLen, Layer* prevLayer, Packet* packet)
: Layer(data, dataLen, prevLayer, packet, ARP)
{
m_DataLen = sizeof(arphdr);
}

/**
* A constructor that allocates a new ARP header
* @param[in] opCode ARP message type (ARP request or ARP reply)
* @param[in] senderMacAddr The sender MAC address (will be put in arphdr#senderMacAddr)
* @param[in] targetMacAddr The target MAC address (will be put in arphdr#targetMacAddr)
* @param[in] senderIpAddr The sender IP address (will be put in arphdr#senderIpAddr)
* @param[in] targetIpAddr The target IP address (will be put in arphdr#targetIpAddr)
*/
/// A constructor that allocates a new ARP header
/// @param[in] opCode ARP message type (ARP request or ARP reply)
/// @param[in] senderMacAddr The sender MAC address (will be put in arphdr#senderMacAddr)
/// @param[in] targetMacAddr The target MAC address (will be put in arphdr#targetMacAddr)
/// @param[in] senderIpAddr The sender IP address (will be put in arphdr#senderIpAddr)
/// @param[in] targetIpAddr The target IP address (will be put in arphdr#targetIpAddr)
ArpLayer(ArpOpcode opCode, const MacAddress& senderMacAddr, const MacAddress& targetMacAddr,
const IPv4Address& senderIpAddr, const IPv4Address& targetIpAddr);

~ArpLayer() override = default;

/**
* Get a pointer to the ARP header. Notice this points directly to the data, so every change will change the
* actual packet data
* @return A pointer to the @ref arphdr
*/
/// Get a pointer to the ARP header. Notice this points directly to the data, so every change will change the
/// actual packet data
/// @return A pointer to the @ref arphdr
inline arphdr* getArpHeader() const
{
return reinterpret_cast<arphdr*>(m_Data);
}

/**
* Get the sender hardware address (SHA) in the form of MacAddress
* @return A MacAddress containing the sender hardware address (SHA)
*/
/// Get the sender hardware address (SHA) in the form of MacAddress
/// @return A MacAddress containing the sender hardware address (SHA)
inline MacAddress getSenderMacAddress() const
{
return MacAddress(getArpHeader()->senderMacAddr);
}

/**
* Get the target hardware address (THA) in the form of MacAddress
* @return A MacAddress containing the target hardware address (THA)
*/
/// Get the target hardware address (THA) in the form of MacAddress
/// @return A MacAddress containing the target hardware address (THA)
inline MacAddress getTargetMacAddress() const
{
return MacAddress(getArpHeader()->targetMacAddr);
}

/**
* Get the sender protocol address (SPA) in the form of IPv4Address
* @return An IPv4Address containing the sender protocol address (SPA)
*/
/// Get the sender protocol address (SPA) in the form of IPv4Address
/// @return An IPv4Address containing the sender protocol address (SPA)
inline IPv4Address getSenderIpAddr() const
{
return getArpHeader()->senderIpAddr;
}

/**
* Get the target protocol address (TPA) in the form of IPv4Address
* @return An IPv4Address containing the target protocol address (TPA)
*/
/// Get the target protocol address (TPA) in the form of IPv4Address
/// @return An IPv4Address containing the target protocol address (TPA)
inline IPv4Address getTargetIpAddr() const
{
return getArpHeader()->targetIpAddr;
}

// implement abstract methods

/**
* Does nothing for this layer (ArpLayer is always last)
*/
/// Does nothing for this layer (ArpLayer is always last)
void parseNextLayer() override
{}

/**
* @return The size of @ref arphdr
*/
/// @return The size of @ref arphdr
size_t getHeaderLen() const override
{
return sizeof(arphdr);
}

/**
* Calculate the following fields:
* - @ref arphdr#hardwareType = Ethernet (1)
* - @ref arphdr#hardwareSize = 6
* - @ref arphdr#protocolType = ETHERTYPE_IP (assume IPv4 over ARP)
* - @ref arphdr#protocolSize = 4 (assume IPv4 over ARP)
* - if it's an ARP request: @ref arphdr#targetMacAddr = MacAddress("00:00:00:00:00:00")
*/
/// Calculate the following fields:
/// - @ref arphdr#hardwareType = Ethernet (1)
/// - @ref arphdr#hardwareSize = 6
/// - @ref arphdr#protocolType = ETHERTYPE_IP (assume IPv4 over ARP)
/// - @ref arphdr#protocolSize = 4 (assume IPv4 over ARP)
/// - if it's an ARP request: @ref arphdr#targetMacAddr = MacAddress("00:00:00:00:00:00")
void computeCalculateFields() override;

/**
* Is this packet an ARP request?
*/
/// Is this packet an ARP request?
bool isRequest() const;

/**
* Is this packet an ARP reply?
*/
/// Is this packet an ARP reply?
bool isReply() const;

std::string toString() const override;
Expand Down
Loading
Loading