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

Implement IPv6::recv_response

This commit is contained in:
Matias Fontanini
2018-02-25 10:42:16 -08:00
parent e4f747164c
commit f29566d6d9
4 changed files with 17 additions and 6 deletions

View File

@@ -298,6 +298,14 @@ public:
* \sa PDU::send()
*/
void send(PacketSender& sender, const NetworkInterface &);
/**
* \brief Receives a matching response for this packet.
*
* \sa PDU::recv_response
* \param sender The packet sender which will receive the packet.
*/
PDU* recv_response(PacketSender& sender, const NetworkInterface &);
#endif
/**

View File

@@ -131,6 +131,7 @@ public:
ARP_SOCKET,
ICMP_SOCKET,
IPV6_SOCKET,
ICMPV6_SOCKET,
SOCKETS_END
};

View File

@@ -296,16 +296,17 @@ void IPv6::write_serialization(uint8_t* buffer, uint32_t total_sz) {
#ifndef BSD
void IPv6::send(PacketSender& sender, const NetworkInterface &) {
struct sockaddr_in6 link_addr;
PacketSender::SocketType type = PacketSender::IPV6_SOCKET;
sockaddr_in6 link_addr;
const PacketSender::SocketType type = PacketSender::IPV6_SOCKET;
link_addr.sin6_family = AF_INET6;
link_addr.sin6_port = 0;
memcpy((uint8_t*)&link_addr.sin6_addr, header_.dst_addr, address_type::address_size);
if (inner_pdu() && inner_pdu()->pdu_type() == PDU::ICMP) {
type = PacketSender::ICMP_SOCKET;
sender.send_l3(*this, (struct sockaddr*)&link_addr, sizeof(link_addr), type);
}
sender.send_l3(*this, (struct sockaddr*)&link_addr, sizeof(link_addr), type);
PDU* IPv6::recv_response(PacketSender& sender, const NetworkInterface &) {
const PacketSender::SocketType type = PacketSender::ICMPV6_SOCKET;
return sender.recv_l3(*this, 0, sizeof(sockaddr_in6), type);
}
#endif

View File

@@ -108,6 +108,7 @@ PacketSender::PacketSender(const NetworkInterface& iface,
types_[IP_RAW_SOCKET] = IPPROTO_RAW;
types_[IPV6_SOCKET] = IPPROTO_RAW;
types_[ICMP_SOCKET] = IPPROTO_ICMP;
types_[ICMPV6_SOCKET] = IPPROTO_ICMPV6;
}
PacketSender::~PacketSender() {