)]}'
{
  "commit": "600a088254057f0b4255f42e66c7159d44089b62",
  "tree": "6632cd220e9560cb3407cf79ca64007eb50500dc",
  "parents": [
    "0ebf86424e327ff3929985d5aefb252d3cde1c65"
  ],
  "author": {
    "name": "QUICHE team",
    "email": "quiche-dev@google.com",
    "time": "Mon Dec 22 12:33:42 2025 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Mon Dec 22 12:34:50 2025 -0800"
  },
  "message": "QBONE ICMP reachable: convert to \"ping sockets\" to avoid the need for `SOCK_RAW` permissions.\n\n[\"ping sockets\"](https://lore.kernel.org/all/20110510180957.GA3262@albatros/) are a kernel feature from ~2011 that allow initiating ICMP echo requests via `SOCK_DGRAM` with protocol `IPPPROTO_ICMPV6`, instead of requiring `SOCK_RAW`.\n\nOnce such a socket is created, the kernel expects `send`/`sendto` payloads to start directly with the ICMP header.\n\nThe kernel commit message says, in part:\n\u003eICMP headers given to send() are checked and sanitized.\n\u003e\n\u003e (... ) The id is set to the number (local port) of the socket\n\nwhich could perhaps have been written more clearly as \"The id MUST BE set to the local port\", as in my experience not doing so results in `EINVAL`.\n\nBecause QBONE may ping addresses that are not explicitly listed in the routing table, additionally force the destination address scope ID to be that of the TUN/TAP interface used by the bonnet.  For typical usage (tun device `qbone0`) this is the equivalent of the `%qbone0` bit of the command line:\n```\n$ ping -6 \u003cdestaddr\u003e%qbone0\n```\n\nPiperOrigin-RevId: 847850750\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3b967a78d8c0b6c547675710fafe6ee892c5bd8f",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/icmp_reachable.cc",
      "new_id": "83239dcaf0dad1f22aa01f6e6e59fc072b15d224",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/icmp_reachable.cc"
    },
    {
      "type": "modify",
      "old_id": "89e15aa25cca4926567e068f89adfe468688fd74",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/icmp_reachable.h",
      "new_id": "8efaade1454c94b68eb9cbfc6872177516e0c21e",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/icmp_reachable.h"
    },
    {
      "type": "modify",
      "old_id": "555aa9f522706c9ddc66c5657aec297849776a8d",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/bonnet/icmp_reachable_test.cc",
      "new_id": "81dbbcedf2cf873304c44473b771e34f723df077",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/bonnet/icmp_reachable_test.cc"
    },
    {
      "type": "modify",
      "old_id": "d126af2464016498a2f3438ebe886dd2aed68a5a",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/platform/kernel_interface.h",
      "new_id": "f1f97a115ec251be0e42f5055dbb03c8dfa56920",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/platform/kernel_interface.h"
    },
    {
      "type": "modify",
      "old_id": "aff8a83010108df6c5c0726808b14fd935cc9428",
      "old_mode": 33188,
      "old_path": "quiche/quic/qbone/platform/mock_kernel.h",
      "new_id": "d86238d9e74d3718551fe744ff95c25791989fbe",
      "new_mode": 33188,
      "new_path": "quiche/quic/qbone/platform/mock_kernel.h"
    }
  ]
}
