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

Merged
merged 23 commits into from
Feb 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
2225cca
Converted some files to tripple slash docs.
Dimi1010 Dec 10, 2024
2d09342
Converted more files.
Dimi1010 Dec 10, 2024
7761cfe
Converted more files.
Dimi1010 Dec 10, 2024
847091d
more conversions...
Dimi1010 Dec 10, 2024
97e9f8f
Converted more files
Dimi1010 Dec 11, 2024
ec7450a
Converted more files.
Dimi1010 Dec 11, 2024
217a620
converted files
Dimi1010 Dec 13, 2024
11d63ad
converted more files.
Dimi1010 Dec 15, 2024
078a190
Reformatted SSH layer.
Dimi1010 Dec 15, 2024
f4190a4
Converted SSL layer files.
Dimi1010 Dec 15, 2024
3cc0e7c
Attempt at suppressing multi-line comment warning due to backslashes …
Dimi1010 Dec 17, 2024
e1bfb81
Converted Stplayer.
Dimi1010 Dec 17, 2024
61d6154
Converted remaining files.
Dimi1010 Dec 17, 2024
d940c6a
Merge remote-tracking branch 'upstream/dev' into refactor/triple-slas…
Dimi1010 Jan 9, 2025
62cd151
Wrapped diagrams in ASCII borders to avoid the multi-line comment com…
Dimi1010 Jan 9, 2025
d98f4d7
Wrapped more diagrams that triggered the multi-line error. The error …
Dimi1010 Jan 9, 2025
c3040c4
Reformatted /** */ style comments to /// and // comments.
Dimi1010 Jan 9, 2025
87ff355
Added empty lines around verbatim blocks to attempt to fix doxygen er…
Dimi1010 Jan 9, 2025
3827a9b
Replaced verbatim blocks with @code{.unparsed} as per this workaround.
Dimi1010 Jan 18, 2025
fc84dc9
Lint
Dimi1010 Jan 18, 2025
5efa33b
Removed borders and instances of \ at the end of the line
Dimi1010 Jan 18, 2025
3c9b754
Merge branch 'dev' into refactor/triple-slash-docs-packet
Dimi1010 Jan 18, 2025
7705b5a
Merge branch 'dev' into refactor/triple-slash-docs-packet
Dimi1010 Feb 2, 2025
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