Get desktop application:
View/edit binary Protocol Buffers messages
Resume mode: rename an orphan container to the new containerd-assigned ID so the running process is adopted instead of duplicated.
(message has no fields)
vm
WarmFork: verify all readiness sockets are open and workloads speak the expected protocol version. The guest agent probes each target: connects, reads CAPABILITIES, then closes the connection. Each workload receives EOF and loops back to accept(), ready for the real injection after restore.
WarmFork: pre-snapshot readiness socket probe. Targets to probe. For single-container mode this has exactly one entry.
Per-target results, in the same order as CheckInjectSocketRequest.targets.
WarmFork: deliver task parameters to all ready-waiting workload processes via the two-phase PREPARE/READY/COMMIT/STARTED protocol. The guest agent enters each container's mount namespace (via setns) before connecting to its readiness socket.
WarmFork: task parameters delivered to all ready-waiting workload processes. The guest agent implements the two-phase PREPARE/READY/COMMIT/STARTED protocol.
One entry per workload target.
Phase-1 timeout in milliseconds (waiting for all READY replies).
Phase-2 timeout in milliseconds (waiting for all STARTED replies after COMMIT).
Per-target results, in the same order as InjectTaskRequest.tasks.
Snapshot restore: inject fresh host-generated entropy into the guest to prevent duplicate random state across VMs restored from the same snapshot.
SyncClockPacket is the data struct for time syncing ttrpc call SyncClock is a two step ttrpc call, the first call with a zero delta, is to determine the time offset between host and guest, client will calculate the offset and set it to Delta, call SyncClock again, process inside the vm will set the guest time to add the Delta to the current time the ClientSendTime/ClientArriveTime/ServerSendTime/ServerArriveTime are all in nanosecond.
networking
Per-target result of InjectTask.
Used in:
Which phase this result belongs to; use this, not enum ordinal.
Per-container task parameters for injection.
Used in:
Used for mount-namespace entry.
Absolute path of the readiness socket inside the container's mount namespace.
Non-empty; same value for all targets in one restore.
Per-target effective env overrides (pod-level merged with per-container).
Per-target effective context.
Used in:
Used in: ,
Which protocol phase the result belongs to, so the host can choose the correct action (rollback vs. VM stop) without relying on enum ordinals.
Used in:
Failure before COMMIT was sent (connect / setns / PREPARE exchange).
Failure after COMMIT was sent (COMMIT exchange / STARTED wait).
Used in:
Workload sent STARTED; restore committed.
Workload sent REJECT during PREPARE (always PHASE_PREPARE).
Could not connect to readiness socket.
setns into container's mount namespace failed.
Unexpected message or parse failure.
READY never received within prepare_timeout_ms (always PHASE_PREPARE).
STARTED never received within commit_timeout_ms (always PHASE_COMMIT).
container_id not found in guest agent.
Any other guest-side error.
One workload container target to probe or inject.
Used in:
CRI container ID; guest agent uses this to enter the container's mount namespace.
Absolute path of the readiness socket inside the container's mount namespace. Defaults to /run/warmfork-readiness.sock when empty.
Used in: ,
Type defines the type of interface described by this structure. The expected values are the one that are defined by the netlink library, regarding each type of link. Here is a non exhaustive list: "veth", "macvtap", "vlan", "macvlan", "tap", ...
Used in: ,
Per-target result of CheckInjectSocket.
Used in:
Human-readable detail on non-OK status.
Used in:
container_id unknown to guest agent.
setns into container's mount namespace failed.
unix connect() to socket_path failed.
CAPABILITIES missing, wrong version, or malformed.