Support for IPI Native Data Models and OpenConfig Data Models

Streaming Telemetry Data Models: OcNOS supports IPI native data models and OpenConfig data models, providing standardized representations of network configurations and telemetry data. This support enhances interoperability and facilitates consistent management across heterogeneous network environments.

Wildcard Support in Sensor Paths

OcNOS supports wildcard characters in sensor paths (XPaths) to simplify subscription requests and minimize the number of XPaths needed to monitor multiple instances. The following wildcard types are supported:

Explicit Wildcard for Key Names

Allows selecting all instances of a keyed list.

Example

The XPath below explicitly uses asterisk (*) for the name key in the interface list, which means it retrieves counters for all interfaces regardless of their names. This is useful when user do not need to specify individual interface names and want to subscribe to all available interfaces.

Copy
ipi:/interfaces/interface[name=*]/state/counters 

Implicit Wildcard (Omission of Key Name)

Automatically selects all instances when a key is not explicitly mentioned.

Example

Here, the name key is completely omitted, which implies that the query applies to all interfaces. This method functions similarly to using an explicit wildcard (*), but it assumes that the key name is optional, applying to all list instances automatically.

Copy
ipi:/interfaces/interface/state/counters

Partial Wildcard for Key Name

Matches instances with a key name that starts with a given prefix.

Example

The wildcard * is applied at the end of the key name, meaning this XPath matches all interfaces whose names start with xe. For instance, it will match xe0, xe1, xe100, etc. However, it will not match eth0, ge1, etc. This is useful for filtering a subset of interfaces with a common prefix, reducing the number of specific XPaths required.

Copy
ipi:/interfaces/interface[name=xe*]/state

Partial Wildcard for Multiple Keys

Partial wildcard applies to the first key when multiple keys exist.

Valid Example

This example allows retrieving information from all CMIS components while still applying filters for specific lanes and flags.

Copy
ipi:/components/component[name=CMIS*]/transceiver/cmis-module/media-monitors/lanes/lane[number=2]/flags/flag[id=*]/state
component[name=CMIS*]: Matches all components where the name starts with "CMIS" (e.g., CMIS-1, CMIS-module-10, etc).
lane[number=2]: Applies only to lane number 2.
flag[id=*]: Retrieves all flags within lane number 2.

Invalid Example

The wildcard is at the beginning of the key (*CMIS), which is not supported. Only suffix-based (CMIS*) wildcarding is allowed.

Copy
ipi:/components/component[name=*CMIS]/transceiver/cmis-module/media-monitors/lanes/lane[number=2]/flags/flag[id=*]/state

Use case 1: Wildcard Support in Dial-In Mode

In this example, the explicit wildcard name=* in ipi:/components/component[name=*]/state/memory XPath allows real-time monitoring of memory usage for all components without needing to specify individual component names. The gnmic command subscribes to this data stream to retrieve available and utilized memory for components like HARD-DISK and RAM from the target at 10.12.162.22:9339. With a 90-seconds sampling interval, the system collects data efficiently while minimizing the complexity of manual configuration. This approach simplifies network monitoring by dynamically including all relevant components, making it easier to track system performance in real time.

Copy
OcNOS# ./gnmic -a 10.12.162.22:9339 -u admin -p admin --insecure --mode STREAM --stream-mode sample --sample-interval 90s sub --path '/components/component[name=*]/state/memory' --encoding json_ietf
{
  "source": "10.12.162.22:9339",
  "subscription-name": "default-1729755066",
  "timestamp": 1729774623040087176,
  "time": "2024-10-24T12:57:03.040087176Z",
  "updates": [
    {
      "Path": "components/component[name=\"HARD-DISK\"]/state/memory",
      "values": {
        "components/component/state/memory": {
          "available": 118183952384,
          "utilized": 5681184768
        }
      }
    }
  ]
}
{
  "source": "10.12.162.22:9339",
  "subscription-name": "default-1729755066",
  "timestamp": 1729774623040734590,
  "time": "2024-10-24T12:57:03.04073459Z",
  "updates": [
    {
      "Path": "components/component[name=\"RAM\"]/state/memory",
      "values": {
        "components/component/state/memory": {
          "available": 33637269504,
          "utilized": 1130364928
        }
      }
    }
  ]
}

