1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-23 02:35:57 +01:00

Fixed endianess in ARP PDU. Getters and Setters use little endian

This commit is contained in:
Santiago Alessandri
2011-08-17 10:11:41 -03:00
parent b844eb84c8
commit 9a4c847e6b
2 changed files with 14 additions and 13 deletions

View File

@@ -26,6 +26,7 @@
#include <string>
#include "pdu.h"
#include "utils.h"
namespace Tins {
@@ -45,7 +46,7 @@ namespace Tins {
/**
* \brief Default constructor for ARP PDU objects.
*
*
* ARP requests and replies can be constructed easily using
* ARP::make_arp_request/reply static functions.
*/
@@ -85,14 +86,14 @@ namespace Tins {
*
* \return Returns the hardware address' format in an uint16_t.
*/
inline uint16_t hw_addr_format() { return this->_arp.ar_hrd; }
inline uint16_t hw_addr_format() { return Utils::net_to_host_s(this->_arp.ar_hrd); }
/**
* \brief Getter for the protocol address format.
*
* \return Returns the protocol address' format in an uint16_t.
*/
inline uint16_t prot_addr_format() { return this->_arp.ar_pro; }
inline uint16_t prot_addr_format() { return Utils::net_to_host_s(this->_arp.ar_pro); }
/**
* \brief Getter for the hardware address length.
@@ -118,7 +119,7 @@ namespace Tins {
/** \brief Getter for the header size.
* \return Returns the ARP header size.
* \sa PDU::header_size
*/
*/
uint32_t header_size() const;
/* Setters */
@@ -184,7 +185,7 @@ namespace Tins {
* \param new_opcode Flag enum value of the ARP opcode to set.
*/
void opcode(Flags new_opcode);
/**
* \brief Getter for the PDU's type.
* \sa PDU::pdu_type
@@ -273,7 +274,7 @@ namespace Tins {
* \param hw_snd uint8_t array of 6 bytes containing the sender's hardware address.
*/
void set_arp_reply(const std::string& ip_tgt, const std::string& ip_snd, const uint8_t* hw_tgt, const uint8_t* hw_snd);
/** \brief Check wether ptr points to a valid response for this PDU.
*
* \sa PDU::matches_response

View File

@@ -52,7 +52,7 @@ Tins::PDU* Tins::ARP::make_arp_request(const std::string& iface,
if (hw_snd) {
memcpy(arp->_arp.ar_sha, hw_snd, 6);
}
arp->_arp.ar_op = Utils::net_to_host_s(REQUEST);
arp->opcode(REQUEST);
/* Create the EthernetII PDU with the ARP PDU as its inner PDU */
EthernetII* eth = new EthernetII(iface, Tins::EthernetII::BROADCAST, hw_snd, arp);
@@ -82,7 +82,7 @@ Tins::PDU* Tins::ARP::make_arp_reply(const string& iface,
arp->_arp.ar_sip = sender;
memcpy(arp->_arp.ar_sha, hw_snd, 6);
memcpy(arp->_arp.ar_tha, hw_tgt, 6);
arp->_arp.ar_op = Utils::net_to_host_s(REPLY);
arp->opcode(REPLY);
/* Create the EthernetII PDU with the ARP PDU as its inner PDU */
EthernetII* eth = new EthernetII(iface, hw_tgt, hw_snd, arp);
@@ -118,11 +118,11 @@ void Tins::ARP::target_ip_addr(uint32_t new_tgt_ip_addr) {
}
void Tins::ARP::hw_addr_format(uint16_t new_hw_addr_fmt) {
this->_arp.ar_hrd = new_hw_addr_fmt;
this->_arp.ar_hrd = Utils::net_to_host_s(new_hw_addr_fmt);
}
void Tins::ARP::prot_addr_format(uint16_t new_prot_addr_fmt) {
this->_arp.ar_pro = new_prot_addr_fmt;
this->_arp.ar_pro = Utils::net_to_host_s(new_prot_addr_fmt);
}
void Tins::ARP::hw_addr_length(uint8_t new_hw_addr_len) {
@@ -134,7 +134,7 @@ void Tins::ARP::prot_addr_length(uint8_t new_prot_addr_len) {
}
void Tins::ARP::opcode(Flags new_opcode) {
this->_arp.ar_op = new_opcode;
this->_arp.ar_op = Utils::net_to_host_s(new_opcode);
}
void Tins::ARP::set_arp_request(const std::string& ip_tgt, const std::string& ip_snd, const uint8_t* hw_snd) {
@@ -142,7 +142,7 @@ void Tins::ARP::set_arp_request(const std::string& ip_tgt, const std::string& ip
this->_arp.ar_sip = Utils::resolve_ip(ip_snd);
if (hw_snd)
memcpy(this->_arp.ar_sha, hw_snd, 6);
this->_arp.ar_op = Utils::net_to_host_s(REQUEST);
this->opcode(REQUEST);
}
void Tins::ARP::set_arp_reply(const std::string& ip_tgt,
@@ -154,7 +154,7 @@ void Tins::ARP::set_arp_reply(const std::string& ip_tgt,
this->_arp.ar_sip = Utils::resolve_ip(ip_snd);
memcpy(this->_arp.ar_tha, hw_tgt, 6);
memcpy(this->_arp.ar_sha, hw_snd, 6);
this->_arp.ar_op = Utils::net_to_host_s(REPLY);
this->opcode(REPLY);
}