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:
@@ -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
|
||||
|
||||
/**
|
||||
|
||||
@@ -131,6 +131,7 @@ public:
|
||||
ARP_SOCKET,
|
||||
ICMP_SOCKET,
|
||||
IPV6_SOCKET,
|
||||
ICMPV6_SOCKET,
|
||||
SOCKETS_END
|
||||
};
|
||||
|
||||
|
||||
13
src/ipv6.cpp
13
src/ipv6.cpp
@@ -296,17 +296,18 @@ 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);
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
void IPv6::add_ext_header(const ext_header& header) {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user