gNMI Streaming

You can use gRPC Network Management Interface (gNMI) to collect system metrics and export the data to a gNMI client.

Cumulus Linux supports:

  • gNMI with Cumulus Linux, where Cumulus Linux includes the gNMI agent that listens over port 9339.
  • gNMI with NetQ, where the netq-agent package includes the gNMI agent that listens over port 9339.

To use both gNMI streaming with Cumulus Linux and gNMI streaming with NetQ, you must use different ports.

gNMI with Cumulus Linux

This section discusses how to configure and use gNMI with Cumulus Linux. To configure and use gNMI with NetQ, see gNMI with NetQ.

  • When you enable gNMI with Cumulus Linux, do not enable and use Open Telemetry.
  • Switches with the Spectrum 1 ASIC do not support gNMI streaming.

Cumulus Linux supports both gNMI dial-in mode, where a collector can start a connection with the switch to collect available statistics, and gNMI dial-out mode, where the switch streams statistics and exports them to a collector.

Configure gNMI Dial-in Mode

In dial-in telemetry mode, the data collector initiates the gRPC connection, the Cumulus Linux switch assumes the role of the gRPC server and the receiver (collector) is the client. The switch pushes data to the collector.

To configure gNMI dial-in mode, you must:

  • Specify the gNMI server listening address
  • Enable the gNMI server.

To configure optional settings for gNMI dial-in mode:

  • Specify the listening port. The default port is 9339.
  • Enable a TLS certificate for validation.
    • Cumulus Linux uses a self-signed certificate. You can generate your own TLS server certificate and bind it with the gNMI server application.
    • If you need to use mTLS on the gNMI RPC, import the certificate of the CA that signed the gNMI client keys (or the client certificate itself) to the switch and configure the gNMI server to use the certificate. You can also apply a CRL. Specify either uri (a local or remote URI from where to retrieve the crl bundle file) or data (for a PEM encoded CRL).

When you configure a CA certificate, entity certificate, or CRL, the configuration will apply to any new gNMI sessions that establish. Existing dial-in connections will continue to use the prior configuration until they reestablish.

The following example sets the gNMI server listening address to 10.10.10.1 and the port to 443, and enables the gNMI server:

cumulus@switch:~$ nv set system gnmi-server listening-address 10.10.10.1
cumulus@switch:~$ nv set system gnmi-server port 443
cumulus@switch:~$ nv set system gnmi-server state enabled
cumulus@switch:~$ nv config apply

The following example imports and sets the CA certificate CERT1 and the CRL crl.crt for mTLS:

cumulus@switch:~$ nv action import system security ca-certificate CERT1 passphrase mypassphrase uri-bundle scp://user@pass:1.2.3.4:/opt/certs/cert.p12
cumulus@switch:~$ nv set system gnmi-server mtls ca-certificate CERT1
cumulus@switch:~$ nv action import system security crl uri scp://user:password@hostname/path/crl.crt
cumulus@switch:~$ nv set system gnmi-server mtls crl /etc/ssl/certs/crl.crt
cumulus@switch:~$ nv config apply

Configure gNMI Dial-out Mode

In dial-out telemetry mode, the Cumulus Linux switch initiates the gRPC connection to the collector through a gRPC tunnel server and assumes the role of the gRPC client.

To configure gNMI dial-out mode, you must:

  • Specify the listening address for each tunnel server to which you want to connect. Cumulus Linux supports a maximum of 10 tunnel servers.
  • Enable the tunnel server.

To configure optional settings for each tunnel server:

  • Specify the target name and target application you want to access. The default target application is GNMI-GNOI.
  • Specify the retry interval. The default retry interval is 30 seconds.
  • Import and enable a TLS or mTLS certificate for validation. You can also apply a CRL. For information about importing certificates and CRLs, refer to Security with Certificates and CRLs.

When you configure a CA certificate, entity certificate, or CRL, existing dial-out gNMI sessions are disconnected to apply the new certificate configuration.

The following example sets the listening address for tunnel server SERVER1 to 10.1.1.10, and enables the tunnel server:

cumulus@switch:~$ nv set system grpc-tunnel server SERVER1 address 10.1.1.10 
cumulus@switch:~$ nv set system grpc-tunnel server SERVER1 state enabled 
cumulus@switch:~$ nv config apply

The following example sets the listening address for tunnel server SERVER1 to 10.1.1.10 and the port to 443, the target name to TARGET1, the retry interval to 40, the CA certificate to CACERT1, and enables the tunnel server:

cumulus@switch:~$ nv set system grpc-tunnel server SERVER1 address 10.1.1.10 
cumulus@switch:~$ nv set system grpc-tunnel server SERVER1 port 443 
cumulus@switch:~$ nv set system grpc-tunnel server SERVER1 target-name TARGET1 
cumulus@switch:~$ nv set system grpc-tunnel server SERVER1 retry-interval 40
cumulus@switch:~$ nv action import system security ca-certificate CACERT1 uri-public-key scp://user@pass:1.2.3.4:/opt/certs/ca-cert.pem uri-private-key scp://user@pass:1.2.3.4:/opt/certs/ca-cert-key.pem
cumulus@switch:~$ nv set system grpc-tunnel server SERVER1 ca-certificate CACERT1
cumulus@switch:~$ nv set system grpc-tunnel server SERVER1 state enabled 
cumulus@switch:~$ nv config apply

Show gNMI Configuration and Status Information

To show gNMI server configuration and connection information, such the number of active subscriptions, received and rejected subscription requests, and received capability requests, run the nv show system gnmi-server command.

cumulus@switch:~$ nv show system gnmi-server 
                                  operational  applied    
--------------------------------  -----------  -----------
state                             disabled     enabled   
certificate                       self-signed  self-signed
port                              9339         9339
[listening-address]               10.1.1.100   10.1.1.100        
version                                                   
status                                                    
  total-active-subscriptions      0                       
  received-subscription-requests  0                       
  rejected-subscriptions          0                       
  received-capabilities-requests  0                       
  [client]

To show the listening address of the gNMI server, run the nv show system gnmi-server listening-address command:

cumulus@switch:~$ nv show system gnmi-server listening-address
----------
10.1.1.100

To show gNMI server mTLS information, run the nv show system gnmi-server mtls command:

cumulus@switch:~$ nv show system gnmi-server mtls
                operational  applied  pending         
--------------  -----------  -------  ----------------
ca-certificate  CACERT1       CACERT1   CACERT          
crl                                   abcdefghijklmnop

To show only gNMI server connection information, run the nv show system gnmi-server status command:

cumulus@switch:~$ nv show system gnmi-server status
                                operational
------------------------------  -----------
total-active-subscriptions      0          
received-subscription-requests  0          
rejected-subscriptions          0          
received-capabilities-requests  0

To show gRPC tunnel server configuration and connection information, run the nv show system grpc-tunnel server <server> command:

cumulus@switch:~$ nv show system grpc-tunnel server SERVER1
nv show system grpc-tunnel server SERVER1
                 operational           applied  
---------------  --------------------  ---------
state            disabled              enabled  
target-name      TARGET1               TARGET1  
address          10.1.1.10             10.1.1.10
port             443                   443      
target-type      gnmi-gnoi             gnmi-gnoi
retry-interval   40                    40       
status                                          
  local-port     0                              
  remote-port    0                              
  connection                                    
    established  1970-01-01T00:00:00Z           
    register     no                             
    tunnel       no

To show the local and remote port, and connection information, run the nv show system grpc-tunnel server SERVER1 status command:

cumulus@switch:~$ nv show system grpc-tunnel server SERVER1 status
               operational         
-------------  --------------------
local-port     0                   
remote-port    0                   
connection                         
  established  1970-01-01T00:00:00Z
  register     no                  
  tunnel       no

To show only connection information, run the nv show system grpc-tunnel server SERVER1 status connection command:

cumulus@switch:~$ nv show system grpc-tunnel server SERVER1 status connection 
             operational         
-----------  --------------------
established  1970-01-01T00:00:00Z
register     no                  
tunnel       no

RPC Methods

Cumulus Linux supports the following RPC methods: 

  • Capabilities
  • Subscription types and options:
    • STREAM (sample_interval, updates_only, suppress_redundant, and heartbeat_interval)
    • ON_CHANGE (updates_only and heartbeat_interval)
  • Notification and update types:
    • sync_response
    • update
    • delete

Cumulus Linux does not support GET or SET RPC events.

Encoding Types

Cumulus Linux supports the Protobuf and JSON data formats.

Wildcard Support

Cumulus Linux supports wildcard matching of keys. For example:

qos/interfaces/interface[interface-id=*]/output/queues/queue[name=*]/state/transmit-octets

You can use a combination of wildcard and specific keys; for example, to collect a metric for all queues on a specific interface:

/qos/interfaces/interface[interface-id=<name>]/output/queues/queue[*]/state/transmit-octets.

Regex for specific keys (such as “interface-id=swp*”) is not supported.

Metrics

Cumulus Linux supports the following metrics.

An asterisk (*) in the Description column of the tables below indicates that metric is new for Cumulus Linux 5.15.

