The folded header stops being a rule in a document and becomes the layout on the wire. Verbs number from sixteen, leaving describe, enumerate, subscribe and unsubscribe reserved and answered the same way by every provider — none of them writes a line to do it. What each protocol used to carry in a field of its own now travels in the header: a vfs node and a display layer are the packet's target, and a reply opens with a status the envelope stamps rather than one each protocol spelled for itself. Display gains the most. One forty-byte request had served eleven verbs, so attach_scanout smuggled stride through x, refresh through y and format through colour, and every coordinate crossed as a bitcast. Per-operation structs end all three: the fields have their own names and their own signs, and the tile payload grows to 224 bytes because the prefix shrank. Scanout loses a message maximum of 64 it had no business declaring — it answers calls, and the floor for a call is 256 — and virtio-gpu stops hard-coding that number at its harness. Two changes are semantic rather than notational. A directory now ends at an entry with no name, because the fixed part of a reply always travels and a zero-length reply no longer exists to mean anything. And input joins the service harness, the last loop in the tree that answered no ping and heard no terminate; its subscriber table, its pruning and its fan-out are the same code, and a shutdown now asks it to stop instead of killing it. A new conformance case reads the registry's own listing and asks every protocol it finds for its name, its version and its verb count, then offers a verb nobody defines and requires -ENOSYS — the envelope's promise, checked against providers rather than against itself. What it cannot reach in that boot it names on the serial line instead of passing quietly. Suite 110/110.
21 lines
1.0 KiB
Zig
21 lines
1.0 KiB
Zig
.{
|
|
.name = .protocol_conformance_test,
|
|
.version = "0.0.0",
|
|
.fingerprint = 0xea942427118ba350, // Changing this has security and trust implications.
|
|
.minimum_zig_version = "0.16.0",
|
|
.dependencies = .{
|
|
// build-support supplies the shared recipe; kernel is implicit in
|
|
// every binary (the root shim + link script live there). The rest
|
|
// are exactly the homes of this binary's declared imports.
|
|
.@"build-support" = .{ .path = "../../../../build-support" },
|
|
.kernel = .{ .path = "../../../../library/kernel" },
|
|
// envelope: the reserved verbs and the errno a refused one answers;
|
|
// vfs-protocol: the registry's own readdir, which is where the set
|
|
// under test comes from; the four -protocol modules: the name, the
|
|
// version and the verb count each contract's `describe` must report,
|
|
// read off the contract itself rather than copied beside it.
|
|
.protocol = .{ .path = "../../../../library/protocol" },
|
|
},
|
|
.paths = .{""},
|
|
}
|