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

Fixed compilation error in OSX. Fixed bug when sending IP PDUs in BSD.

This commit is contained in:
Matias Fontanini
2012-12-04 16:15:08 -03:00
parent 647ba1f46e
commit 356fe00aad
4 changed files with 16 additions and 21 deletions

View File

@@ -33,16 +33,14 @@
#include <stdint.h>
#include "macros.h"
#if defined(BSD)
#if defined(__APPLE__)
#include <sys/types.h>
#define TINS_IS_LITTLE_ENDIAN (BYTE_ORDER == LITTLE_ENDIAN)
#define TINS_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
#else
#include <sys/endian.h>
#define TINS_IS_LITTLE_ENDIAN (_BYTE_ORDER == _LITTLE_ENDIAN)
#define TINS_IS_BIG_ENDIAN (_BYTE_ORDER == _BIG_ENDIAN)
#endif
#if defined(__APPLE__)
#include <sys/types.h>
#define TINS_IS_LITTLE_ENDIAN (BYTE_ORDER == LITTLE_ENDIAN)
#define TINS_IS_BIG_ENDIAN (BYTE_ORDER == BIG_ENDIAN)
#elif defined(BSD)
#include <sys/endian.h>
#define TINS_IS_LITTLE_ENDIAN (_BYTE_ORDER == _LITTLE_ENDIAN)
#define TINS_IS_BIG_ENDIAN (_BYTE_ORDER == _BIG_ENDIAN)
#elif defined(WIN32)
// Assume windows == little endian. fixme later
#define TINS_IS_LITTLE_ENDIAN 1

View File

@@ -260,12 +260,7 @@ namespace Tins {
* \return The total length of this IP PDU.
*/
uint16_t tot_len() const {
// FreeBSD wants this in host byte order............
#ifdef __FreeBSD__
return _ip.tot_len;
#else
return Endian::be_to_host(_ip.tot_len);
#endif
}
/**

View File

@@ -32,9 +32,11 @@
#include <stdexcept>
#include <algorithm>
#include <utility>
#include "macros.h"
#ifndef WIN32
#ifdef BSD
#if defined(BSD) || defined(__APPLE__)
#include <sys/types.h>
#include <net/if_dl.h>
#else
#include <netpacket/packet.h>

View File

@@ -170,12 +170,7 @@ void IP::tos(uint8_t new_tos) {
}
void IP::tot_len(uint16_t new_tot_len) {
// FreeBSD wants this in host byte order............
#ifdef __FreeBSD__
_ip.tot_len = new_tot_len;
#else
_ip.tot_len = Endian::host_to_be(new_tot_len);
#endif
}
void IP::id(uint16_t new_id) {
@@ -394,6 +389,11 @@ void IP::write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU* pare
protocol(new_flag);
//flag(new_flag);
}
#ifdef __FreeBSD__
if(!parent)
total_sz = Endian::host_to_be<uint16_t>(total_sz);
#endif
tot_len(total_sz);
head_len(my_sz / sizeof(uint32_t));