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_