Use case 2: Wildcard Support in Dial-Out Mode

This example uses a partial wildcard for key names in Dial-Out mode to subscribe to telemetry data for all components whose names start with PORT, eliminating the need to list them individually. The XPath ipi:/components/component[name=PORT*]/state ensures the system automatically monitors all port-related components, such as PORT-SFP-5, PORT-SFP-7, and PORT-SFP-11. The system sends telemetry data to the target at 10.12.66.160:11161 every 90 seconds, dynamically retrieving information on memory, board FRU, and temperature for matching components.

Copy
OcNOS#show running-config streaming-telemetry
!
feature streaming-telemetry vrf management
!
sensor-group interface vrf management
 sensor-path ipi:/components/component[name=PORT*]/state
!
destination-group tunnel-1 vrf management
 tunnel-server ip 10.12.66.160 port 11161
!
subscription-name sub-1 vrf management
 destination-group tunnel-1
 sensor-group interface sample-interval 90
!
!
Copy
OcNOS#show streaming-telemetry

 Number of telemetry instances : 1 (management)
 Platform type                 : High range
 Maximum sensor-paths          : 100
 Minimum sample-interval       : 10
 Number of active sensor-paths : 30 (Dial-In : 0, Dial-out : 30)

 SI           : Sampling Interval in seconds
 Enc-Type     : Encoding type
 Origin:Path  : Sensor Path


 1. Subscription Details (VRF-Name: default):
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Port         : 9339
   TLS          : Disabled
   insecure-tls : False

 Dial-Out Subscription Details:
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 1. Subscription-name    : sub-1
    Status               : ACTIVE
    Enc-Type             : JSON
    Tunnel-server details:
    ~~~~~~~~~~~~~~~~~~~~~~
    Tunnel-server Retry-interval  : Default-60 (seconds)

     Destination-group         Status         Tunnel-IP:Port
     -----------------         ------         --------------
     tunnel-1                ACTIVE           10.12.66.160:11161
    Sensor-group details:
    ~~~~~~~~~~~~~~~~~~~~~
    Sensor-group          SI            Origin:Path
    ------------         ----           -----------
       interface          90           ipi:/components/component[name=PORT*]/state
                                        [*]ipi:/components/component[name=PORT*]/state/memory
                                        [*]ipi:/components/component[name=PORT*]/state/board-fru
                                        [*]ipi:/components/component[name=PORT*]/state/temperature

 [*]-> Indicates child path learnt from parent config, not configured by user

gnmic Output

The gnmic output confirms that telemetry updates include firmware, hardware version, location, operational status, and parent chassis details for each matching port component.

By using a partial wildcard, the system improves scalability by automatically incorporating new port components without modifying the sensor path configuration, reducing manual effort and ensuring real-time network monitoring.

