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_