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].
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
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 option.
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 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
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>
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}