Proto commits in holo-routing/holo

These 11 commits are when the Protocol Buffers files have changed:

Commit:1aef440
Author:Renato Westphal
Committer:Renato Westphal

daemon-grpc: separate state and configuration retrieval into dedicated RPCs Split the Get RPC from the native gRPC service into two specialized RPCs: GetState for state data and GetConfig for configuration data. This prepares the ground for adding streaming support for state data, which does not apply to configuration retrieval. Signed-off-by: Renato Westphal <renatowestphal@gmail.com>

The documentation is generated from this commit.

Commit:6760112
Author:Renato Westphal
Committer:Renato Westphal

northbound: use structured path elements for state retrieval Previously, the northbound layer represented data paths in state requests as plain strings. This commit replaces string-based path handling with structured path elements, defined as a sequence of names with associated key-value pairs. The gRPC protobuf definition has also been updated to align with the gNMI specification, which uses the same structured path format. This change enables subtree filtering by allowing list keys to be omitted or partially specified. It also lays the groundwork for more advanced filtering capabilities, such as depth limits and regex matching on list keys, for example selecting only interfaces whose names match a given pattern. Signed-off-by: Renato Westphal <renatowestphal@gmail.com>

Commit:7f37bf5
Author:Renato Westphal

daemon-grpc: add Subscribe RPC for YANG notification streaming While many protocol crates implement YANG-modeled notifications, they were not exposed to northbound clients. This commit introduces a streaming Subscribe() RPC to the holo.proto northbound interface for receiving YANG-modeled notifications (e.g. adjacency state changes, LSP events). Clients can optionally filter by YANG schema path prefix to receive only notifications of interest. This RPC should not be confused with the gNMI Subscribe() RPC, which is used for telemetry streaming of state data nodes. That functionality will be implemented separately in a future commit. Signed-off-by: Renato Westphal <renatowestphal@gmail.com>

Commit:f9dbb2a
Author:Renato Westphal
Committer:Renato Westphal

daemon-grpc: introduce the `GetSchema` RPC This RPC mirrors NETCONF's get-schema operation but offers more flexibility, as it can fetch YANG submodules in addition to YANG modules. The primary use case is for a CLI program to retrieve the list of supported YANG modules at startup, then use this RPC to fetch any missing modules. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>

Commit:277809b
Author:Renato Westphal
Committer:Renato Westphal

daemon-grpc: update `Capabilities` RPC to return supported features per module It's important to know which features are enabled or disabled, as this determines which parts of the YANG module are implemented. gNMI's `Capabilities` RPC doesn't provide this information, since OpenConfig modules typically don't use "feature" and "if-feature" statements, unlike IETF models. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>

Commit:79fb0d7
Author:Renato Westphal
Committer:Renato Westphal

grpc: add support for LYB binary YANG data format This commit updates the .proto file to allow instance data to be represented as either a string or binary data. This change is necessary because, in Rust, the `String` type cannot contain invalid UTF-8, which might be the case for LYB binary data. The introduction of the "oneof data" field increases complexity, as it introduces two possible fields to hold the data. However, this is necessary to support binary data. An alternative approach would be to use the "bytes" type exclusively for both text and binary data, but this would require clients to convert bytes to text (for XML and JSON), which can incur significant overhead in some languages. Performance tests indicate that using the LYB data format improves the holo-cli "show" commands' performance by approximately 30%. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>

Commit:bbeaa7e
Author:Renato Westphal
Committer:Renato Westphal

grpc: add `with_defaults` parameter to the `Get` RPC Signed-off-by: Renato Westphal <renato@opensourcerouting.org>

Commit:5bb16e0
Author:Renato Westphal
Committer:Renato Westphal

daemon-grpc: introduce the Validate() RPC This RPC enables users to fully validate a candidate configuration without committing it. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>

Commit:5d2cc0e
Author:Renato Westphal
Committer:Renato Westphal

daemon, cli: add support for commit comments Commit comments can be used to describe the configuration changes being pushed to the device, making the rollback log more informative. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>

Commit:1676c1e
Author:Renato Westphal
Committer:Renato Westphal

daemon: introduce rollback log feature This commit adds a new rollback log feature to holod, which enables network administrators to restore a previous configuration in the event of problems caused by recent changes. The feature is optional but enabled by default, and uses the lightweight PickleDB key-value store to store transactions. Currently, access to the rollback log is only available through gRPC. However, CLI rollback commands should come soon. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>

Commit:bff4e28
Author:Renato Westphal

Initial import. Signed-off-by: Renato Westphal <renato@opensourcerouting.org>