Copy
#./gnmic --config abc.yaml --use-tunnel-server publish --insecure
{
  "source": "e8:c5:7a:8f:98:26",
  "subscription-name": "sub-1",
  "timestamp": 1725361959730514173,
  "time": "2024-09-03T11:12:39.730514173Z",
  "updates": [
    {
      "Path": "ipi:components/component[name=\"PORT-SFP-5\"]/state",
      "values": {
        "components/component/state": {
          "description": "NA",
          "empty": false,
          "firmware-version": "NA",
          "hardware-version": "NA",
          "location": "17",
          "mfg-name": "NA",
          "name": "PORT-SFP-17",
          "oper-status": "NA",
          "parent": "CHASSIS",
          "part-no": "NA",
          "product-name": "NA",
          "removable": false,
          "serial-no": "NA",
          "software-version": "NA",
          "type": "port"
        }
      }
    }
  ]
}
{
  "source": "e8:c5:7a:8f:98:26",
  "subscription-name": "sub-1",
  "timestamp": 1725361959731082952,
  "time": "2024-09-03T11:12:39.731082952Z",
  "updates": [
    {
      "Path": "ipi:components/component[name=\"PORT-SFP-7\"]/state",
      "values": {
        "components/component/state": {
          "description": "NA",
          "empty": false,
          "firmware-version": "NA",
          "hardware-version": "NA",
          "location": "5",
          "mfg-name": "NA",
          "name": "PORT-SFP-5",
          "oper-status": "NA",
          "parent": "CHASSIS",
          "part-no": "NA",
          "product-name": "NA",
          "removable": false,
          "serial-no": "NA",
          "software-version": "NA",
          "type": "port"
        }
      }
    }
  ]
}
{
  "source": "e8:c5:7a:8f:98:26",
  "subscription-name": "sub-1",
  "timestamp": 1725361959731795490,
  "time": "2024-09-03T11:12:39.73179549Z",
  "updates": [
    {
      "Path": "ipi:components/component[name=\"PORT-SFP-11\"]/state",
      "values": {
        "components/component/state": {
          "description": "NA",
          "empty": false,
          "firmware-version": "NA",
          "hardware-version": "NA",
          "location": "7",
          "mfg-name": "NA",
          "name": "PORT-SFP-7",
          "oper-status": "NA",
          "parent": "CHASSIS",
          "part-no": "NA",
          "product-name": "NA",
          "removable": false,
          "serial-no": "NA",
          "software-version": "NA",
          "type": "port"
        }
      }
    }
  ]
}
{
  "source": "e8:c5:7a:8f:98:26",
  "subscription-name": "sub-1",
  "timestamp": 1725361959732153620,
  "time": "2024-09-03T11:12:39.73215362Z",
  "updates": [
    {
      "Path": "ipi:components/component[name=\"PORT-SFP-13\"]/state",
      "values": {
        "components/component/state": {
          "description": "NA",
          "empty": false,
          "firmware-version": "NA",
          "hardware-version": "NA",
          "location": "11",
          "mfg-name": "NA",
          "name": "PORT-SFP-11",
          "oper-status": "NA",
          "parent": "CHASSIS",
          "part-no": "NA",
          "product-name": "NA",
          "removable": false,
          "serial-no": "NA",
          "software-version": "NA",
          "type": "port"
        }
      }
    }
  ]
}
{
  "source": "e8:c5:7a:8f:98:26",
  "subscription-name": "sub-1",
  "timestamp": 1725361959731446131,
  "time": "2024-09-03T11:12:39.731446131Z",
  "updates": [
    {
      "Path": "ipi:components/component[name=\"PORT-SFP-9\"]/state",
      "values": {
        "components/component/state": {
          "description": "NA",
          "empty": false,
          "firmware-version": "NA",
          "hardware-version": "NA",
          "location": "13",
          "mfg-name": "NA",
          "name": "PORT-SFP-13",
          "oper-status": "NA",
          "parent": "CHASSIS",
          "part-no": "NA",
          "product-name": "NA",
          "removable": false,
          "serial-no": "NA",
          "software-version": "NA",
          "type": "port"
        }
      }
    }
  ]
}
{
  "source": "e8:c5:7a:8f:98:26",
  "subscription-name": "sub-1",
  "timestamp": 1725361959731621187,
  "time": "2024-09-03T11:12:39.731621187Z",
  "updates": [
    {
      "Path": "ipi:components/component[name=\"PORT-SFP-10\"]/state",
      "values": {
        "components/component/state": {
          "description": "NA",
          "empty": false,
          "firmware-version": "NA",
          "hardware-version": "NA",
          "location": "14",
          "mfg-name": "NA",
          "name": "PORT-SFP-14",
          "oper-status": "NA",
          "parent": "CHASSIS",
          "part-no": "NA",
          "product-name": "NA",
          "removable": false,
          "serial-no": "NA",
          "software-version": "NA",
          "type": "port"
        }
      }
    }
  ]
}