RPC overview and supporting interfaces
SR Linux supports the gNMI and JSON interfaces that use the Remote Procedure Call (RPC) protocol for the modification and retrieval of a configuration from a target device as if it were a local object. This chapter provides a general RPC overview and defines how SR Linux implements the gNMI and JSON serving RPCs.
RPC overview
An RPC executes a procedure or method on a remote device in a way similar to one executed locally. Using an RPC should look and feel like a local procedure call and achieve similar results.
When RPCs operate in a server/client model, the client executes an application and requests some method be executed on a server. The server receives the RPC, executes the method, and sends the outcome back to the server. For this to occur, the following are needed:
A server application that contains a set of methods (or service) which a client can call. For example, a gNMI server or JSON-RPC server. Each needs to receive an RPC from a client for a specific method or service, execute the requested methods/service, and return data.
A common way of describing which method to execute and associated data.
This is referred to as encoding/decoding or serialization/deserialization. For example, proto buffers or JSON.
A transport mechanism between the two devices. In the case of gNMI and JSON-RPC this is done using HTTP/2 and HTTP1.1 over TCP secured by TLS.
For RPCs to relate to network applications and a network operating system, there needs to be a way to define the data model of the network constructs which an RPC must perform. In the SR Linux, all applications are modeled in YANG, as shown in the following figure.
gNMI path convention
Because SR Linux is modeled in YANG, for RPCs to retrieve or configure an SR Linux device (set) the data location or path to the data within the YANG model must be specified to the RPC. For example, to configure a description under a BGP peer, the RPC server must be able to reference this specific data and its location in the SR Linux data model.
Both the JSON-RPC and gNMI use the gNMI path convention to describe the location or path in SR Linux. The gNMI path convention is commonly referred to as the ‟path” and defines the data structure of a path to reference a config or state leaf within SR Linux.
A path is an ordered list of path elements with each element containing an element name and one or more key value pairs associated with the element. For example:
path: <
elem: <
name: "interface"
key: <
key: "name"
value: "ethernet-1/20"
>
>
elem: <
name: "subinterface"
key: <
key: "index"
value: "1"
>
A path can also be displayed as a string which is more human readable. The rules for building this string type are:
Each path element is separated by a ‟/” character and listed in sequence.
A path element which contains one or more key/value pairs is represented by the path element name followed the key/value wrapped in brackets ( [ ] ).
The root of the data tree is represented by a single ‟/”.
The following is a human readable path for the previous example:
/interface=ethernet-1/20/subinterface[index=1]
Configuring a gNMI or JSON server
The SR Linux can enable a gNMI server that allows external gNMI clients to connect to the device and modify the configuration and collect state information. You can also enable a JSON-RPC server on the SR Linux device, which allows you issue JSON-formatted requests to the device to retrieve and set configuration and state.
See the Management Servers chapter in the SR Linux Configuration Basics Guide for details on how to configure these servers.