docs(reference/nix-daemon-protocol): migrate
This moves the daemon protocol reference to the "Reference" section in
our new docs.
It also updates them a bit, we now use `{{< relref "path/to/file.md" >}}`
to refer to other files, and fixes the (previously broken) references
in handshake.md.
Change-Id: I114e40622dc504e7a5f75946895900e797a1e722
Reviewed-on: https://cl.snix.dev/c/snix/+/30273
Autosubmit: Florian Klink <flokli@flokli.de>
Tested-by: besadii
Reviewed-by: Brian Olsen <brian@maven-group.org>
This commit is contained in:
parent
76250b354f
commit
8101e7a45f
10 changed files with 165 additions and 79 deletions
|
|
@ -28,9 +28,3 @@
|
||||||
- [Specification of the Nix Language](./language-spec.md)
|
- [Specification of the Nix Language](./language-spec.md)
|
||||||
- [Nix language version history](./lang-version.md)
|
- [Nix language version history](./lang-version.md)
|
||||||
- [Value Pointer Equality](./value-pointer-equality.md)
|
- [Value Pointer Equality](./value-pointer-equality.md)
|
||||||
- [Daemon Protocol](./nix-daemon/index.md)
|
|
||||||
- [Handshake](./nix-daemon/handshake.md)
|
|
||||||
- [Logging](./nix-daemon/logging.md)
|
|
||||||
- [Operations](./nix-daemon/operations.md)
|
|
||||||
- [Serialization](./nix-daemon/serialization.md)
|
|
||||||
- [Changelog](./nix-daemon/changelog.md)
|
|
||||||
|
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
## client -> server
|
|
||||||
- 0x6e697863 :: [Int](#int) (hardcoded, 'nixc' in ASCII)
|
|
||||||
|
|
||||||
## client <- server
|
|
||||||
- 0x6478696f :: [Int](#int) (hardcoded, 'dxio' in ASCII)
|
|
||||||
- protocolVersion :: [Int](#int)
|
|
||||||
|
|
||||||
## client -> server
|
|
||||||
- clientVersion :: [Int](#int)
|
|
||||||
|
|
||||||
### If clientVersion is 1.14 or later
|
|
||||||
- sendCpu :: [Bool](#bool) (hardcoded to false in client)
|
|
||||||
#### If sendCpu is true
|
|
||||||
- cpuAffinity :: [Int](#int) (obsolete and ignored)
|
|
||||||
|
|
||||||
### If clientVersion is 1.11 or later
|
|
||||||
- reserveSpace :: [Bool](#bool) (obsolete, ignored and set to false)
|
|
||||||
|
|
||||||
|
|
||||||
## client <- server
|
|
||||||
|
|
||||||
### If clientVersion is 1.33 or later
|
|
||||||
- nixVersion :: String
|
|
||||||
|
|
||||||
### If clientVersion is 1.35 or later
|
|
||||||
- trusted :: OptTrusted
|
|
||||||
|
|
||||||
## client <- server
|
|
||||||
- send logs
|
|
||||||
- [operation](./operations.md) :: Int
|
|
||||||
|
|
@ -5,7 +5,7 @@ summary: ""
|
||||||
date: 2023-09-07T16:12:37+02:00
|
date: 2023-09-07T16:12:37+02:00
|
||||||
lastmod: 2023-09-07T16:12:37+02:00
|
lastmod: 2023-09-07T16:12:37+02:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 900
|
weight: 50
|
||||||
toc: true
|
toc: true
|
||||||
sidebar:
|
sidebar:
|
||||||
collapsed: true
|
collapsed: true
|
||||||
|
|
|
||||||
11
web/content/docs/reference/nix-daemon-protocol/_index.md
Normal file
11
web/content/docs/reference/nix-daemon-protocol/_index.md
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
---
|
||||||
|
title: Nix Daemon Protocol
|
||||||
|
slug: nix-daemon-protocol
|
||||||
|
description: ""
|
||||||
|
summary: ""
|
||||||
|
date: 2025-03-24T13:10:37+02:00
|
||||||
|
lastmod: 2025-03-24T13:10:37+02:00
|
||||||
|
draft: false
|
||||||
|
weight: 50
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
@ -1,4 +1,21 @@
|
||||||
|
---
|
||||||
|
title: Changelog
|
||||||
|
slug: Changelog
|
||||||
|
description: ""
|
||||||
|
summary: ""
|
||||||
|
date: 2025-03-24T13:10:37+02:00
|
||||||
|
lastmod: 2025-03-24T13:10:37+02:00
|
||||||
|
draft: false
|
||||||
|
weight: 55
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
|
This page tracks the different protocol versions and corresponding Nix versions,
|
||||||
|
as well as when certain [Operations][operations] have been introduced or
|
||||||
|
deprecated.
|
||||||
|
|
||||||
|
Different "function signatures" are tracked on the [Operations][operations] page
|
||||||
|
as well.
|
||||||
|
|
||||||
## Nix version protocol
|
## Nix version protocol
|
||||||
|
|
||||||
|
|
@ -200,3 +217,5 @@ Protocol version that ends with * was bumped while adding that operation. Otherw
|
||||||
[f3441e6122]: https://github.com/NixOS/nix/commit/f3441e6122
|
[f3441e6122]: https://github.com/NixOS/nix/commit/f3441e6122
|
||||||
[f92c9a0ac5]: https://github.com/NixOS/nix/commit/f92c9a0ac5
|
[f92c9a0ac5]: https://github.com/NixOS/nix/commit/f92c9a0ac5
|
||||||
[fe1f34fa60]: https://github.com/NixOS/nix/commit/fe1f34fa60
|
[fe1f34fa60]: https://github.com/NixOS/nix/commit/fe1f34fa60
|
||||||
|
|
||||||
|
[operations]: {{< relref "operations.md" >}}
|
||||||
49
web/content/docs/reference/nix-daemon-protocol/handshake.md
Normal file
49
web/content/docs/reference/nix-daemon-protocol/handshake.md
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
---
|
||||||
|
title: Handshake
|
||||||
|
slug: handshake
|
||||||
|
description: ""
|
||||||
|
summary: ""
|
||||||
|
date: 2025-03-24T13:10:37+02:00
|
||||||
|
lastmod: 2025-03-24T13:10:37+02:00
|
||||||
|
draft: false
|
||||||
|
weight: 51
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
|
When connecting, the handshake sequence documented below must be performed, so
|
||||||
|
client and server can agree on a protocol version to use and exchange some
|
||||||
|
parameters.
|
||||||
|
|
||||||
|
## client -> server
|
||||||
|
- 0x6e697863 :: [Int](#se-Int) (hardcoded, 'nixc' in ASCII)
|
||||||
|
|
||||||
|
## client <- server
|
||||||
|
- 0x6478696f :: [Int](#se-Int) (hardcoded, 'dxio' in ASCII)
|
||||||
|
- protocolVersion :: [Int](#se-Int)
|
||||||
|
|
||||||
|
## client -> server
|
||||||
|
- clientVersion :: [Int](#se-Int)
|
||||||
|
|
||||||
|
### If clientVersion is 1.14 or later
|
||||||
|
- sendCpu :: [Bool](#se-Bool) (hardcoded to false in client)
|
||||||
|
#### If sendCpu is true
|
||||||
|
- cpuAffinity :: [Int](#se-Int) (obsolete and ignored)
|
||||||
|
|
||||||
|
### If clientVersion is 1.11 or later
|
||||||
|
- reserveSpace :: [Bool](#se-Bool) (obsolete, ignored and set to false)
|
||||||
|
|
||||||
|
|
||||||
|
## client <- server
|
||||||
|
|
||||||
|
### If clientVersion is 1.33 or later
|
||||||
|
- nixVersion :: String
|
||||||
|
|
||||||
|
### If clientVersion is 1.35 or later
|
||||||
|
- trusted :: OptTrusted
|
||||||
|
|
||||||
|
## client <- server
|
||||||
|
- send logs
|
||||||
|
- [operation]({{< relref "operations.md" >}}) :: [Int](#se-Int)
|
||||||
|
|
||||||
|
[se-Int]: {{< relref "serialization.md" >}}#int
|
||||||
|
[se-Bool]: {{< relref "serialization.md" >}}#bool
|
||||||
|
|
@ -1,15 +1,25 @@
|
||||||
# Nix Daemon Protocol
|
---
|
||||||
|
title: Intro
|
||||||
|
slug: Intro
|
||||||
|
description: ""
|
||||||
|
summary: ""
|
||||||
|
date: 2025-03-24T13:10:37+02:00
|
||||||
|
lastmod: 2025-03-24T13:10:37+02:00
|
||||||
|
draft: false
|
||||||
|
weight: 50
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
The Nix Daemon protocol is what's used to communicate with the `nix-daemon`,
|
The Nix Daemon protocol is what's used to communicate with the `nix-daemon`,
|
||||||
either on the local system (in which case the communication happens via a Unix
|
either on the local system (in which case the communication happens via a Unix
|
||||||
domain socket), or with a remote Nix (in which this is tunneled over SSH).
|
domain socket), or with a remote Nix (in which this is tunneled over SSH).
|
||||||
|
|
||||||
It uses a custom binary format which isn't too documented. The subpages here
|
It uses a custom binary format which isn't too documented. This reference here
|
||||||
collect serve as an in-depth detail about some of the inner workings, data types
|
aims to serve as an in-depth documentation about some of the inner workings,
|
||||||
etc.
|
data types etc.
|
||||||
|
|
||||||
A first implementation of this exists in
|
A first implementation of this exists in
|
||||||
[griff/Nix.rs](https://github.com/griff/Nix.rs/tree/main).
|
[griff/Nix.rs](https://github.com/griff/Nix.rs/tree/main).
|
||||||
|
|
||||||
Work is underway to port / factor this out into reusable building blocks into
|
Work is underway to port / factor this out into reusable building blocks into
|
||||||
the [nix-compat] crate.
|
the [nix-compat](https://snix.dev//rustdoc/nix_compat/index.html) crate.
|
||||||
|
|
@ -1,4 +1,14 @@
|
||||||
# Logging
|
---
|
||||||
|
title: Logging
|
||||||
|
slug: logging
|
||||||
|
description: ""
|
||||||
|
summary: ""
|
||||||
|
date: 2025-03-24T13:10:37+02:00
|
||||||
|
lastmod: 2025-03-24T13:10:37+02:00
|
||||||
|
draft: false
|
||||||
|
weight: 54
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
Because the daemon protocol only has one sender stream and one receiver stream
|
Because the daemon protocol only has one sender stream and one receiver stream
|
||||||
logging messages need to be carefully interleaved with requests and responses.
|
logging messages need to be carefully interleaved with requests and responses.
|
||||||
|
|
@ -1,5 +1,17 @@
|
||||||
|
---
|
||||||
|
title: Operations
|
||||||
|
slug: operations
|
||||||
|
description: ""
|
||||||
|
summary: ""
|
||||||
|
date: 2025-03-24T13:10:37+02:00
|
||||||
|
lastmod: 2025-03-24T13:10:37+02:00
|
||||||
|
draft: false
|
||||||
|
weight: 53
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
# TOC
|
These page describes the different operations a client can request, as well as
|
||||||
|
its expected input and output types.
|
||||||
|
|
||||||
| Operation | Id |
|
| Operation | Id |
|
||||||
| ----------------------------------------------------------- | -- |
|
| ----------------------------------------------------------- | -- |
|
||||||
|
|
@ -869,36 +881,36 @@ gcRoot :: [Path][se-Path]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[se-Int]: ./serialization.md#int
|
[se-Int]: {{< relref "serialization.md" >}}#int
|
||||||
[se-UInt8]: ./serialization.md#uint8
|
[se-UInt8]: {{< relref "serialization.md" >}}#uint8
|
||||||
[se-UInt64]: ./serialization.md#uint64
|
[se-UInt64]: {{< relref "serialization.md" >}}#uint64
|
||||||
[se-Bool]: ./serialization.md#bool
|
[se-Bool]: {{< relref "serialization.md" >}}#bool
|
||||||
[se-Bool64]: ./serialization.md#bool64
|
[se-Bool64]: {{< relref "serialization.md" >}}#bool64
|
||||||
[se-Time]: ./serialization.md#time
|
[se-Time]: {{< relref "serialization.md" >}}#time
|
||||||
[se-FileIngestionMethod]: ./serialization.md#fileingestionmethod
|
[se-FileIngestionMethod]: {{< relref "serialization.md" >}}#fileingestionmethod
|
||||||
[se-BuildMode]: ./serialization.md#buildmode
|
[se-BuildMode]: {{< relref "serialization.md" >}}#buildmode
|
||||||
[se-Verbosity]: ./serialization.md#verbosity
|
[se-Verbosity]: {{< relref "serialization.md" >}}#verbosity
|
||||||
[se-GCAction]: ./serialization.md#gcaction
|
[se-GCAction]: {{< relref "serialization.md" >}}#gcaction
|
||||||
[se-Bytes]: ./serialization.md#bytes
|
[se-Bytes]: {{< relref "serialization.md" >}}#bytes
|
||||||
[se-String]: ./serialization.md#string
|
[se-String]: {{< relref "serialization.md" >}}#string
|
||||||
[se-StorePath]: ./serialization.md#storepath
|
[se-StorePath]: {{< relref "serialization.md" >}}#storepath
|
||||||
[se-BaseStorePath]: ./serialization.md#basestorepath
|
[se-BaseStorePath]: {{< relref "serialization.md" >}}#basestorepath
|
||||||
[se-OptStorePath]: ./serialization.md#optstorepath
|
[se-OptStorePath]: {{< relref "serialization.md" >}}#optstorepath
|
||||||
[se-ContentAddressMethodWithAlgo]: ./serialization.md#contentaddressmethodwithalgo
|
[se-ContentAddressMethodWithAlgo]: {{< relref "serialization.md" >}}#contentaddressmethodwithalgo
|
||||||
[se-OptContentAddress]: ./serialization.md#optcontentaddress
|
[se-OptContentAddress]: {{< relref "serialization.md" >}}#optcontentaddress
|
||||||
[se-DerivedPath]: ./serialization.md#derivedpath
|
[se-DerivedPath]: {{< relref "serialization.md" >}}#derivedpath
|
||||||
[se-DrvOutput]: ./serialization.md#drvoutput
|
[se-DrvOutput]: {{< relref "serialization.md" >}}#drvoutput
|
||||||
[se-Realisation]: ./serialization.md#realisation
|
[se-Realisation]: {{< relref "serialization.md" >}}#realisation
|
||||||
[se-List]: ./serialization.md#list-of-x
|
[se-List]: {{< relref "serialization.md" >}}#list-of-x
|
||||||
[se-Set]: ./serialization.md#set-of-x
|
[se-Set]: {{< relref "serialization.md" >}}#set-of-x
|
||||||
[se-Map]: ./serialization.md#map-of-x-to-y
|
[se-Map]: {{< relref "serialization.md" >}}#map-of-x-to-y
|
||||||
[se-SubstitutablePathInfo]: ./serialization.md#substitutablepathinfo
|
[se-SubstitutablePathInfo]: {{< relref "serialization.md" >}}#substitutablepathinfo
|
||||||
[se-ValidPathInfo]: ./serialization.md#validpathinfo
|
[se-ValidPathInfo]: {{< relref "serialization.md" >}}#validpathinfo
|
||||||
[se-UnkeyedValidPathInfo]: ./serialization.md#unkeyedvalidpathinfo
|
[se-UnkeyedValidPathInfo]: {{< relref "serialization.md" >}}#unkeyedvalidpathinfo
|
||||||
[se-BuildResult]: ./serialization.md#buildmode
|
[se-BuildResult]: {{< relref "serialization.md" >}}#buildmode
|
||||||
[se-KeyedBuildResult]: ./serialization.md#keyedbuildresult
|
[se-KeyedBuildResult]: {{< relref "serialization.md" >}}#keyedbuildresult
|
||||||
[se-BasicDerivation]: ./serialization.md#basicderivation
|
[se-BasicDerivation]: {{< relref "serialization.md" >}}#basicderivation
|
||||||
[se-Framed]: ./serialization.md#framed
|
[se-Framed]: {{< relref "serialization.md" >}}#framed
|
||||||
[se-AddMultipleToStore]: ./serialization.md#addmultipletostore-format
|
[se-AddMultipleToStore]: {{< relref "serialization.md" >}}#addmultipletostore-format
|
||||||
[se-ExportFormat]: ./serialization.md#export-path-format
|
[se-ExportFormat]: {{< relref "serialization.md" >}}#export-path-format
|
||||||
[se-ImportPaths]: ./serialization.md#import-paths-format
|
[se-ImportPaths]: {{< relref "serialization.md" >}}#import-paths-format
|
||||||
|
|
@ -1,3 +1,16 @@
|
||||||
|
---
|
||||||
|
title: Types
|
||||||
|
slug: types
|
||||||
|
description: ""
|
||||||
|
summary: ""
|
||||||
|
date: 2025-03-24T13:10:37+02:00
|
||||||
|
lastmod: 2025-03-24T13:10:37+02:00
|
||||||
|
draft: false
|
||||||
|
weight: 52
|
||||||
|
toc: true
|
||||||
|
---
|
||||||
|
|
||||||
|
This describes how certain types are serialized to the wire format.
|
||||||
|
|
||||||
### UInt64
|
### UInt64
|
||||||
Little endian byte order
|
Little endian byte order
|
||||||
Loading…
Add table
Add a link
Reference in a new issue