{ return false; }
bool IcmpData::match_time_exceeded(const uint16_t identifier,
- const uint16_t sequence_number) const
+ const uint16_t sequence_number,
+ const address &destination_address) const
{ return false; }
std::size_t IcmpData::get_size() const
const address &destination_address) const;
virtual bool match_time_exceeded(const uint16_t identifier,
- const uint16_t sequence_number) const;
+ const uint16_t sequence_number,
+ const address &destination_address) const;
// including 4 bytes from ICMPv4 header
std::size_t get_size() const;
== destination_address;
}
-bool IcmpDestinationUnreachableData::match_time_exceeded(
- const uint16_t identifier,
- const uint16_t sequence_number) const
-{ return false; }
-
/**
* @brief Prints the destination unreachable messages.
*
const uint16_t sequence_number,
const address &destination_address) const;
- bool match_time_exceeded(const uint16_t identifier,
- const uint16_t sequence_number) const;
-
/**
* @brief Prints the destination unreachable messages.
*
const uint16_t sequence_number,
const address &destination_address) const
{
- return icmp_data_ptr->match_time_exceeded(identifier, sequence_number);
- // do not test ip since probably comes from router on route to dest. addr
+ return icmp_data_ptr->match_time_exceeded(identifier,
+ sequence_number,
+ destination_address);
}
bool IcmpPacket::match_echo_reply(const uint16_t identifier,
{}
bool IcmpTimeExceededData::match_time_exceeded(
- const uint16_t identifier,
- const uint16_t sequence_number) const
-{
- return IcmpData_PingFailReply::match_ping_request(identifier,
- sequence_number);
-}
-
-bool IcmpTimeExceededData::match_destination_unreachable(
const uint16_t identifier,
const uint16_t sequence_number,
const address &destination_address) const
-{ return false; }
+{
+ return IcmpData_PingFailReply::match_ping_request(identifier,
+ sequence_number)
+ && IcmpData::get_ip_header()->get_destination_address()
+ == destination_address;
+}
void IcmpTimeExceededData::print(
const size_t &bytes_received,
public:
IcmpTimeExceededData(const std::size_t size_arg);
- bool match_destination_unreachable(const uint16_t identifier,
- const uint16_t sequence_number,
- const address &destination_address) const;
-
bool match_time_exceeded(const uint16_t identifier,
- const uint16_t sequence_number) const;
+ const uint16_t sequence_number,
+ const address &destination_address) const;
void print( const size_t &bytes_received,
const boost::posix_time::ptime &time_packet_sent,
BOOST_CHECK_EQUAL( packet->get_icmp_code(), 0 );
BOOST_CHECK_EQUAL( packet->get_icmp_size(), 48 );
BOOST_CHECK( packet->match_time_exceeded(0x4ae3, 1,
- boost::asio::ip::address_v4::from_string("193.168.7.1")) );
+ boost::asio::ip::address_v4::from_string("216.218.186.2")) );
}
BOOST_AUTO_TEST_CASE( DestinationUnreachable )