NameDescription
/acl/interfaces/interface[name]/state/id* Interface ACL state.
/acl/interfaces/interface[name]/ingress-acl-sets/ingress-acl-set[set-name][acl-type]/state/set-name* Interface ingress ACL set name.
/acl/interfaces/interface[name]/ingress-acl-sets/ingress-acl-set[set-name][acl-type]/state/type* Interface ingress ACL type.
/acl/interfaces/interface[name]/ingress-acl-sets/ingress-acl-set[set-name][acl-type]/acl-entries/acl-entry[sequence-id='<entry-id>']/state/sequence-id* Interface ingress ACL sequence.
/acl/interfaces/interface[name]/ingress-acl-sets/ingress-acl-set[set-name][acl-type]/acl-entries/acl-entry[sequence-id]/state/matched-packets* Interface ingress ACL sequence matched packets.
/acl/interfaces/interface[name]/ingress-acl-sets/ingress-acl-set[set-name][acl-type]/acl-entries/acl-entry[sequence-id]/state/matched-octets* Interface ingress ACL matched bytes.
/acl/interfaces/interface[name]/egress-acl-sets/egress-acl-set[set-name][acl-type]/state/set-name* Interface egress ACL set name.
/acl/interfaces/interface[name]/egress-acl-sets/egress-acl-set[set-name][acl-type]/state/type* Interface egress ACL type.
/acl/interfaces/interface[name]/egress-acl-sets/egress-acl-set[set-name][acl-type]/acl-entries/acl-entry[sequence-id='<entry-id>']/state/sequence-id* Interface egress ACL sequence.
/acl/interfaces/interface[name]/egress-acl-sets/egress-acl-set[set-name][acl-type]/acl-entries/acl-entry[sequence-id]/state/matched-packets* Interface egress ACL matched packets.
/acl/interfaces/interface[name]/egress-acl-sets/egress-acl-set[set-name][acl-type]/acl-entries/acl-entry[sequence-id]/state/matched-octets* Interface egress ACL matched bytes.
/acl/acl-sets/acl-set[name][acl-type]/state/name* ACL name.
/acl/acl-sets/acl-set[name][acl-type]/state/type* ACL type.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/state/sequence-id* ACL sequence.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/l2/state/source-mac* ACL sequence L2 source MAC address.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/l2/state/source-mac-mask* ACL sequence L2 source MAC mask.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/l2/state/destination-mac* ACL sequence L2 destination MAC address.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/l2/state/destination-mac-mask* ACL sequence L2 destination MAC mask.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/l2/state/ethertype* ACL sequence L2 ethertype.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv4/state/source-address* ACL sequence IPv4 source address.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv4/state/destination-address* ACL sequence IPv4 destination address.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv4/state/dscp* ACL sequence IPv4 DSCP.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv4/state/protocol* ACL sequence IPv4 protocol.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv4/state/hop-limit* ACL sequence IPv4 hop limit.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv4/icmpv4/state/type* ACL sequence ICMPv4 type.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv6/state/source-address* ACL sequence IPv6 source address.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv6/state/destination-address* ACL sequence IPv6 destination address.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv6/state/dscp* ACL sequence IPv6 DSCP.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv6/state/protocol* ACL sequence IPv6 protocol.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv6/state/hop-limit* ACL sequence IPv6 hop limit.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/ipv6/icmpv6/state/type* ACL sequence ICMPv6 type.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/action/state/forwarding-action* ACL sequence forwarding action.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/action/state/log-action* ACL sequence log action.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/transport/state/source-port* ACL sequence L4 source port.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/transport/state/destination-port* ACL sequence L4 destination port.
/acl/acl-sets/acl-set[name][acl-type]/acl-entries/acl-entry[sequence-id]/transport/state/explicit-tcp-flags* ACL sequence L4 TCP flags.
NameDescription
/system/adaptive-routing/state/counters/congestion-changesThe number of adaptive routing change events that triggered due to congestion or link down.
NameDescription
/interfaces/interface[name]/phy/ber/state/ber-time-since-last-clearTime since last clear of BER stats (phy layer stats).
/interfaces/interface[name]/phy/fec/state/corrected-bitsNumber of phy corrected bits of an interface by FEC engine.
/interfaces/interface[name]/phy/ber/state/effective-berPhy effective BER of an interface.
/interfaces/interface[name]/phy/state/effective-errorsNumber of phy effective errors of an interface.
/interfaces/interface[name]/phy/fec/state/fec-time-since-last-clearTime after last clear of FEC stats (phy layer).
/interfaces/interface[name]/phy/channels/channel[id]/fec/state/fc-fec-corrected-blocksNumber FC FEC corrected blocks for a given lane of an interface.
/interfaces/interface[name]/phy/channels/channel[id]/fec/state/fc-fec-uncorrected-blocksNumber of RS FEC uncorrectable blocks of an interface.
/interfaces/interface[name]/phy/channels/channel[id]/ber/state/raw-berNumber of phy bit error rates for a given lane of an interface.
/interfaces/interface[name]/phy//channels/channel[id]/state/raw-errorsNumber of phy error bits identified for a given lane of an interface.
/interfaces/interface[name]/phy/channels/channel[id]/fec/state/rs-fec-corrected-symbolsNumber of RS FEC corrected symbols for a given lane of an interface.
/interfaces/interface[name]/phy/state/received-bitsNumber of phy total bits received for an interface.
/interfaces/interface[name]/phy/fec/state/rs-fec-no-error-blocksNumber of RS FEC no errors blocks of an interface.
/interfaces/interface[name]/phy/fec/state/rs-fec-single-error-blocksNumber of RS FEC uncorrectable blocks of an interface.
/interfaces/interface[name]/phy/fec/state/rs-fec-uncorrectable-blocksNumber of FC FEC uncorrectable blocks for a given lane of an interface.
/interfaces/interface[name]/phy/ber/state/symbol-berPhy symbol BER for an interface.
/interfaces/interface[name]/phy/state/symbol-errorsNumber of phy symbol errors for an interface.
/interfaces/interface[name]/phy/histograms/state/rs-num-corr-err[upper-boundary]/count* Number of bit errors corrected that are less than or equal to upper boundary.
/interfaces/interface[name]/phy/histograms/state/rs-num-corr-err[upper-boundary]/upper-boundary* Upper boundary of the bin.
/interfaces/interface[name]/ethernet/state/counters/in-crc-errorsTotal number of frames received with a length (excluding framing bits, but including FCS octets) of between 64 and 1518 octets, inclusive, but had either a bad Frame Check Sequence (FCS) with an integral number of octets (FCS Error) or a bad FCS with a non-integral number of octets (Alignment Error).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-1024-1518-octetsTotal number of packets (including bad packets) received between 1024 and 1518 octets in length inclusive (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-128-255-octetsTotal number of packets (including bad packets) received between 128 and 255 octets in length inclusive (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-256-511-octetsTotal number of packets (including bad packets) received between 256 and 511 octets in length inclusive (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-512-1023-octetsTotal number of packets (including bad packets) received between 512 and 1023 octets in length inclusive (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-64-octetsTotal number of packets (including bad packets) received that are 64 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-65-127-octetsTotal number of packets (including bad packets) received between 65 and 127 octets in length inclusive (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-fcs-errorsTotal number of frames received on an interface that are an integral number of octets in length but do not pass the FCS check. This count does not include frames received with frame-too-long or frame-too-short error.
/interfaces/interface[name]/ethernet/state/counters/in-jabber-framesNumber of Jabber frames received on the interface.
/interfaces/interface[name]/ethernet/state/counters/in-mac-pause-framesInbound MAC pause frames on an interface.
/interfaces/interface[name]/ethernet/state/counters/in-oversize-framesTotal number of packets received longer than 1518 octets (excluding framing bits, but including FCS octets).
/interfaces/interface[name]/ethernet/state/hw-mac-addressSystem defined default MAC address for the interface.
/interfaces/interface[name]/ethernet/state/mac-address​MAC address for the interface.
/interfaces/interface[name]/ethernet/state/negotiated-duplex-modeWhen auto-negotiate is set to TRUE, and the interface has completed auto-negotiation with the remote peer, this value shows the negotiated duplex mode.
/interfaces/interface[name]/ethernet/state/auto-negotiateIndicates if the interface is configured for auto-negotiation.
/interfaces/interface[name]/ethernet/state/negotiated-port-speedIf auto-negotiation is enabled, this is the negotiated port speed. If auto-negotiation is disabled, you do not see this metric.
/interfaces/interface[name]/ethernet/state/counters/out-mac-pause-frames* Total number of MAC control frames transmitted with an opcode indicating the pause operation.
/interfaces/interface[name]/ethernet/state/counters/in-maxsize-exceeded* Total number of frames received that exceed the maximum permitted frame size.
/interfaces/interface[name]/ethernet/state/counters/in-symbol-error* Total number of received error frames due to a symbol error.
/interfaces/interface[name]/ethernet/state/counters/in-fragment-frames* Total number of packets received that were less than 64 octets in length (excluding framing bits but including FCS octets) and had either a bad FCS with an integral number of octets (FCS error) or a bad FCS with a non-integral number of octets (alignment error).
/interfaces/interface[name]/ethernet/state/counters/in-undersize-frames* Total number of packets received that were less than 64 octets long (excluding framing bits, but including FCS octets) and were otherwise well formed.
/interfaces/interface[name]/state/counters/carrier-down-transitions* Total number of carrier down events on the interface.
/interfaces/interface[name]/state/counters/carrier-up-transitions* Total number of carrier up events on the interface.
/interfaces/interface[name]/state/counters/out-hoq-drops* Number of packets dropped at egress due to Head-of-Queue Timeout.
/interfaces/interface[name]/state/counters/out-hoq-stall-drops* Number of packets dropped at egress due to Head-of-Queue Timeout.
/interfaces/interface[name]/state/counters/out-sll-drops* Number of packets dropped at egress due to exceeding switch lifetime limit.
/interfaces/interface[name]/state/counters/out-acl-drops* Number of packets dropped at egress due to ACL policy.
/interfaces/interface[name]/ethernet/state/counters/out-stp-filter-drops* Number of packets dropped at egress due to STP filter.
/interfaces/interface[name]/ethernet/state/counters/out-vlan-membership-drops* Number of packets dropped at egress due to VLAN membership filter.
/interfaces/interface[name]/ethernet/state/counters/in-vlan-tag-allowance-drops* Number of packets dropped at ingress due to VLAN tag allowance filter.
/interfaces/interface[name]/ethernet/state/counters/in-link-down-drops* Number of packets dropped at ingress due to egress link down.
/interfaces/interface[name]/ethernet/state/counters/in-vlan-membership-drops* Number of packets dropped at ingress due to VLAN membership filter.
/interfaces/interface[name]/ethernet/state/counters/in-loopback-drops* Number of packets dropped at ingress due to loopback filter.
/interfaces/interface[name]/state/counters/in-unknown-protos* Number of MAC control frames received with an unsupported opcode.
/interfaces/interface[name]/ethernet/state/counters/pkt-drop-events-probe-resource-lack* Total number packets dropped by the probe due to lack of resources.
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-1519-2047-octets* Total number of packets (including bad packets) received that were between 1519 and 2047 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-2048-4095-octets* Total number of packets (including bad packets) received that were between 2048 and 4095 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-4096-8191-octets* Total number of packets (including bad packets) received that were between 4096 and 8191 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/in-distribution/in-frames-8192-9216-octets* Total number of packets (including bad packets) received that were between 8192 and 10239 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/no-buffer-multicast-dropped-pkts* The number of multicast packets dropped due to lack of egress buffer resources. Valid only for Spectrum switches.
/interfaces/interface[name]/state/counters/in-buffer-almost-full* Number of times that the port Rx buffer passed a buffer utilization threshold.
/interfaces/interface[name]/state/counters/in-buffer-full* Number of times that the port Rx buffer reached 100% utilization.
/interfaces/interface[name]/state/counters/in-ebp-pkts* The number of received EBP packets.
/interfaces/interface[name]/state/counters/out-ebp-pkts* The number of transmitted EBP packets.
/interfaces/interface[name]/state/counters/pkts-payload-internal-checksum-errors* Number of packet payload internal checksum errors.
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-1024-1518-octets* Total number of packets (including bad packets) transmitted that were between 1024 and 1518 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-128-255-octets* Total number of packets (including bad packets) transmitted that were between 128 and 255 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-1519-2047-octets* Total number of packets (including bad packets) transmitted that were between 1519 and 2047 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-2048-4095-octets* Total number of packets (including bad packets) transmitted that were between 2048 and 4095 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-256-511-octets* Total number of packets (including bad packets) transmitted that were between 256 and 511 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-4096-8191-octets* Total number of packets (including bad packets) transmitted that were between 4096 and 8191 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-512-1023-octets* Total number of packets (including bad packets) transmitted that were between 512 and 1023 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-64-octets* Total number of packets (including bad packets) transmitted that were 64 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-65-127-octets* Total number of packets (including bad packets) transmitted that were between 65 and 127 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/ethernet/state/counters/out-distribution/out-frames-8192-9216-octets* Total number of packets (including bad packets) transmitted that were between 8192 and 10239 octets in length (excluding framing bits but including FCS octets).
/interfaces/interface[name]/state/counters/ecn-marked-pkts* Count of packets marked as ECN or potentially marked as ECN
/interfaces/interface[name]/state/counters/ece-marked-pkts* Count of packets marked as ECE or potentially marked as ECE.
/interfaces/interface[name]/state/counters/tx-wait* Count of wire-speed, one-byte time intervals during which the port had data ready to transmit but did not send any data.
/interfaces/interface[name]/ethernet/state/port-speedIf auto-negotiation is enabled, the port speed is the highest advertised speed. If auto-negotiation is disabled, the port speed is the operational speed value.
/interfaces/interface[name]/rates/state/in-bits-rateThe calculated received rate of the interface, measured in bits per second.
/interfaces/interface[name]/rates/state/in-pkts-rateThe calculated received rate of the interface, measured in packets per second.
/interfaces/interface[name]/rates/state/out-bits-rateThe calculated transmitted rate of the interface, measured in bits per second.
/interfaces/interface[name]/rates/state/out-pkts-rateThe calculated transmitted rate of the interface, measured in packets per second.
/interfaces/interface[name]/state/admin-statusAdmin state of an interface.
/interfaces/interface[name]/state/counters/carrier-transitionsNumber of times since system boot that ifOperStatus changed.
/interfaces/interface[name]/state/counters/in-acl-dropsNumber of packets dropped at ingress due to ACL Policy.
/interfaces/interface[name]/state/counters/in-broadcast-pktsTotal number of broadcast packets received on an interface.
/interfaces/interface[name]/state/counters/in-discardsNumber of inbound packets discarded even though no errors are detected to prevent them from being deliverable to a higher-layer protocol.
/interfaces/interface[name]/state/counters/in-errorsFor packet-oriented interfaces, the number of inbound packets that contained errors preventing them from being deliverable to a higher-layer protocol.
/interfaces/interface[name]/state/counters/in-multicast-pktsTotal number of multicast packets received on an interface.
/interfaces/interface[name]/state/counters/in-octetsTotal number of octets received on an interface, including framing characters.
/interfaces/interface[name]/state/counters/in-pktsNumber of packets discarded from the egress queue of an interface.
/interfaces/interface[name]/state/counters/in-unicast-pktsThe number of packets, delivered by this sub-layer to a higher (sub-)layer, that were not addressed to a multicast or broadcast address at this sub-layer.
/interfaces/interface[name]/state/counters/out-broadcast-pktsTotal number of broadcast packets transmitted out of an interface.
/interfaces/interface[name]/state/counters/out-discardsNumber of outbound packets discarded even though no errors are detected to prevent them from being transmitted.
/interfaces/interface[name]/state/counters/out-errorsFor packet-oriented interfaces, the number of outbound packets not transmitted because of errors. For character-oriented or fixed-length interfaces, the number of outbound transmission units not transmitted because of errors.
/interfaces/interface[name]/state/counters/out-multicast-pktsTotal number of packets that higher-level protocols requested be transmitted, and which were addressed to a multicast address at this sub-layer, including those that were discarded or not sent. For a MAC layer protocol, this includes both Group and Functional addresses.
/interfaces/interface[name]/state/counters/out-octetsTotal number of octets transmitted out of an interface, including framing characters.
/interfaces/interface[name]/state/counters/out-pktsTotal number of packets transmitted out of the interface, including all unicast, multicast, broadcast, and bad packets.
/interfaces/interface[name]/state/counters/out-unicast-pktsTotal number of unicast packets transmitted out of an interface.
/interfaces/interface[name]/state/ifindexA unique value, greater than zero, for each interface.
/interfaces/interface[name]/state/last-changeThe last time the state of the interface changed.
/interfaces/interface[name]/state/mtuSize of the largest packet that can be sent or received on the interface, specified in octets. For interfaces used for transmitting network datagrams, this is the size of the largest network datagram that the interface can send.
/interfaces/interface[name]/state/name​The name of the interface.
/interfaces/interface[name]/state/oper-statusCurrent operational state of an interface.
/interfaces/interface[name]/state/protodown​Indicates if the interface is administratively held down by a protocol or system process rather than by user action.
/interfaces/interface[name]/state/type​The type of the interface.
Name
Description
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/capabilities/capability[name]/state/enabledIf the corresponding system capability is enabled on the neighbor.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/ageLLDP neighbor age after discovery.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/chassis-idChassis component of the endpoint identifier associated with the transmitting LLDP agent.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/chassis-id-typeFormat and source of the chassis identifier string.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/management-addresses[address]/typeEnumerated value for the network address type identified in this TLV.
/lldp/interfaces/interface/neighbors/neighbor/state/port-descriptionBinary string containing the actual port identifier for the port from which this LLDP PDU was transmitted.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/port-descriptionPort component of the endpoint identifier associated with the transmitting LLDP agent.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/port-idThe Port ID is a mandatory TLV which identifies the port component of the endpoint identifier associated with the transmitting LLDP agent. If the specified port is an IEEE 802.3 Repeater port, then this TLV is optional.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/port-id-typeFormat and source of the remote port ID string.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/system-descriptionDescription of the network entity associated with the transmitting LLDP agent.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/system-nameAdministratively assigned name of the system associated with the transmitting LLDP agent.
/lldp/interfaces/interface[name]/neighbors/neighbor[id]/state/ttlIndicates how long information from the neighbor is considered valid.
/lldp/interfaces/interface[name]/state/enabledIf LLDP is enabled on the interface.
/lldp/state/chassis-idThe chassis component of the endpoint identifier associated with the transmitting LLDP agent.
/lldp/state/chassis-id-typeThe format and source of the chassis identifier string.
/lldp/state/system-descriptionDescription of the network entity including the full name and version identification of the system’s hardware type, software operating system, and networking software.
/lldp/state/system-nameAdministratively assigned name for the system.
/lldp/state/enableIf LLDP is enabled.
NameDescription
/qos/packet-trimming/state/counters/trimmed-unicast-pktsThe number of trimmed packets.
/qos/interfaces/interface[interface-id]/packet-trimming/state/counters/trimmed-unicast-pkts* The number packets that were trimmed on the interface.
/qos/interfaces/interface[interface-id]/packet-trimming/state/counters/trimmed-tx-unicast-pkts* The number of packets that were trimmed and sent succesfully on the interface.
/qos/interfaces/interface[interface-id]/packet-trimming/output/queues/queue[name]/state/trimmed-unicast-pkts* The number of packets that were trimmed on the interface queue.
NameDescription
/performance/interfaces/interface[name=<interface>]/ measurements/measurement[traffic-class=<tc>][protocol=<proto>]/state/timestamp* The timestamp when the latency measurement was recorded.
/performance/interfaces/interface[name=<interface>]/ measurements/measurement[traffic-class=<tc>][protocol=<proto>]/state/error-code* The measurement error code. [0 indicates success, non-zero values indicate an error code]
/performance/interfaces/interface[name=<interface>]/ measurements/measurement[traffic-class=<tc>][protocol=<proto>]/state/latency/rtt* The measured latency in microseconds for the specified traffic class and protocol.
/performance/interfaces/interface[name=<interface>]/ measurements/measurement[traffic-class=<tc>][protocol=<proto>]/state/error-type* The type of error encountered, if any, during the latency measurement.
/performance/interfaces/interface[name=<interface>]/ measurements/measurement[traffic-class=<tc>][protocol=<proto>]/state/error-message* Details about any error encountered.
NameDescription
/components/component[name]/state/serial-no* Serial number of the component, keyed by component name.
/components/component[name]/state/part-no* Part number of the component, keyed by component name.
/components/component[name]/storage/state/counters/rotation-rate-rpm* Disk rotation rate in RPMs (supported only on SATA disks).
/components/component[name]/storage/state/counters/write-cache* Indicates whether the disk has a write cache (supported only on SATA disks).
/components/component[name]/storage/state/counters/write-cache-enabled* Indicates whether the disk write cache is enabled. (supported only on SATA disks)
/components/component[name]/storage/state/counters/discard-seconds* Number of seconds spent by all discards.
/components/component[name]/storage/state/counters/discard-sectors* Number of sectors discarded successfully.
/components/component[name]/storage/state/counters/discard-completed* Number of discards completed successfully.
/components/component[name]/storage/state/counters/discard-merged* Number of discards merged.
/components/component[name]/storage/state/counters/flush-req-secondsNumber of seconds spent by all flush requests.
/components/component[name]/storage/state/counters/flush-req* Number of flush requests completed successfully.
/components/component[name]/storage/state/counters/io-ops-in-progress* Number of I/Os currently in progress.
/components/component[name]/storage/state/counters/io-seconds* Total seconds spent doing I/Os.
/components/component[name]/storage/state/counters/io-weighted-seconds* The weighted # of seconds spent doing I/Os.
/components/component[name]/storage/state/counters/read-bytes* Number of bytes read successfully.
/components/component[name]/storage/state/counters/read-seconds* Number of seconds spent by all reads.
/components/component[name]/storage/state/counters/read-ops* Number of reads completed successfully.
/components/component[name]/storage/state/counters/read-merged* Number of reads merged.
/components/component[name]/storage/state/counters/write-seconds* Number of seconds spent by all writes.
/components/component[name]/storage/state/counters/write-ops* Number of writes completed successfully.
/components/component[name]/storage/state/counters/write-merged* Number of writes merged.
/system/mount-points/mount-point[name]/state/files-total* Filesystem total file nodes.
/components/component[name]/storage/state/counters/write-bytes* Number of bytes written successfully..
/system/mount-points/mount-point[name]/state/files-available* Filesystem total free file nodes.
/system/mount-points/mount-point[name]/state/read-only* Filesystem read-only status.
/system/mount-points/mount-point[name]/state/device-error* Whether an error occurred while getting statistics for the given device.
/components/component[name=<fanid>]/fan/state/direction* Fan direction.
/components/component[name=<fanid>]/fan/state/max-speed* Fan Maximum speed capacity.
/components/component[name=<fanid>]/fan/state/min-speed* Fan Minimum speed capacity.
/components/component[name]/state/software-version* The version of the currently running software.
/components/component[name]/fan/state/speedCurrent (instantaneous) fan speed.
/components/component[name]/power-supply/state/capacityMaximum power capacity of the power supply.
/components/component[name]/power-supply/state/input-currentInput current draw of the power supply.
/components/component[name]/power-supply/state/input-voltageInput voltage to power supply.
/components/component[name]/power-supply/state/output-currentOutput current supplied by the power supply.
/components/component[name]/power-supply/state/output-powerOutput power supplied by the power supply.
/components/component[name]/power-supply/state/output-voltageOutput voltage supplied by the power supply.
/components/component[name]/state/descriptionSystem-supplied description of the component.
/components/component[name]/state/firmware-versionFor hardware components, the version of associated firmware running on the component, if applicable.
/components/component[name]/state/last-reboot-reason​The reason for the component’s last reboot.
/components/component[name]/state/last-reboot-time​The time of the last reboot. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/components/component[name]/state/nameDevice name for the component.
/components/component[name]/state/oper-statusIf applicable, the current operational status of the component.
/components/component[name]/state/temperature/alarm-severitySeverity of the current alarm.
/components/component[name]/state/temperature/alarm-statusA value of true indicates the alarm has been raised or asserted. The value is false when the alarm is cleared.
/components/component[name]/state/temperature/alarm-thresholdThe threshold value crossed for this alarm.
/components/component[name]/state/temperature/avg​Arithmetic mean value of the statistic over the sampling period.
/components/component[name]/state/temperature/instantInstantaneous value of the statistic.
/components/component[name]/state/temperature/intervalIf supported by the system, the time interval over which the minimum, maximum, and average statistics are computed by the system.
/components/component[name]/state/temperature/max​The maximum value of the statistic over the sampling period.
/components/component[name]/state/temperature/max​-timeAbsolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/components/component[name]/state/temperature/min​Minimum value of the statistic over the sampling period.
/components/component[name]/state/temperature/min-time​Absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/components/component[name]/transceiver/host-lanes/lane[lane-number]/state/tx-cdr-lolTransmitter clock-and-data-recovery loss-of-lock flag.
/components/component[name]/transceiver/host-lanes/lane[lane-number]/state/tx-losTransmitter loss-of-signal flag.
/components/component[name]/transceiver/physical-channels/channel[index]/state/input-power/instantInput optical power of a physical channel in units of 0.01dBm, which may be associated with individual physical channels or an aggregate of multiple physical channels.
/components/component[name]/transceiver/physical-channels/channel[index]/state/laser-bias-current/instantCurrent applied by the system to the transmit laser to achieve the output power. The current is expressed in mA with up to two decimal precision.
/components/component[name]/transceiver/physical-channels/channel[index]/state/output-power/instantOutput optical power of a physical channel in units of 0.01dBm, which might be associated with individual physical channels or an aggregate of multiple physical channels.
/components/component[name]/transceiver/physical-channels/channel[index]/state/rx-cdr-lolReceiver clock-and-data-recovery loss-of-lock flag.
/components/component[name]/transceiver/physical-channels/channel[index]/state/rx-losReceiver loss-of-signal flag.
/components/component[name]/transceiver/state/date-code​Representation of the transceiver date code, typically stored as YYMMDD. The time portion of the value is undefined and not intended to be read.
/components/component[name]/transceiver/state/enabled​Turns power on or off to the transceiver. Provides a means to power on or off the transceiver (in the case of SFP, SFP+, QSFP) or enable high-power mode (in the case of CFP, CFP2, CFP4). This is optionally supported (device can choose to always enable). True = power on - high power. False = powered off.
/components/component[name]/transceiver/state/ethernet-pmdEthernet PMD (physical medium dependent sublayer) that the transceiver supports.
/components/component[name]/transceiver/state/form-factor​Type of optical transceiver used on this port. If the client port is built into the device and not pluggable, non-pluggable is the corresponding state. If a device port supports multiple form factors, the value of the transceiver installed is reported. If no transceiver is present, the value of the highest rate form factor is reported.
/components/component[name]/transceiver/state/present​Indicates if a transceiver is present in the specified client port.
/components/component[name]/transceiver/state/serial-number​Transceiver serial number. 16-octet field that contains ASCII characters, left-aligned and padded on the right with ASCII spaces (20h). If part serial number is undefined, all 16 octets = 0h.
/components/component[name]/transceiver/state/supply-voltage/instantInput voltage as measured by the transceiver.
/components/component[name]/transceiver/state/vendor​Full name of transceiver vendor.
/components/component[name]/transceiver/state/vendor-part​Transceiver vendor part number.
/components/component[name]/transceiver/state/vendor-rev​Transceiver vendor revision number.
NameDescription
/qos/interfaces/interface[interface-id]/output/queues/queue[name]/state/ecn-marked-pktsNumber of ECN marked packets from this egress queue. If the ECN counter is not enabled, the counter value is 0.
/qos/interfaces/interface[interface-id]/output/queues/queue[name]/state/no-buffer-uc-dropped-pktsNumber of packets discarded from this egress queue when there is no buffer left in the interface.
/qos/interfaces/interface[interface-id]/output/queues/queue[name]/state/time-since-last-clearTime since last clear of watermarks in a queue.
/qos/interfaces/interface[interface-id]/output/queues/queue[name]/state/transmit-octetsNumber of transmitted bytes in the egress queue of an interface.
/qos/interfaces/interface[interface-id]/output/queues/queue[name]/state/transmit-pktsNumber of transmitted packets in the egress queue of an interface.
/qos/interfaces/interface[interface-id]/output/queues/queue[name]/state/max-queue-len-cellsMaximum queue length cells for a queue since last time watermarks were reset.
/qos/interfaces/interface[name]/output/queues/queue[name]/state/max-queue-lenMaximum queue length for a queue since last time watermarks were reset.
/qos/interfaces/interface[interface-id]/output/queues/queue[name]/state/wred-dropped-pktsNumber of packets discarded from this egress queue of an interface.
/qos/interfaces/interface[interface-id]/priority-group[priority_group]/state/counters/time-since-last-clearTime since last clear of watermarks in a priority group.
/qos/interfaces/interface[interface-id]/switch-priority[priority]/state/counters/in-pause-pktsNumber of pause packets for the priority class in the ingress queue.
/qos/interfaces/interface[interface-id]/switch-priority[priority]/state/counters/out-pause-pktsNumber of pause packets for the priority class in the egress queue.
/qos/interfaces/interface[interface-id]/priority-group[priority_group]/state/counters/in-pkts* Number of received input packets for a priority group.
/qos/interfaces/interface[interface-id]/state/priority-group[priority_group]/state/counters/in-octets* Number of octets of input data received for a given priority group.
/qos/interfaces/interface[interface-id]/switch-priority[priority]/state/counters/in-discards* Number of discarded inbound packets.
/qos/interfaces/interface[interface-id]/switch-priority[priority]/state/in-pause-duration* Total time in microseconds packet transmission on the port has been paused.
/qos/interfaces/interface[interface-id]/switch-priority[priority]/state/out-pause-duration* Total time in microseconds that the far-end port has been requested to pause.
/qos/interfaces/interface[interface-id]/output/queues/queue[name]/state/instant-queue-len* Transmit queue depth in bytes on traffic class selected by traffic_class of the port selected by local_port.
/qos/interfaces/interface[interface-id]/output/queues/queue/[name]state/transmit-uc-pkts* Number of unicast packets transmitted by this queue.
NameDescription
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgpTop-level configuration and state for the BGP router.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/afi-safis/afi-safi[afi-safi-name]/state/prefixes/installedThe number of prefixes received from the neighbor that are installed in the network instance RIB and actively used for forwarding.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/afi-safis/afi-safi[afi-safi-name]/state/prefixes/receivedThe number of prefixes that are received from the neighbor after applying any policies. This count is the number of prefixes present in the post-policy Adj-RIB-In for the neighbor.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/afi-safis/afi-safi[afi-safi-name]/state/prefixes/sentThe number of prefixes that are advertised to the neighbor after applying any policies. This count is the number of prefixes present in the post-policy Adj-RIB-Out for the neighbor.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/stateBGP neighbor state.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/descriptionBGP neighbor state description.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/established-transitionsNumber of transitions to the Established state for the neighbor session.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/last-establishedThe time that the BGP session last transitioned in or out of the Established state. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/local-asThe local autonomous system number used when establishing sessions with the remote peer or peer group, if this differs from the global BGP router autonomous system number.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/messagesCounters for BGP messages sent and received from the neighbor.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/messages/receivedCounters for BGP messages received from the neighbor.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/messages/received/last-notification-error-codeThe last BGP error sent or received on the peering session.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/messages/received/UPDATENumber of BGP UPDATE messages announcing, withdrawing, or modifying paths exchanged.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/messages/sentCounters relating to BGP messages sent to the neighbor.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/messages/sent/last-notification-error-codeThe last BGP error sent or received on the peering session.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/messages/sent/UPDATENumber of BGP UPDATE messages announcing, withdrawing or modifying paths exchanged.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/neighbor-addressAddress of the BGP peer, either in IPv4 or IPv6.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/peer-asAS number of the peer.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/peer-groupThe peer-group with which this neighbor is associated
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/peer-typeExplicitly designate the peer or peer group as internal (iBGP) or external (eBGP).
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/queues/inputThe number of messages received from the peer currently queued.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/queues/outputThe number of messages queued to be sent to the peer.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/session-stateOperational state of the BGP peer.
/network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor/stateOperational state data for interface hold-time.
network-instances/network-instance[name]/protocols/protocol[identifier][name]/bgp/neighbors/neighbor[neighbor-address]/state/graceful-shutdown* BGP graceful shutdown state.
/tables/table[address-family=IPV4][protocol=BGP]/state/route-count* IPv4 BGP route count in RIB.
/tables/table[address-family=IPV6][protocol=BGP]/state/route-count* IPv6 BGP route count in RIB.
/tables/table[address-family=IPV4][protocol=DIRECTLY_CONNECTED]/state/route-count* IPv4 connected route count.
/tables/table[address-family=IPV6][protocol=DIRECTLY_CONNECTED]/state/route-count* IPv6 connected route count.
/tables/table[address-family=IPV4][protocol=STATIC]/state/route-count* IPv4 static route count.
/tables/table[address-family=IPV6][protocol=STATIC]/state/route-count* IPv6 static route count.
/tables/table[address-family=IPV4][protocol=OSPF]/state/route-count* IPv4 OSPF route count in RIB.
/tables/table[address-family=IPV6][protocol=OSPF]/state/route-count* IPv6 OSPF route count in RIB.
/tables/table[address-family=IPV4][protocol=KERNEL]/state/route-count* IPv4 kernel route count.
/tables/table[address-family=IPV6][protocol=KERNEL]/state/route-count* IPv6 kernel route count.
/tables/table[address-family=IPV4][protocol=POLICY_BASED_ROUTING]/state/route-count* IPv4 PBR route count.
/tables/table[address-family=IPV6][protocol=POLICY_BASED_ROUTING]/state/route-count* IPv6 PBR route count.
/tables/table[address-family=IPV4][protocol=TABLE_CONNECTION]/state/route-count* IPv4 table connection route count.
/tables/table[address-family=IPV6][protocol=TABLE_CONNECTION]/state/route-count* IPv6 table connection route count.
/network-instances/network-instance/tables/state/ipv4-route-count* Total IPv4 route count.
/network-instances/network-instance/tables/state/ipv6-route-count* Total IPv6 route count.
/network-instances/network-instance/tables/state/rib-nexthop-group-count* Nexthop group count.
NameDescription
/network-instances/network-instance[name]/srv6/global/state/counters/no-sid-dropsThe number of packets dropped due to no matching SRv6 SID.
/network-instances/network-instance[name]/srv6/sids/sid[id]/idThe SRv6 SID (segment identifier).
/network-instances/network-instance[name]/srv6/sids/sid[id]/state/counters/in-pktsThe number of packets received for this SRv6 SID.
NameDescription
/system/state/up-timeContinuous operational time of the system since last reboot.
/system/state/hostnameSystem hostname.
/system/state/software-versionSystem software version.
/system/state/boot-timeSystem boot time.
/system/state/current-datetimeCurrent system date and time.
/system/control-plane-traffic/ingress/ipv4/counters/
/system/control-plane-traffic/ingress/ipv6/counters/
Number of input IP datagrams discarded in software including those received in error.
/system/cpus/cpu[index]/state/hardware-interrupt/avgThe arithmetic mean value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/hardware-interrupt/instantThe instantaneous percentage value.
/system/cpus/cpu[index]/state/hardware-interrupt/intervalIf supported by the system, the time interval over which the minimum, maximum, and average statistics are computed by the system.
/system/cpus/cpu[index]/state/hardware-interrupt/maxThe maximum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/hardware-interrupt/max-timeThe absolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/hardware-interrupt/minThe minimum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/hardware-interrupt/min-timeThe absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/hardware-interrupt/secondsThe total number of seconds spent servicing hardware interrupts.
/system/cpus/cpu[index]/state/idle/avgThe arithmetic mean value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/idle/instantThe instantaneous percentage value.
/system/cpus/cpu[index]/state/idle/intervalIf supported by the system, the time interval over which the minimum, maximum, and average statistics are computed by the system.
/system/cpus/cpu[index]/state/idle/maxThe maximum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/idle/max-timeThe absolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/idle/minThe minimum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/idle/min-timeThe absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/idle/secondsThe total number of seconds spent idle.
/system/cpus/cpu[index]/state/kernel/avgThe arithmetic mean value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/kernel/instantThe instantaneous percentage value.
/system/cpus/cpu[index]/state/kernel/intervalIf supported by the system, the time interval over which the minimum, maximum, and average statistics are computed by the system.
/system/cpus/cpu[index]/state/kernel/maxThe maximum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/kernel/max-timeThe absolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/kernel/minThe minimum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/kernel/min-timeThe absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/kernel/secondsThe total number of seconds spent running in kernel space.
/system/cpus/cpu[index]/state/nice/avgThe arithmetic mean value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/nice/instantThe instantaneous percentage value.
/system/cpus/cpu[index]/state/nice/intervalIf supported by the system, the time interval over which the minimum, maximum, and average statistics are computed by the system.
/system/cpus/cpu[index]/state/nice/maxThe maximum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/nice/max-timeThe absolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/nice/minThe minimum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/nice/min-timeThe absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/nice/secondsThe total number of seconds spent running low-priority (niced) user processes.
/system/cpus/cpu[index]/state/software-interrupt/avgThe arithmetic mean value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/software-interrupt/instantThe instantaneous percentage value.
/system/cpus/cpu[index]/state/software-interrupt/intervalIf supported by the system, the time interval over which the minimum, maximum, and average statistics are computed by the system.
/system/cpus/cpu[index]/state/software-interrupt/maxThe maximum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/software-interrupt/max-timeThe absolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/software-interrupt/minThe minimum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/software-interrupt/min-timeThe absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/software-interrupt/secondsThe total number of seconds spent servicing software interrupts.
/system/cpus/cpu[index]/state/total/avgThe arithmetic mean value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/total/instantThe instantaneous percentage value.
/system/cpus/cpu[index]/state/total/intervalIf supported by the system, the time interval over which the minimum, maximum, and average statistics are computed by the system.
/system/cpus/cpu[index]/state/total/maxThe maximum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/total/max-timeThe absolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/total/minThe minimum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/total/min-timeThe absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/user/avgThe arithmetic mean value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/user/instantThe instantaneous percentage value.
/system/cpus/cpu[index]/state/user/intervalIf supported by the system, the time interval over which the minimum, maximum, and average statistics are computed by the system.
/system/cpus/cpu[index]/state/user/maxThe maximum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/user/max-timeThe absolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/user/minThe minimum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/user/min-timeThe absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/user/secondsThe total number of seconds spent running in user space.
/system/cpus/cpu[index]/state/wait/avgThe arithmetic mean value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/wait/instantThe instantaneous percentage value.
/system/cpus/cpu[index]/state/wait/intervalIf supported by the system, this reports the time interval over which the minimum, maximum, and average statistics are computed by the system.
/system/cpus/cpu[index]/state/wait/maxThe maximum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/wait/max-timeThe absolute time at which the maximum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/wait/minThe minimum value of the percentage measure of the statistic over the time interval.
/system/cpus/cpu[index]/state/wait/min-timeThe absolute time at which the minimum value occurred. The value is the timestamp in nanoseconds relative to the Unix Epoch (Jan 1, 1970 00:00:00 UTC).
/system/cpus/cpu[index]/state/wait/secondsThe total number of seconds spent waiting I/O.
/system/memory/state/freeMemory that is not used and is available for allocation.
/system/memory/state/physicalThe total physical memory available on the system.
/system/memory/state/reservedMemory reserved for system use.
/system/memory/state/used​Memory that has been used and not available for allocation.
/system/mount-points/mount-point[name]/state/utilizedThe amount of space currently in use on the filesystem.
/system/mount-points/mount-point[name]/state/nameMount point name.
/system/mount-points/mount-point[name]/state/storage-componentA reference to the hosting component within the hierarchy.
/system/mount-points/mount-point[name]/state/sizeTotal size of the initialized filesystem.
/system/mount-points/mount-point[name]/state/availableThe amount of unused space on the filesystem.
/system/mount-points/mount-point[name]/state/typeFilesystem type used for storage such flash, hard disk, tmpfsor or ramdisk, or remote or network based storage.
/system/processes/process[pid]/state/cpu-usage-userCPU time consumed by this process in user mode in nanoseconds.
/system/processes/process[pid]/state/cpu-usage-systemCPU time consumed by this process in kernel mode in nanoseconds.
/system/processes/process[pid]/state/start-timeStart time of the process in seconds since epoch.
/system/processes/process[pid]/state/nameProcess name.
/system/processes/process[pid]/state/pidProcess PID
/system/processes/process[pid]/state/memory-usageBytes allocated and still in use by the process.
/system/processes/process[pid]/state/memory-utilizationPercentage of RAM that the process is using.
/system/processes/process[pid]/state/cpu-utilizationPercentage of CPU that the process is using, relative to total system CPU capacity (all cores combined).

User Credentials and Authentication

User authentication is enabled by default. gNMI subscription requests must include the user authentication credentials with NVUE API access permissions, either in an HTTP basic authentication header according to RFC7617 or a gRPC metadata header.

gNMI Client Requests

You can use your gNMI client on a host to request capabilities and data to which the gNMI agent subscribes.

Dial-in Mode Examples

The following example shows a basic dial-in mode subscribe request in an HTTP basic authentication header:

gnmic subscribe --mode stream -i 10s --tls-cert gnmi_client.crt --tls-key gnmi_client.key -u cumulus -p ******* --auth-scheme Basic -a 192.168.200.3:9339 --prefix "system/cpus/cpu[index=0]" --path "state"
...

The following example shows a dial-in mode subscribe request in a gRPC metadata header with authorization information encoded in base64 format:

gnmic subscribe --metadata authorization="Basic Y3VtdWx1czpOdmlkaWFSMGNrcyE=" --address 192.168.200.3:9339 --tls-cert cert/umf-crt.pem --tls-key cert/umf-key.pem --encoding proto --mode stream --stream-mode sample --sample-interval 1s --prefix "system/cpus/cpu[index=0]" --path "state"
...

The following example shows a dial-in mode subscribe request in a gRPC metadata header with the username and password specified in the request:

gnmic subscribe --mode stream -i 10s --tls-cert cert/umf-crt.pem --tls-key cert/umf-key.pem -u cumulus -p NvidiaR0cks! --skip-verify -a  192.168.200.3:9339  --timeout 30s --prefix "system/cpus/cpu[index=0]" --path "state"

Subscription Response Example

The following example shows a subscription response:

{
  "source": "192.168.200.3:9339",
  "subscription-name": "default-1752848659",
  "timestamp": 1752848657055588821,
  "time": "2025-07-18T14:24:17.055588821Z",
  "prefix": "system/cpus/cpu[index=0]",
  "updates": [
    {
      "Path": "state/kernel/max-time",
      "values": {
        "state/kernel/max-time": 1752848657055588900
      }
    },
    {
      "Path": "state/kernel/max",
      "values": {
        "state/kernel/max": 0.33359713753109865
      }
    },
    {
      "Path": "state/kernel/min",
      "values": {
        "state/kernel/min": 0
      }
    },
    {
      "Path": "state/kernel/avg",
      "values": {
        "state/kernel/avg": 0.33359713753109865
      }
    },
    {
      "Path": "state/kernel/min-time",
      "values": {
        "state/kernel/min-time": 1752848657055588900
      }
    },
    {
      "Path": "state/kernel/seconds",
      "values": {
        "state/kernel/seconds": 595
      }
    },
    {
      "Path": "state/kernel/instant",
      "values": {
        "state/kernel/instant": 0.33359713753109865
      }
    },
    {
      "Path": "state/user/avg",
      "values": {
        "state/user/avg": 0.2680692284537066
      }
    },
...

Capabilities Example

The following example shows a capabilities request and the expected response:

gnmic capabilities --tls-cert gnmic-cert.pem --tls-key gnmic-key.pem -u cumulus -p ****** --auth-scheme Basic --skip-verify -a 10.188.52.108:9339

gNMI version: 0.10.0 
supported models: 
  - openconfig-ospf-types, OpenConfig working group, 0.1.3 
...
  - openconfig-platform-fabric, OpenConfig working group, 0.1.0 
  - openconfig-platform-healthz, OpenConfig working group, 0.1.1 
supported encodings: 
  - JSON 
  - JSON_IETF 
  - PROTO 

gNOI Operational Commands

The gNMI server agent on Cumulus Linux supports gNOI so that you can run operational tasks from a client, such as switch reboot or file transfer. The gNOI server is enabled when you configure gNMI dial-in mode. The gNOI server uses the same listening address, port, TLS configuration, and user credentials as your gNMI server configuration.

Cumulus Linux supports the following OpenConfig gNOI RPCs:

  • System Reboot, supporting warm and cold reboot modes. The reboot gNOI RPC maps to the nv action system reboot mode <mode> command.
  • Software Image Install, supporting copy operations of images to the switch. The install gNOI RPC maps to the nv action fetch system image <image> command.
  • Software Image Activation, supporting optimized image installation and activation. The activate gNOI RPC maps to the nv action install system image files <image>, nv action boot-next system image other, and `nv action system reboot mode commands if a reboot is requested.
  • Software Image Installation
  • File Management, supporting retrieval, viewing, or deleting files. The following file management gNOI RPCs are supported:
    • Get, the equivalent of the nv action upload system file-path [local-path] [remote-url] command.
    • Put, the equivalent of the nv action fetch system file-path [local-path][remote-url] [file-permissions] command.
    • Stat, the equivalent of the nv action list system file-path [local-path] command.
    • Remove, the equivalent of the nv action delete system file-path [local-path] command.

The following gNOI RPCs are not supported:

  • system cancel-reboot
  • system reboot-status
  • system set-package
  • system reboot with --method=FAST (fast reboot mode)
  • file transfer

You can view the number of gNOI RPCs received on the switch with the nv show system gnmi-server status gnoi-rpc command:

cumulus@switch:mgmt:~$ nv show system gnmi-server status gnoi-rpc
gnoi-rpc-name failed-rpc-requests received-rpc-requests
------------- ------------------- ---------------------
File.Get      0                   4
File.Put      0                   1
File.Remove   0                   1
File.Stat     0                   46
OS.Install    0                   1

gNOI Client Requests

You can use your gNOI client to send supported RPCs to a switch for operational commands.

The following example uses the Stat RPC to view the /var/support directory on a switch:

cumulus@host:mgmt:~$ gnoic  --username test1 --password test1 --address 10.1.1.100 --port 9339 --tls-ca /home/cumulus/dut_ca.crt --tls-cert /home/cumulus/gnmic_client.crt --tls-key /home/cumulus/gnmic_client.key file stat --path /var/support/
+--------------------+----------------------------------------------------------+----------------------+------------+------------+---------+
|    Target Name     |                           Path                           |     LastModified     |    Perm    |   Umask    |  Size   |
+--------------------+----------------------------------------------------------+----------------------+------------+------------+---------+
| 10.1.1.100:9339 | /var/support//cl_support_mlx-3700-79_20251031_171813.txz | 2025-10-31T17:18:54Z | -rw-r--r-- | -----w--w- | 9992512 |
|                    | /var/support//core                                       | 2025-10-30T21:49:56Z | drwxr-xr-x | -----w--w- | 4096    |
+--------------------+----------------------------------------------------------+----------------------+------------+------------+---------+
cumulus@host:mgmt:~$

The following example uses the file get RPC to retrieve the /var/support/cl_support_mlx-3700-79_20251031_171813.txz file and copy it to /tmp/ on the local client system.

cumulus@host:mgmt:~$ gnoic  --username test1 --password test1 --address 10.1.1.100 --port 9339 --tls-ca /home/cumulus/dut_ca.crt --tls-cert /home/cumulus/gnmic_client.crt --tls-key /home/cumulus/gnmic_client.key file get --file /var/support/cl_support_mlx-3700-79_20251031_171813.txz --dst /tmp/
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 1048576 bytes
INFO[0001] "10.1.1.100:9339" received 555328 bytes
INFO[0001] "10.1.1.100:9339" file "/var/support/cl_support_mlx-3700-79_20251031_171813.txz" saved
cumulus@host:mgmt:~$

The following example uses the file remove RPC to delete the /var/support/cl_support_mlx-3700-79_20251031_171813.txz file on the switch.

cumulus@host:mgmt:~$ gnoic  --username root --password NvidiaR0ots! --address 10.1.1.100 --port 9339 --tls-ca /home/cumulus/dut_ca.crt --tls-cert /home/cumulus/gnmic_client.crt --tls-key /home/cumulus/gnmic_client.key file remove --path /var/support/cl_support_mlx-3700-79_20251031_171813.txz
INFO[0000] "10.1.1.100:9339" file "/var/support/cl_support_mlx-3700-79_20251031_171813.txz" removed successfully
cumulus@host:mgmt:~$

The following example uses the file put RPC to copy the /tmp/gnmic_ca.crt file on the local client host to the switch at /tmp/gnmic.crt:

cumulus@host:mgmt:~$ gnoic  --username test1 --password test1 --address 10.1.1.100 --port 9339 --tls-ca /home/cumulus/dut_ca.crt --tls-cert /home/cumulus/gnmic_client.crt --tls-key /home/cumulus/gnmic_client.key file put --file /tmp/gnmic_ca.crt --dst /tmp/gnmi.crt
INFO[0000] "10.1.1.100:9339" sending file="/tmp/gnmic_ca.crt" hash
INFO[0000] "10.1.1.100:9339" file "/tmp/gnmic_ca.crt" written successfully
cumulus@host:mgmt:~$

The following example uses the install RPC to copy the /media/node/cumulus-linux-mlx-amd64-5.15.bin.devsigned image file on the local client to the switch with the version 5.15.0:

cumulus@host:mgmt:~$ gnoic  --username test1 --password test1 --address 10.1.1.100 --port 9339 --tls-ca /home/cumulus/dut_ca.crt --tls-cert /home/cumulus/gnmic_client.crt --tls-key /home/cumulus/gnmic_client.key os install --pkg /media/node/cumulus-linux-mlx-amd64-5.15.bin.devsigned --version 5.15.0
INFO[0000] starting install RPC
INFO[0000] target "10.1.1.100:9339": starting Install stream
INFO[0000] target "10.1.1.100:9339": TransferProgress bytes_received:5242880
INFO[0000] target "10.1.1.100:9339": TransferProgress bytes_received:10485760
...
INFO[0011] target "10.1.1.100:9339": TransferProgress bytes_received:980418560
INFO[0011] target "10.1.1.100:9339": TransferProgress bytes_received:985661440
INFO[0011] target "10.1.1.100:9339": sending TransferEnd
INFO[0011] target "10.1.1.100:9339": TransferProgress bytes_received:990904320
INFO[0011] target "10.1.1.100:9339": TransferContent done...
INFO[0011] target "10.1.1.100:9339": TransferProgress bytes_received:994600465
cumulus@host:mgmt:~$

The following example uses the activate RPC to activate the 5.15.0 image as the next boot image without reboot the switch:

cumulus@host:mgmt:~$ gnoic  --username test1 --password test1 --address 10.1.1.100 --port 9339 --tls-ca /home/cumulus/dut_ca.crt --tls-cert /home/cumulus/gnmic_client.crt --tls-key /home/cumulus/gnmic_client.key os activate --version 5.15.0 --no-reboot
INFO[0190] target "10.1.1.100:9339" activate response "activate_ok:{}"
cumulus@host:mgmt:~$

The following example uses the activate RPC to activate the 5.15.0 image as the next boot image and reboots the switch.

cumulus@host:mgmt:~$ gnoic  --username cumulus --password NvidiaR0cks! --address 10.1.1.100 --port 9339 --tls-ca /home/cumulus/dut_ca.crt --tls-cert /home/cumulus/gnmic_client.crt --tls-key /home/cumulus/gnmic_client.key os activate --version 5.15.0 
INFO[0182] target "10.1.1.100:9339" activate response "activate_ok:{}"
cumulus@host:mgmt:~$

The following example uses the system reboot RPC to reboot the switch with warm reboot mode:

cumulus@host:mgmt:~$ gnoic  --username test1 --password test1 --address 10.1.1.100 --port 9339 --tls-ca /home/cumulus/dut_ca.crt --tls-cert /home/cumulus/gnmic_client.crt --tls-key /home/cumulus/gnmic_client.key system reboot --method WARM
INFO[0074] "10.1.1.100:9339" System Reboot Request successful
cumulus@host:mgmt:~$

When you issue a switch reboot with the gNOI system reboot RPC or the activate RPC without the --no-reboot option, the switch reboots immediately; no confirmation is required.

gNMI with NetQ

This section discusses how to configure and use gNMI with NetQ. To configure and use gNMI with Cumulus Linux, see gNMI with Cumulus Linux.

Configure the gNMI Agent

The netq-agent package includes the gNMI agent, which it disables by default. To enable the gNMI agent:

cumulus@switch:~$ sudo systemctl enable netq-agent.service
cumulus@switch:~$ sudo systemctl start netq-agent.service
cumulus@switch:~$ netq config add agent gnmi-enable true
cumulus@switch:~$ netq config restart agent

The gNMI agent listens over port 9339. You can change the default port in case you use that port in another application. The /etc/netq/netq.yml file stores the configuration.

Use the following commands to adjust the settings:

  1. Disable the gNMI agent:

    cumulus@switch:~$ netq config add agent gnmi-enable false
    
  2. Change the default port over which the gNMI agent listens:

    cumulus@switch:~$ netq config add agent gnmi-port <gnmi_port>
    
  3. Restart the NetQ Agent to incorporate the configuration changes:

    cumulus@switch:~$ netq config restart agent
    

The gNMI agent relies on the data it collects from the NVUE service. For complete data collection with gNMI, you must enable the NVUE service. To check the status of the nvued service, run the sudo systemctl status nvued.service command:

cumulus@switch:mgmt:~$ sudo systemctl status nvued.service
● nvued.service - NVIDIA User Experience Daemon
   Loaded: loaded (/lib/systemd/system/nvued.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2023-03-09 20:00:17 UTC; 6 days ago

If necessary, enable and start the service:

cumulus@switch:mgmt:~$ sudo systemctl enable nvued.service
cumulus@switch:mgmt:~$ sudo systemctl start nvued.service

Use the gNMI Agent Only

NVIDIA recommends that you collect data with both the gNMI and NetQ agents. However, if you do not want to collect data with both agents or you are not streaming data to NetQ, you can disable the NetQ agent. Cumulus Linux then sents data only to the gNMI agent.

To disable the NetQ agent:

cumulus@switch:~$ netq config add agent opta-enable false

You cannot disable both the NetQ and gNMI agent. If you enable both agents on Cumulus Linux and a NetQ server is unreachable, the switch does not send the data to gNMI from the following models:

  • openconfig-interfaces
  • openconfig-if-ethernet
  • openconfig-if-ethernet-ext
  • openconfig-system
  • nvidia-if-ethernet-ext

WJH, openconfig-platform, and openconfig-lldp data continue streaming to gNMI in this state. If you are only using gNMI and a NetQ telemetry server does not exist, disable the NetQ agent by setting opta-enable to false.

Supported Subscription Modes

Cumulus Linux supports the following gNMI subscription modes:

  • POLL mode
  • ONCE mode
  • STREAM mode, supported for ON_CHANGE subscriptions only

Supported Models

Cumulus Linux supports the following OpenConfig models:

ModelSupported Data
openconfig-interfacesName, Operstatus, AdminStatus, IfIndex, MTU, LoopbackMode, Enabled, Counters (InPkts, OutPkts, InOctets, InUnicastPkts, InDiscards, InMulticastPkts, InBroadcastPkts, InErrors, OutOctets, OutUnicastPkts, OutMulticastPkts, OutBroadcastPkts, OutDiscards, OutErrors)
openconfig-if-ethernetAutoNegotiate, PortSpeed, MacAddress, NegotiatedPortSpeed, Counters (InJabberFrames, InOversizeFrames,​ InUndersizeFrames)
openconfig-if-ethernet-extFrame size counters (InFrames_64Octets, InFrames_65_127Octets, InFrames_128_255Octets, InFrames_256_511Octets, InFrames_512_1023Octets, InFrames_1024_1518Octets)
openconfig-systemMemory, CPU
openconfig-platformPlatform data (Name, Description, Version)
openconfig-lldpLLDP data (PortIdType, PortDescription, LastUpdate, SystemName, SystemDescription, ChassisId, Ttl, Age, ManagementAddress, ManagementAddressType, Capability)
ModelSupported Data
nvidia-if-wjh-drop-aggregateAggregated WJH drops, including layer 1, layer 2, router, ACL, tunnel, and buffer drops
nvidia-if-ethernet-extExtended Ethernet counters (AlignmentError, InAclDrops, InBufferDrops, InDot3FrameErrors, InDot3LengthErrors, InL3Drops, InPfc0Packets, InPfc1Packets, InPfc2Packets, InPfc3Packets, InPfc4Packets, InPfc5Packets, InPfc6Packets, InPfc7Packets, OutNonQDrops, OutPfc0Packets, OutPfc1Packets, OutPfc2Packets, OutPfc3Packets, OutPfc4Packets, OutPfc5Packets, OutPfc6Packets, OutPfc7Packets, OutQ0WredDrops, OutQ1WredDrops, OutQ2WredDrops, OutQ3WredDrops, OutQ4WredDrops, OutQ5WredDrops, OutQ6WredDrops, OutQ7WredDrops, OutQDrops, OutQLength, OutWredDrops, SymbolErrors, OutTxFifoFull)

The client can use the following YANG models as a reference:

nvidia-if-ethernet-ext
nvidia-if-wjh-drop-aggregate

Collect WJH Data with gNMI

You can export What Just Happened (WJH) data from the NetQ agent to your own gNMI client. Refer to the nvidia-if-wjh-drop-aggregate reference YANG model, above.

The gNMI Agent supports Capabilities and STREAM subscribe requests for WJH events.

WJH Drop Reasons

The data that NetQ sends to the gNMI agent is in the form of WJH drop reasons. The SDK generates the drop reasons and Cumulus Linux stores them in the /usr/etc/wjh_lib_conf.xml file. Use this file as a guide to filter for specific reason types (L1, ACL, and so on), reason IDs, or event severeties.

Layer 1 Drop Reasons

Reason IDReasonDescription
10021Port admin downValidate port configuration
10022Auto-negotiation failureSet port speed manually, disable auto-negotiation
10023Logical mismatch with peer linkCheck cable or transceiver
10024Link training failureCheck cable or transceiver
10025Peer is sending remote faultsReplace cable or transceiver
10026Bad signal integrityReplace cable or transceiver
10027Cable or transceiver is not supportedUse supported cable or transceiver
10028Cable or transceiver is unpluggedPlug cable or transceiver
10029Calibration failureCheck cable or transceiver
10030Cable or transceiver bad statusCheck cable or transceiver
10031Other reasonOther L1 drop reason

Layer 2 Drop Reasons

Reason IDReasonSeverityDescription
201MLAG port isolationNoticeExpected behavior
202Destination MAC is reserved (DMAC=01-80-C2-00-00-0x)ErrorBad packet received from the peer
203VLAN tagging mismatchErrorValidate the VLAN tag configuration on both ends of the link
204Ingress VLAN filteringErrorValidate the VLAN membership configuration on both ends of the link
205Ingress spanning tree filterNoticeExpected behavior
206Unicast MAC table action discardErrorValidate MAC table for this destination MAC
207Multicast egress port list is emptyWarningValidate why IGMP join or multicast router port does not exist
208Port loopback filterErrorValidate MAC table for this destination MAC
209Source MAC is multicastErrorBad packet received from peer
210Source MAC equals destination MACErrorBad packet received from peer

Router Drop Reasons

Reason IDReasonSeverityDescription
301Non-routable packetNoticeExpected behavior
302Blackhole routeWarningValidate routing table for this destination IP
303Unresolved neighbor or next hopWarningValidate ARP table for the neighbor or next hop
304Blackhole ARP or neighborWarningValidate ARP table for the next hop
305IPv6 destination in multicast scope FFx0:/16NoticeExpected behavior - packet is not routable
306IPv6 destination in multicast scope FFx1:/16NoticeExpected behavior - packet is not routable
307Non-IP packetNoticeDestination MAC is the router, packet is not routable
308Unicast destination IP but multicast destination MACErrorBad packet received from the peer
309Destination IP is loopback addressErrorBad packet received from the peer
310Source IP is multicastErrorBad packet received from the peer
311Source IP is in class EErrorBad packet received from the peer
312Source IP is loopback addressErrorBad packet received from the peer
313Source IP is unspecifiedErrorBad packet received from the peer
314Checksum or IPver or IPv4 IHL too shortErrorBad cable or bad packet received from the peer
315Multicast MAC mismatchErrorBad packet received from the peer
316Source IP equals destination IPErrorBad packet received from the peer
317IPv4 source IP is limited broadcastErrorBad packet received from the peer
318IPv4 destination IP is local network (destination=0.0.0.0/8)ErrorBad packet received from the peer
320Ingress router interface is disabledWarningValidate your configuration
321Egress router interface is disabledWarningValidate your configuration
323IPv4 routing table (LPM) unicast missWarningValidate routing table for this destination IP
324IPv6 routing table (LPM) unicast missWarningValidate routing table for this destination IP
325Router interface loopbackWarningValidate the interface configuration
326Packet size is larger than router interface MTUWarningValidate the router interface MTU configuration
327TTL value is too smallWarningActual path is longer than the TTL

Tunnel Drop Reasons

Reason IDReasonSeverityDescription
402Overlay switch - Source MAC is multicastErrorThe peer sent a bad packet
403Overlay switch - Source MAC equals destination MACErrorThe peer sent a bad packet
404Decapsulation errorErrorThe peer sent a bad packet

ACL Drop Reasons

Reason IDReasonSeverityDescription
601Ingress port ACLNoticeValidate Access Control List configuration
602Ingress router ACLNoticeValidate Access Control List
603Egress router ACLNoticeValidate Access Control List
604Egress port ACLNoticeValidate Access Control List

Buffer Drop Reasons

Reason IDReasonSeverityDescription
503Tail dropWarningMonitor network congestion
504WREDWarningMonitor network congestion
505Port TC congestion threshold crossedNoticeMonitor network congestion
506Packet latency threshold crossedNoticeMonitor network congestion

gNMI Client Requests

You can use your gNMI client on a host to request capabilities and data to which the Agent subscribes. The examples below use the gNMIc client..

The following example shows a gNMIc STREAM request for WJH data:

gnmic -a 10.209.37.121:9339 -u cumulus -p ****** --skip-verify subscribe --path "wjh/aggregate/l2/reasons/reason[id=209][severity=error]/state/drop" --mode stream --prefix "/interfaces/interface[name=swp8]/" --target netq

{
  "source": "10.209.37.121:9339",
  "subscription-name": "default-1677695197",
  "timestamp": 1677695102858146800,
  "time": "2023-03-01T18:25:02.8581468Z",
  "prefix": "interfaces/interface[name=swp8]/wjh/aggregate/l2/reasons/reason[severity=error][id=209]",
  "target": "netq",
  "updates": [
    {
      "Path": "state/drop",
      "values": {
        "state/drop": "[{\"AggCount\":283,\"Dip\":\"0.0.0.0\",\"Dmac\":\"1c:34:da:17:93:7c\",\"Dport\":0,\"DropType\":\"L2\",\"EgressPort\":\"\",\"EndTimestamp\":1677695102,\"FirstTimestamp\":1677695072,\"Hostname\":\"neo-switch01\",\"IngressLag\":\"\",\"IngressPort\":\"swp8\",\"Proto\":0,\"Reason\":\"Source MAC is multicast\",\"ReasonId\":209,\"Severity\":\"Error\",\"Sip\":\"0.0.0.0\",\"Smac\":\"01:00:5e:00:00:01\",\"Sport\":0}]"
      }
    }
  ]
}
{
  "source": "10.209.37.121:9339",
  "subscription-name": "default-1677695197",
  "timestamp": 1677695132988218890,
  "time": "2023-03-01T18:25:32.98821889Z",
  "prefix": "interfaces/interface[name=swp8]/wjh/aggregate/l2/reasons/reason[severity=error][id=209]",
  "target": "netq",
  "updates": [
    {
      "Path": "state/drop",
      "values": {
        "state/drop": "[{\"AggCount\":287,\"Dip\":\"0.0.0.0\",\"Dmac\":\"1c:34:da:17:93:7c\",\"Dport\":0,\"DropType\":\"L2\",\"EgressPort\":\"\",\"EndTimestamp\":1677695132,\"FirstTimestamp\":1677695102,\"Hostname\":\"neo-switch01\",\"IngressLag\":\"\",\"IngressPort\":\"swp8\",\"Proto\":0,\"Reason\":\"Source MAC is multicast\",\"ReasonId\":209,\"Severity\":\"Error\",\"Sip\":\"0.0.0.0\",\"Smac\":\"01:00:5e:00:00:01\",\"Sport\":0}]"
      }
    }
  ]
}

The following example shows a gNMIc ONCE mode request for interface port speed:

gnmic -a 10.209.37.121:9339 -u cumulus -p ****** --skip-verify subscribe --path "ethernet/state/port-speed" --mode once --prefix "/interfaces/interface[name=swp1]/" --target netq
{
  "source": "10.209.37.123:9339",
  "subscription-name": "default-1677695151",
  "timestamp": 1677256036962254134,
  "time": "2023-02-24T16:27:16.962254134Z",
  "target": "netq",
  "updates": [
    {
      "Path": "interfaces/interface[name=swp1]/ethernet/state/port-speed",
      "values": {
        "interfaces/interface/ethernet/state/port-speed": "SPEED_1GB"
      }
    }
  ]
}

The following example shows a gNMIc POLL mode request for interface status:

gnmic -a 10.209.37.121:9339 -u cumulus -p ****** --skip-verify subscribe --path "state/oper-status" --mode poll --prefix "/interfaces/interface[name=swp1]/" --target netq
{
  "timestamp": 1677644403153198642,
  "time": "2023-03-01T04:20:03.153198642Z",
  "prefix": "interfaces/interface[name=swp1]",
  "target": "netq",
  "updates": [
    {
      "Path": "state/oper-status",
      "values": {
        "state/oper-status": "UP"
      }
    }
  ]
}
received sync response 'true' from '10.209.37.123:9339'
{
  "timestamp": 1677644403153198642,
  "time": "2023-03-01T04:20:03.153198642Z",
  "prefix": "interfaces/interface[name=swp1]",
  "target": "netq",
  "updates": [
    {
      "Path": "state/oper-status",
      "values": {
        "state/oper-status": "UP"
      }
    }
  ]
}

Considerations

When using gNMI with Cumulus Linux:

  • The minimum sampling interval is 1 second. If you configure a shorter sampling interval, the switch might not behave as expected.
  • ModelData, Origin, and Extensions fields are ignored in requests and not set in responses.