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()
|
* \sa PDU::send()
|
||||||
*/
|
*/
|
||||||
void send(PacketSender& sender, const NetworkInterface &);
|
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
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ public:
|
|||||||
ARP_SOCKET,
|
ARP_SOCKET,
|
||||||
ICMP_SOCKET,
|
ICMP_SOCKET,
|
||||||
IPV6_SOCKET,
|
IPV6_SOCKET,
|
||||||
|
ICMPV6_SOCKET,
|
||||||
SOCKETS_END
|
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
|
#ifndef BSD
|
||||||
void IPv6::send(PacketSender& sender, const NetworkInterface &) {
|
void IPv6::send(PacketSender& sender, const NetworkInterface &) {
|
||||||
struct sockaddr_in6 link_addr;
|
sockaddr_in6 link_addr;
|
||||||
PacketSender::SocketType type = PacketSender::IPV6_SOCKET;
|
const PacketSender::SocketType type = PacketSender::IPV6_SOCKET;
|
||||||
link_addr.sin6_family = AF_INET6;
|
link_addr.sin6_family = AF_INET6;
|
||||||
link_addr.sin6_port = 0;
|
link_addr.sin6_port = 0;
|
||||||
memcpy((uint8_t*)&link_addr.sin6_addr, header_.dst_addr, address_type::address_size);
|
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
|
#endif
|
||||||
|
|
||||||
void IPv6::add_ext_header(const ext_header& header) {
|
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_[IP_RAW_SOCKET] = IPPROTO_RAW;
|
||||||
types_[IPV6_SOCKET] = IPPROTO_RAW;
|
types_[IPV6_SOCKET] = IPPROTO_RAW;
|
||||||
types_[ICMP_SOCKET] = IPPROTO_ICMP;
|
types_[ICMP_SOCKET] = IPPROTO_ICMP;
|
||||||
|
types_[ICMPV6_SOCKET] = IPPROTO_ICMPV6;
|
||||||
}
|
}
|
||||||
|
|
||||||
PacketSender::~PacketSender() {
|
PacketSender::~PacketSender() {
|
||||||
|
|||||||
Reference in New Issue
Block a user