blob: 04a3e020c8fdb351c3de86e9315ebcbacb823cc6 [file] [log] [blame] [view] [edit]
## Overview of nsmtool
nsmtool is a client tool that acts as a NSM requester which runs on the BMC.
nsmtool sends the request message and displays the response message and also
provides flexibility to parse the response message & display it in readable
format.
nsmtool supports the subcommands for NSM types such as discovery [Type 0],
telemetry [Type 1, 2, & 3], diag [Type 4], and config [Type 5].
- Source files are implemented in C++.
- Consumes nsm/libnsm encode and decode functions.
- Communicates with nsmd daemon running on BMC.
- Enables writing functional test cases for NSM stack.
Please refer the NSM specifications with respect to the nsm types.
https://nvidia.sharepoint.com/:w:/r/sites/MCTPSystemManagementAPI/Shared%20Documents/Specifications%20(working%20copy)/System%20Management%20API%20Base%20Specification.docx?d=w9b1d3c7a195848dd91d1742808256f77&csf=1&web=1&e=LQRwYQ
## Code organization
Source files in nsmtool repository are named with respect to the NSM type.
Example:
```
nsm_discovery_cmd.[hpp/cpp], nsm_telemetry_cmd.[hpp/cpp]
```
nsmtool commands for corresponding NSM type is constructed with the help of
encode request and decode response APIs which are implemented in nsm/libnsm.
Example:
Given a NSM command "foo" of NSM type "discovery" the nsmtool should consume
following API from the libnsm.
```
- encode_foo_req() - Send the required input parameters in the request message.
- decode_foo_resp() - Decode the response message.
```
If NSM commands are not yet supported in the nsmtool repository user can
directly send the request message with the help of **nsmtool raw -d <data>** option.
## Usage
User can see the nsmtool supported NSM types in the usage output available
with the **-h** help option as shown below:
```
nsmtool -h
NSM requester tool for OpenBMC
Usage: nsmtool [OPTIONS] SUBCOMMAND
Options:
-h,--help Print this help message and exit
Subcommands:
raw send a raw request and print response
config Device configuration type command
diag Diagnostics type command
firmware Device firmware type commands
discovery Device capability discovery type command
telemetry Network, PCI link and platform telemetry type command
passthrough Passthrough command support for dbus API testing
```
nsmtool command prompt expects a NSM type to display the list of supported
commands that are already implemented for that particular NSM type.
```
Command format: nsmtool <nsmType> -h
```
Example:
```
$ nsmtool telemetry -h
telemetry type command: Network, PCI link and platform telemetry type command
Usage: nsmtool telemetry [OPTIONS] SUBCOMMAND
Options:
-h,--help Print this help message and exit
Subcommands:
GetTemperature get temperature from a given source in degrees Celsius
GetAggregateTemp get aggregate temperature from multiple sensors
GetPower get power reading from a given source in milliwatts
GetPowerLimits get power limits from the devices
SetPowerLimits set power limits for the devices
GetEDPpScalingFactor get EDPp scaling factor in integer percentage
SetEDPpScalingFactor set EDPp scaling factor as an integer percentage
GetInventoryInfo get inventory information
........
```
More help on the command usage can be found by specifying the NSM type and the
command name with **-h** argument as shown below.
```
Command format: nsmtool <nsmType> <commandName> -h
```
Example:
```
$ nsmtool telemetry GetTemperature -h
GetTemperature command: Get temperature from a given source in degrees Celsius
Usage: nsmtool platform getTemperature [OPTIONS]
Options:
-h,--help Print this help message and exit
-m,--mctp_eid UINT MCTP endpoint ID
-v,--verbose
-s,--sensorId UINT REQUIRED
```
## nsmtool raw command usage
nsmtool raw command option accepts request message in the hexadecimal
bytes and send the response message in hexadecimal bytes.
```
$ nsmtool raw -h
raw type command: Send a raw request and print response
Usage: nsmtool raw [OPTIONS]
Options:
-h,--help Print this help message and exit
-m,--mctp_eid UINT MCTP endpoint ID
-v,--verbose
-d,--data UINT REQUIRED Raw data
```
**nsmtool request message format:**
```
nsmtool raw -m <eid> -d 0x10 0xde 0x80 0x89 <nsmType> <cmdType> <dataSize> <payloadReq>
payloadReq - stream of bytes constructed based on the request message format
defined for the command type as per the spec.
```
**nsmtool response message format:**
```
<instanceId> <hdrVersion> <nsmType> <cmdType> <completionCode> <reserved> <dataSize> <payloadResp>
payloadResp - stream of bytes displayed based on the response message format
defined for the command type as per the spec.
```
Example: for ping command
```
root@hgxb:~# nsmtool raw -v -m 23 -d 0x10 0xde 0x80 0x89 0x00 0x00 0x00
nsmtool: <6> Tx: 10 de 80 89 00 00 00
Success in creating the socket : RC = 5
Success in connecting to socket : RC = 0
Success in sending message type as VDM to mctp demux daemon : RC = 4
nsmtool: <6> Rx: 10 de 00 89 00 00 00 00 00 00 00
```
## nsmtool with mctp_eid option
Use **-m** or **--mctp_eid** option to send nsm request message to remote mctp
end point and by default nsmtool consider mctp_eid value as **'30'**.
```
Command format:
nsmtool <nsmType> <cmdType> -m <mctpId>
nsmtool raw -d 0x10 0xde 0x80 0x89 <nsmType> <cmdType> <dataSize> <payloadReq> -m <mctpId>
```
## nsmtool verbosity
By default verbose flag is disabled on the nsmtool.
Enable verbosity with **-v** flag as shown below.
Example:
```
nsmtool telemetry GetTemperatureReading -m {EID} -s {SENSOR_ID}
```