Internal change PiperOrigin-RevId: 459545619
diff --git a/quiche/quic/qbone/qbone_packet_processor_test_tools.cc b/quiche/quic/qbone/qbone_packet_processor_test_tools.cc index ae9dd56..9a73188 100644 --- a/quiche/quic/qbone/qbone_packet_processor_test_tools.cc +++ b/quiche/quic/qbone/qbone_packet_processor_test_tools.cc
@@ -25,4 +25,16 @@ return packet; } +bool DecrementIPv6HopLimit(std::string& packet) { + if (packet.size() < sizeof(ip6_hdr)) { + return false; + } + ip6_hdr* header = reinterpret_cast<ip6_hdr*>(&packet[0]); + if (header->ip6_vfc >> 4 != 6 || header->ip6_hops == 0) { + return false; + } + header->ip6_hops--; + return true; +} + } // namespace quic
diff --git a/quiche/quic/qbone/qbone_packet_processor_test_tools.h b/quiche/quic/qbone/qbone_packet_processor_test_tools.h index 191a417..3d3492d 100644 --- a/quiche/quic/qbone/qbone_packet_processor_test_tools.h +++ b/quiche/quic/qbone/qbone_packet_processor_test_tools.h
@@ -37,6 +37,10 @@ std::string PrependIPv6HeaderForTest(const std::string& body, int hops); +// Returns true if the hop limit was decremented. Returns false if the packet is +// too short, not IPv6, or already has a hop limit of zero. +bool DecrementIPv6HopLimit(std::string& packet); + } // namespace quic #endif // QUICHE_QUIC_QBONE_QBONE_PACKET_PROCESSOR_TEST_TOOLS_H_