From 82ef41dd921ce945cdf274ea50aef510717305ea Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Mon, 25 Mar 2013 14:08:59 -0300 Subject: [PATCH] IP now fills automatically the sender address when no link layer PDU is present. Made some protocols work when using PacketSender::send_recv. --- include/bootp.h | 11 +++ include/ip.h | 1 + include/packet_sender.h | 4 +- include/pdu.h | 24 ++++--- include/rawpdu.h | 12 ++++ include/tcp.h | 9 +++ include/udp.h | 13 +++- src/bootp.cpp | 7 ++ src/ip.cpp | 45 ++++++++---- src/packet_sender.cpp | 5 +- src/pdu.cpp | 15 +--- src/rawpdu.cpp | 4 ++ src/tcp.cpp | 12 ++++ src/udp.cpp | 38 +++++++--- tests/depends.d | 151 +++++++++++++++++++++++----------------- tests/src/udp.cpp | 4 +- 16 files changed, 241 insertions(+), 114 deletions(-) diff --git a/include/bootp.h b/include/bootp.h index 9517ac6..63ff0f3 100644 --- a/include/bootp.h +++ b/include/bootp.h @@ -293,6 +293,17 @@ namespace Tins { */ void vend(const vend_type &new_vend); + /** + * \brief Check wether ptr points to a valid response for this PDU. + * + * This returns true, if the xid field is equal. + * + * \sa PDU::matches_response + * \param ptr The pointer to the buffer. + * \param total_sz The size of the buffer. + */ + bool matches_response(uint8_t *ptr, uint32_t total_sz); + /** * \brief Getter for the PDU's type. * \sa PDU::pdu_type diff --git a/include/ip.h b/include/ip.h index 88b7d1f..dbed45a 100644 --- a/include/ip.h +++ b/include/ip.h @@ -634,6 +634,7 @@ namespace Tins { /*The options start here. */ } TINS_END_PACK; + void prepare_for_serialize(const PDU *parent); void internal_add_option(const ip_option &option); void init_ip_fields(); void write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU *parent); diff --git a/include/packet_sender.h b/include/packet_sender.h index c24e122..d876e25 100644 --- a/include/packet_sender.h +++ b/include/packet_sender.h @@ -63,7 +63,9 @@ namespace Tins { */ enum SocketType { ETHER_SOCKET, - IP_SOCKET, + IP_TCP_SOCKET, + IP_UDP_SOCKET, + IP_RAW_SOCKET, ARP_SOCKET, ICMP_SOCKET, IPV6_SOCKET, diff --git a/include/pdu.h b/include/pdu.h index 2e56c77..a4d4530 100644 --- a/include/pdu.h +++ b/include/pdu.h @@ -297,6 +297,20 @@ namespace Tins { */ void copy_inner_pdu(const PDU &pdu); + /** + * \brief Prepares this PDU for serialization. + * + * This method is called before the inner PDUs are serialized. + * It's useful in situations such as when serializing IP PDUs, + * which don't contain any link layer encapsulation, and therefore + * require to set the source IP address before the TCP/UDP checksum + * is calculated. + * + * By default, this method does nothing + * + * \param parent The parent PDU. + */ + virtual void prepare_for_serialize(const PDU *parent) { } /** * \brief Serializes this PDU and propagates this action to child PDUs. @@ -307,16 +321,6 @@ namespace Tins { */ void serialize(uint8_t *buffer, uint32_t total_sz, const PDU *parent); - /** - * \brief Clones the inner pdu(if any). - * - * This method clones the inner pdu using data from a buffer. - * \param ptr The pointer from which the child PDU must be cloned. - * \param total_sz The total size of the buffer. - * \return Returns the cloned PDU. Will be 0 if cloning failed. - */ - PDU *clone_inner_pdu(const uint8_t *ptr, uint32_t total_sz); - /** * \brief Serializes this TCP PDU. * diff --git a/include/rawpdu.h b/include/rawpdu.h index 8e89170..12e62b7 100644 --- a/include/rawpdu.h +++ b/include/rawpdu.h @@ -116,6 +116,18 @@ namespace Tins { return _payload.size(); } + /** + * \brief Check wether ptr points to a valid response for this PDU. + * + * This always returns true, since we don't know what this + * RawPDU is holding. + * + * \sa PDU::matches_response + * \param ptr The pointer to the buffer. + * \param total_sz The size of the buffer. + */ + bool matches_response(uint8_t *ptr, uint32_t total_sz); + /** * \brief Getter for the PDU's type. * \sa PDU::pdu_type diff --git a/include/tcp.h b/include/tcp.h index 6c4ab9f..dfec8f1 100644 --- a/include/tcp.h +++ b/include/tcp.h @@ -392,6 +392,15 @@ namespace Tins { * \sa PDU::header_size */ uint32_t header_size() const; + + /** + * \brief Check wether ptr points to a valid response for this PDU. + * + * \sa PDU::matches_response + * \param ptr The pointer to the buffer. + * \param total_sz The size of the buffer. + */ + bool matches_response(uint8_t *ptr, uint32_t total_sz); /** * \brief Getter for the PDU's type. diff --git a/include/udp.h b/include/udp.h index e342d8d..c0cbfa7 100644 --- a/include/udp.h +++ b/include/udp.h @@ -103,6 +103,18 @@ namespace Tins { */ void length(uint16_t new_len); + /** + * \brief Check wether ptr points to a valid response for this PDU. + * + * This compares the source and destination ports in the provided + * response with those stored in this PDU. + * + * \sa PDU::matches_response + * \param ptr The pointer to the buffer. + * \param total_sz The size of the buffer. + */ + bool matches_response(uint8_t *ptr, uint32_t total_sz); + /** \brief Returns the header size. * * This metod overrides PDU::header_size. This size includes the @@ -131,7 +143,6 @@ namespace Tins { uint16_t check; } TINS_END_PACK; - void copy_fields(const UDP *other); void write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU *parent); udphdr _udp; diff --git a/src/bootp.cpp b/src/bootp.cpp index 2a144d7..8e5357c 100644 --- a/src/bootp.cpp +++ b/src/bootp.cpp @@ -117,4 +117,11 @@ void BootP::write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU *p std::memcpy(buffer, &_bootp, sizeof(bootphdr)); std::copy(_vend.begin(), _vend.end(), buffer + sizeof(bootphdr)); } + +bool BootP::matches_response(uint8_t *ptr, uint32_t total_sz) { + if(total_sz < sizeof(bootphdr)) + return false; + const bootphdr *bootp_ptr = (const bootphdr *)ptr; + return bootp_ptr->xid == _bootp.xid; +} } diff --git a/src/ip.cpp b/src/ip.cpp index e599f73..4637acc 100644 --- a/src/ip.cpp +++ b/src/ip.cpp @@ -48,6 +48,7 @@ #include "utils.h" #include "packet_sender.h" #include "constants.h" +#include "network_interface.h" using std::list; @@ -351,28 +352,46 @@ uint32_t IP::header_size() const { return sizeof(iphdr) + _padded_options_size; } +PacketSender::SocketType pdu_type_to_sender_type(PDU::PDUType type) { + switch(type) { + case PDU::TCP: + return PacketSender::IP_TCP_SOCKET; + case PDU::UDP: + return PacketSender::IP_UDP_SOCKET; + case PDU::ICMP: + return PacketSender::ICMP_SOCKET; + default: + return PacketSender::IP_RAW_SOCKET; + } +} + void IP::send(PacketSender& sender) { - struct sockaddr_in link_addr; - PacketSender::SocketType type = PacketSender::IP_SOCKET; + sockaddr_in link_addr; + PacketSender::SocketType type = PacketSender::IP_RAW_SOCKET; link_addr.sin_family = AF_INET; link_addr.sin_port = 0; link_addr.sin_addr.s_addr = _ip.daddr; - if(inner_pdu() && inner_pdu()->pdu_type() == PDU::ICMP) - type = PacketSender::ICMP_SOCKET; + if(inner_pdu()) + type = pdu_type_to_sender_type(inner_pdu()->pdu_type()); sender.send_l3(*this, (struct sockaddr*)&link_addr, sizeof(link_addr), type); } PDU *IP::recv_response(PacketSender &sender) { - struct sockaddr_in link_addr; - PacketSender::SocketType type = PacketSender::IP_SOCKET; - link_addr.sin_family = AF_INET; - link_addr.sin_port = 0; - link_addr.sin_addr.s_addr = _ip.daddr; - if(inner_pdu() && inner_pdu()->pdu_type() == PDU::ICMP) - type = PacketSender::ICMP_SOCKET; + sockaddr_in link_addr; + PacketSender::SocketType type = PacketSender::IP_RAW_SOCKET; + std::memset(&link_addr, 0, sizeof(link_addr)); + if(inner_pdu()) + type = pdu_type_to_sender_type(inner_pdu()->pdu_type()); - return sender.recv_l3(*this, (struct sockaddr*)&link_addr, sizeof(link_addr), type); + return sender.recv_l3(*this, 0, sizeof(link_addr), type); +} + +void IP::prepare_for_serialize(const PDU *parent) { + if(!parent && _ip.saddr == 0) { + NetworkInterface iface(dst_addr()); + src_addr(iface.addresses().ip_addr); + } } void IP::write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU* parent) { @@ -429,7 +448,7 @@ bool IP::matches_response(uint8_t *ptr, uint32_t total_sz) { return false; iphdr *ip_ptr = (iphdr*)ptr; if(_ip.daddr == ip_ptr->saddr && _ip.saddr == ip_ptr->daddr) { - uint32_t sz = _ip.ihl * sizeof(uint32_t); + uint32_t sz = std::min(_ip.ihl * sizeof(uint32_t), total_sz); return inner_pdu() ? inner_pdu()->matches_response(ptr + sz, total_sz - sz) : true; } return false; diff --git a/src/packet_sender.cpp b/src/packet_sender.cpp index 39add60..89882a1 100644 --- a/src/packet_sender.cpp +++ b/src/packet_sender.cpp @@ -91,7 +91,9 @@ PacketSender::PacketSender(uint32_t recv_timeout, uint32_t usec) _timeout(recv_timeout), _timeout_usec(usec) { - _types[IP_SOCKET] = IPPROTO_RAW; + _types[IP_TCP_SOCKET] = IPPROTO_TCP; + _types[IP_UDP_SOCKET] = IPPROTO_UDP; + _types[IP_RAW_SOCKET] = IPPROTO_RAW; _types[IPV6_SOCKET] = IPPROTO_RAW; _types[ICMP_SOCKET] = IPPROTO_ICMP; } @@ -309,7 +311,6 @@ PDU *PacketSender::recv_match_loop(int sock, PDU &pdu, struct sockaddr* link_add size = recvfrom(sock, (char*)buffer, 2048, 0, link_addr, &length); if(pdu.matches_response(buffer, size)) { return Internals::pdu_from_flag(pdu.pdu_type(), buffer, size); - //return pdu.clone_packet(buffer, size); } } struct timeval this_time, diff; diff --git a/src/pdu.cpp b/src/pdu.cpp index 622c2ba..cc5086f 100644 --- a/src/pdu.cpp +++ b/src/pdu.cpp @@ -96,24 +96,15 @@ PDU::serialization_type PDU::serialize() { void PDU::serialize(uint8_t *buffer, uint32_t total_sz, const PDU *parent) { uint32_t sz = header_size() + trailer_size(); /* Must not happen... */ + #ifdef TINS_DEBUG assert(total_sz >= sz); + #endif + prepare_for_serialize(parent); if(_inner_pdu) _inner_pdu->serialize(buffer + header_size(), total_sz - sz, this); write_serialization(buffer, total_sz, parent); } -PDU *PDU::clone_inner_pdu(const uint8_t *ptr, uint32_t total_sz) { - PDU *child = 0; - if(inner_pdu()) { - child = inner_pdu()->clone_packet(ptr, total_sz); - if(!child) - return 0; - } - else - child = new RawPDU(ptr, total_sz); - return child; -} - PDU *PDU::clone_packet(const uint8_t *ptr, uint32_t total_sz) { return 0; } diff --git a/src/rawpdu.cpp b/src/rawpdu.cpp index 129ada5..98cd1dd 100644 --- a/src/rawpdu.cpp +++ b/src/rawpdu.cpp @@ -56,4 +56,8 @@ void RawPDU::write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU * void RawPDU::payload(const payload_type &pload) { _payload = pload; } + +bool RawPDU::matches_response(uint8_t *ptr, uint32_t total_sz) { + return true; +} } diff --git a/src/tcp.cpp b/src/tcp.cpp index 216f3bf..3bcf5f9 100644 --- a/src/tcp.cpp +++ b/src/tcp.cpp @@ -374,5 +374,17 @@ void TCP::internal_add_option(const tcp_option &option) { _total_options_size = (padding) ? _options_size - padding + 4 : _options_size; } +bool TCP::matches_response(uint8_t *ptr, uint32_t total_sz) { + if(total_sz < sizeof(tcphdr)) + return false; + const tcphdr *tcp_ptr = (const tcphdr*)ptr; + if(tcp_ptr->sport == _tcp.dport && tcp_ptr->dport == _tcp.sport) { + uint32_t sz = std::min(total_sz, tcp_ptr->doff * sizeof(uint32_t)); + return inner_pdu() ? inner_pdu()->matches_response(ptr + sz, total_sz - sz) : true; + } + else + return false; +} + } diff --git a/src/udp.cpp b/src/udp.cpp index 3b7a4ba..057578f 100644 --- a/src/udp.cpp +++ b/src/udp.cpp @@ -36,7 +36,8 @@ #include "ip.h" #include "rawpdu.h" -Tins::UDP::UDP(uint16_t dport, uint16_t sport, PDU *child) +namespace Tins { +UDP::UDP(uint16_t dport, uint16_t sport, PDU *child) : PDU(child) { this->dport(dport); @@ -45,7 +46,7 @@ Tins::UDP::UDP(uint16_t dport, uint16_t sport, PDU *child) _udp.len = 0; } -Tins::UDP::UDP(const uint8_t *buffer, uint32_t total_sz) +UDP::UDP(const uint8_t *buffer, uint32_t total_sz) { if(total_sz < sizeof(udphdr)) throw std::runtime_error("Not enough size for an UDP header in the buffer."); @@ -55,27 +56,31 @@ Tins::UDP::UDP(const uint8_t *buffer, uint32_t total_sz) inner_pdu(new RawPDU(buffer + sizeof(udphdr), total_sz)); } -void Tins::UDP::dport(uint16_t new_dport) { +void UDP::dport(uint16_t new_dport) { _udp.dport = Endian::host_to_be(new_dport); } -void Tins::UDP::sport(uint16_t new_sport) { +void UDP::sport(uint16_t new_sport) { _udp.sport = Endian::host_to_be(new_sport); } -void Tins::UDP::length(uint16_t new_len) { +void UDP::length(uint16_t new_len) { _udp.len = Endian::host_to_be(new_len); } -uint32_t Tins::UDP::header_size() const { +uint32_t UDP::header_size() const { return sizeof(udphdr); } -void Tins::UDP::write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU *parent) { +void UDP::write_serialization(uint8_t *buffer, uint32_t total_sz, const PDU *parent) { + #ifdef TINS_DEBUG assert(total_sz >= sizeof(udphdr)); + #endif const Tins::IP *ip_packet = dynamic_cast(parent); if(inner_pdu()) length(sizeof(udphdr) + inner_pdu()->size()); + else + length(sizeof(udphdr)); std::memcpy(buffer, &_udp, sizeof(udphdr)); if(!_udp.check && ip_packet) { uint32_t checksum = Utils::pseudoheader_checksum(ip_packet->src_addr(), ip_packet->dst_addr(), size(), Constants::IP::PROTO_UDP) + @@ -87,6 +92,21 @@ void Tins::UDP::write_serialization(uint8_t *buffer, uint32_t total_sz, const PD _udp.check = 0; } -void Tins::UDP::copy_fields(const UDP *other) { - std::memcpy(&_udp, &other->_udp, sizeof(_udp)); +bool UDP::matches_response(uint8_t *ptr, uint32_t total_sz) { + if(total_sz < sizeof(udphdr)) + return false; + const udphdr *udp_ptr = (const udphdr*)ptr; + if(udp_ptr->sport == _udp.dport && udp_ptr->dport == _udp.sport) { + return inner_pdu() + ? + inner_pdu()->matches_response( + ptr + sizeof(udphdr), + total_sz - sizeof(udphdr) + ) + : + 0; + } + return false; +} + } diff --git a/tests/depends.d b/tests/depends.d index c6a7ccd..0a6cd88 100644 --- a/tests/depends.d +++ b/tests/depends.d @@ -120,17 +120,17 @@ ../include/network_interface.h: ../src/dhcpv6.o: ../src/dhcpv6.cpp ../include/dhcpv6.h ../include/pdu.h \ - ../include/endianness.h ../include/macros.h ../include/small_uint.h \ + ../include/macros.h ../include/endianness.h ../include/small_uint.h \ ../include/ipv6_address.h ../include/pdu_option.h ../include/dhcpv6.h: ../include/pdu.h: -../include/endianness.h: - ../include/macros.h: +../include/endianness.h: + ../include/small_uint.h: ../include/ipv6_address.h: @@ -202,17 +202,17 @@ ../include/snap.h: ../src/dot1q.o: ../src/dot1q.cpp ../include/dot1q.h ../include/pdu.h \ - ../include/endianness.h ../include/macros.h ../include/small_uint.h \ + ../include/macros.h ../include/endianness.h ../include/small_uint.h \ ../include/internals.h ../include/constants.h ../include/dot1q.h: ../include/pdu.h: -../include/endianness.h: - ../include/macros.h: +../include/endianness.h: + ../include/small_uint.h: ../include/internals.h: @@ -385,12 +385,14 @@ ../include/llc.h: ../src/internals.o: ../src/internals.cpp ../include/internals.h \ - ../include/constants.h ../include/pdu.h ../include/ip.h \ - ../include/small_uint.h ../include/endianness.h ../include/macros.h \ + ../include/constants.h ../include/pdu.h ../include/macros.h \ + ../include/ip.h ../include/small_uint.h ../include/endianness.h \ ../include/ip_address.h ../include/pdu_option.h ../include/cxxstd.h \ - ../include/ipv6.h ../include/ipv6_address.h ../include/arp.h \ - ../include/hw_address.h ../include/eapol.h ../include/rawpdu.h \ - ../include/dot1q.h + ../include/ethernetII.h ../include/hw_address.h \ + ../include/network_interface.h ../include/ieee802_3.h \ + ../include/radiotap.h ../include/dot11.h ../include/ipv6.h \ + ../include/ipv6_address.h ../include/arp.h ../include/eapol.h \ + ../include/rawpdu.h ../include/dot1q.h ../include/internals.h: @@ -398,52 +400,63 @@ ../include/pdu.h: +../include/macros.h: + ../include/ip.h: ../include/small_uint.h: ../include/endianness.h: -../include/macros.h: - ../include/ip_address.h: ../include/pdu_option.h: ../include/cxxstd.h: +../include/ethernetII.h: + +../include/hw_address.h: + +../include/network_interface.h: + +../include/ieee802_3.h: + +../include/radiotap.h: + +../include/dot11.h: + ../include/ipv6.h: ../include/ipv6_address.h: ../include/arp.h: -../include/hw_address.h: - ../include/eapol.h: ../include/rawpdu.h: ../include/dot1q.h: ../src/ip.o: ../src/ip.cpp ../include/ip.h ../include/pdu.h \ - ../include/small_uint.h ../include/endianness.h ../include/macros.h \ + ../include/macros.h ../include/small_uint.h ../include/endianness.h \ ../include/ip_address.h ../include/pdu_option.h ../include/cxxstd.h \ ../include/ipv6.h ../include/ipv6_address.h ../include/tcp.h \ ../include/udp.h ../include/icmp.h ../include/rawpdu.h \ ../include/utils.h ../include/hw_address.h ../include/internals.h \ ../include/constants.h ../include/packet_sender.h \ - ../include/network_interface.h ../include/constants.h + ../include/network_interface.h ../include/constants.h \ + ../include/network_interface.h ../include/ip.h: ../include/pdu.h: +../include/macros.h: + ../include/small_uint.h: ../include/endianness.h: -../include/macros.h: - ../include/ip_address.h: ../include/pdu_option.h: @@ -475,6 +488,8 @@ ../include/network_interface.h: ../include/constants.h: + +../include/network_interface.h: ../src/ip_address.o: ../src/ip_address.cpp ../include/ip_address.h \ ../include/endianness.h ../include/macros.h @@ -534,16 +549,16 @@ ../include/macros.h: ../include/ipv6_address.h: -../src/llc.o: ../src/llc.cpp ../include/pdu.h ../include/llc.h \ - ../include/macros.h ../include/pdu.h ../include/endianness.h \ +../src/llc.o: ../src/llc.cpp ../include/pdu.h ../include/macros.h \ + ../include/llc.h ../include/pdu.h ../include/endianness.h \ ../include/rawpdu.h ../include/pdu.h: -../include/llc.h: - ../include/macros.h: +../include/llc.h: + ../include/pdu.h: ../include/endianness.h: @@ -616,7 +631,8 @@ ../include/pdu.h ../include/macros.h ../include/network_interface.h \ ../include/ethernetII.h ../include/pdu.h ../include/endianness.h \ ../include/radiotap.h ../include/dot11.h ../include/small_uint.h \ - ../include/pdu_option.h ../include/cxxstd.h ../include/ieee802_3.h + ../include/pdu_option.h ../include/cxxstd.h ../include/ieee802_3.h \ + ../include/internals.h ../include/constants.h ../include/packet_sender.h: @@ -651,6 +667,10 @@ ../include/cxxstd.h: ../include/ieee802_3.h: + +../include/internals.h: + +../include/constants.h: ../src/packet_writer.o: ../src/packet_writer.cpp \ ../include/packet_writer.h ../include/utils.h ../include/macros.h \ ../include/ip_address.h ../include/ipv6_address.h \ @@ -678,13 +698,15 @@ ../include/cxxstd.h: ../include/pdu.h: -../src/pdu.o: ../src/pdu.cpp ../include/pdu.h ../include/rawpdu.h \ - ../include/pdu.h ../include/packet_sender.h \ +../src/pdu.o: ../src/pdu.cpp ../include/pdu.h ../include/macros.h \ + ../include/rawpdu.h ../include/pdu.h ../include/packet_sender.h \ ../include/network_interface.h ../include/hw_address.h \ - ../include/ip_address.h ../include/macros.h + ../include/ip_address.h ../include/pdu.h: +../include/macros.h: + ../include/rawpdu.h: ../include/pdu.h: @@ -696,8 +718,6 @@ ../include/hw_address.h: ../include/ip_address.h: - -../include/macros.h: ../src/radiotap.o: ../src/radiotap.cpp ../include/macros.h \ ../include/radiotap.h ../include/macros.h ../include/pdu.h \ ../include/endianness.h ../include/network_interface.h \ @@ -739,11 +759,14 @@ ../include/constants.h: ../include/packet_sender.h: -../src/rawpdu.o: ../src/rawpdu.cpp ../include/rawpdu.h ../include/pdu.h +../src/rawpdu.o: ../src/rawpdu.cpp ../include/rawpdu.h ../include/pdu.h \ + ../include/macros.h ../include/rawpdu.h: ../include/pdu.h: + +../include/macros.h: ../src/rsn_information.o: ../src/rsn_information.cpp \ ../include/rsn_information.h ../include/endianness.h ../include/macros.h @@ -753,17 +776,17 @@ ../include/macros.h: ../src/sll.o: ../src/sll.cpp ../include/sll.h ../include/pdu.h \ - ../include/endianness.h ../include/macros.h ../include/hw_address.h \ + ../include/macros.h ../include/endianness.h ../include/hw_address.h \ ../include/internals.h ../include/constants.h ../include/sll.h: ../include/pdu.h: -../include/endianness.h: - ../include/macros.h: +../include/endianness.h: + ../include/hw_address.h: ../include/internals.h: @@ -806,7 +829,7 @@ ../include/constants.h: ../src/sniffer.o: ../src/sniffer.cpp ../include/sniffer.h \ - ../include/pdu.h ../include/ethernetII.h ../include/macros.h \ + ../include/pdu.h ../include/macros.h ../include/ethernetII.h \ ../include/endianness.h ../include/hw_address.h \ ../include/network_interface.h ../include/ip_address.h \ ../include/radiotap.h ../include/packet.h ../include/cxxstd.h \ @@ -817,10 +840,10 @@ ../include/pdu.h: -../include/ethernetII.h: - ../include/macros.h: +../include/ethernetII.h: + ../include/endianness.h: ../include/hw_address.h: @@ -887,8 +910,8 @@ ../include/constants.h: ../src/tcp_stream.o: ../src/tcp_stream.cpp ../include/rawpdu.h \ - ../include/pdu.h ../include/tcp_stream.h ../include/sniffer.h \ - ../include/ethernetII.h ../include/macros.h ../include/endianness.h \ + ../include/pdu.h ../include/macros.h ../include/tcp_stream.h \ + ../include/sniffer.h ../include/ethernetII.h ../include/endianness.h \ ../include/hw_address.h ../include/network_interface.h \ ../include/ip_address.h ../include/radiotap.h ../include/packet.h \ ../include/cxxstd.h ../include/timestamp.h ../include/loopback.h \ @@ -901,14 +924,14 @@ ../include/pdu.h: +../include/macros.h: + ../include/tcp_stream.h: ../include/sniffer.h: ../include/ethernetII.h: -../include/macros.h: - ../include/endianness.h: ../include/hw_address.h: @@ -1094,17 +1117,17 @@ src/dhcp.o: src/dhcp.cpp ../include/dhcp.h ../include/bootp.h \ ../include/ip_address.h: src/dhcpv6.o: src/dhcpv6.cpp ../include/dhcpv6.h ../include/pdu.h \ - ../include/endianness.h ../include/macros.h ../include/small_uint.h \ + ../include/macros.h ../include/endianness.h ../include/small_uint.h \ ../include/ipv6_address.h ../include/pdu_option.h ../include/dhcpv6.h: ../include/pdu.h: -../include/endianness.h: - ../include/macros.h: +../include/endianness.h: + ../include/small_uint.h: ../include/ipv6_address.h: @@ -1684,7 +1707,7 @@ include/tests/dot11.h: include/tests/dot11.h: src/dot1q.o: src/dot1q.cpp ../include/dot1q.h ../include/pdu.h \ - ../include/endianness.h ../include/macros.h ../include/small_uint.h \ + ../include/macros.h ../include/endianness.h ../include/small_uint.h \ ../include/arp.h ../include/hw_address.h ../include/ip_address.h \ ../include/ethernetII.h ../include/network_interface.h @@ -1692,10 +1715,10 @@ src/dot1q.o: src/dot1q.cpp ../include/dot1q.h ../include/pdu.h \ ../include/pdu.h: -../include/endianness.h: - ../include/macros.h: +../include/endianness.h: + ../include/small_uint.h: ../include/arp.h: @@ -1815,23 +1838,23 @@ src/icmpv6.o: src/icmpv6.cpp ../include/icmpv6.h ../include/macros.h \ ../include/constants.h: ../include/hw_address.h: -src/ip.o: src/ip.cpp ../include/ip.h ../include/pdu.h \ - ../include/small_uint.h ../include/endianness.h ../include/macros.h \ - ../include/ip_address.h ../include/pdu_option.h ../include/cxxstd.h \ - ../include/tcp.h ../include/udp.h ../include/icmp.h \ - ../include/ip_address.h ../include/utils.h ../include/ipv6_address.h \ - ../include/hw_address.h ../include/internals.h ../include/constants.h +src/ip.o: src/ip.cpp ../include/ip.h ../include/pdu.h ../include/macros.h \ + ../include/small_uint.h ../include/endianness.h ../include/ip_address.h \ + ../include/pdu_option.h ../include/cxxstd.h ../include/tcp.h \ + ../include/udp.h ../include/icmp.h ../include/ip_address.h \ + ../include/utils.h ../include/ipv6_address.h ../include/hw_address.h \ + ../include/internals.h ../include/constants.h ../include/ip.h: ../include/pdu.h: +../include/macros.h: + ../include/small_uint.h: ../include/endianness.h: -../include/macros.h: - ../include/ip_address.h: ../include/pdu_option.h: @@ -1979,7 +2002,7 @@ src/network_interface.o: src/network_interface.cpp \ ../include/macros.h: src/pdu.o: src/pdu.cpp ../include/ip.h ../include/pdu.h \ - ../include/small_uint.h ../include/endianness.h ../include/macros.h \ + ../include/macros.h ../include/small_uint.h ../include/endianness.h \ ../include/ip_address.h ../include/pdu_option.h ../include/cxxstd.h \ ../include/tcp.h ../include/rawpdu.h ../include/pdu.h \ ../include/packet.h ../include/timestamp.h @@ -1988,12 +2011,12 @@ src/pdu.o: src/pdu.cpp ../include/ip.h ../include/pdu.h \ ../include/pdu.h: +../include/macros.h: + ../include/small_uint.h: ../include/endianness.h: -../include/macros.h: - ../include/ip_address.h: ../include/pdu_option.h: @@ -2101,7 +2124,7 @@ src/rsn_eapol.o: src/rsn_eapol.cpp ../include/eapol.h ../include/pdu.h \ ../include/rsn_information.h: src/sll.o: src/sll.cpp ../include/sll.h ../include/pdu.h \ - ../include/endianness.h ../include/macros.h ../include/hw_address.h \ + ../include/macros.h ../include/endianness.h ../include/hw_address.h \ ../include/hw_address.h ../include/constants.h ../include/ip.h \ ../include/small_uint.h ../include/ip_address.h ../include/pdu_option.h \ ../include/cxxstd.h @@ -2110,10 +2133,10 @@ src/sll.o: src/sll.cpp ../include/sll.h ../include/pdu.h \ ../include/pdu.h: -../include/endianness.h: - ../include/macros.h: +../include/endianness.h: + ../include/hw_address.h: ../include/hw_address.h: @@ -2187,8 +2210,8 @@ src/tcp.o: src/tcp.cpp ../include/tcp.h ../include/pdu.h \ ../include/constants.h: src/tcp_stream.o: src/tcp_stream.cpp ../include/tcp_stream.h \ - ../include/sniffer.h ../include/pdu.h ../include/ethernetII.h \ - ../include/macros.h ../include/endianness.h ../include/hw_address.h \ + ../include/sniffer.h ../include/pdu.h ../include/macros.h \ + ../include/ethernetII.h ../include/endianness.h ../include/hw_address.h \ ../include/network_interface.h ../include/ip_address.h \ ../include/radiotap.h ../include/packet.h ../include/cxxstd.h \ ../include/timestamp.h ../include/loopback.h ../include/dot11.h \ @@ -2203,10 +2226,10 @@ src/tcp_stream.o: src/tcp_stream.cpp ../include/tcp_stream.h \ ../include/pdu.h: -../include/ethernetII.h: - ../include/macros.h: +../include/ethernetII.h: + ../include/endianness.h: ../include/hw_address.h: diff --git a/tests/src/udp.cpp b/tests/src/udp.cpp index c67fec9..4f3f2d5 100644 --- a/tests/src/udp.cpp +++ b/tests/src/udp.cpp @@ -17,7 +17,7 @@ public: }; const uint8_t UDPTest::expected_packet[] = { - 245, 26, 71, 241, 4, 83, 0, 0 + 245, 26, 71, 241, 8, 0, 0, 0 }; @@ -121,7 +121,7 @@ TEST_F(UDPTest, ConstructorFromBuffer) { EXPECT_EQ(buffer.size(), sizeof(expected_packet)); EXPECT_EQ(udp1.dport(), 0x47f1); EXPECT_EQ(udp1.sport(), 0xf51a); - EXPECT_EQ(udp1.length(), 0x453); + EXPECT_EQ(udp1.length(), 8); UDP udp2(&buffer[0], buffer.size()); EXPECT_EQ(udp1.dport(), udp2.dport());