mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-10 18:47:22 +00:00
Initial checkin. This file will describe SOL in ipmitool at a high level.
This commit is contained in:
parent
b3d2bb937d
commit
c3289bb6f4
76
ipmitool/src/plugins/lanplus/README.sol
Normal file
76
ipmitool/src/plugins/lanplus/README.sol
Normal file
@ -0,0 +1,76 @@
|
||||
This document was last updated for release 1.8.8.
|
||||
|
||||
This document explains how Serial Over Lan is implemented on in the
|
||||
impitool IPMI client. Obviously, the code itself is authoritative, but
|
||||
this document should serve as a good starting point.
|
||||
|
||||
Serial Over Lan (SOL) is defined in the IPMI v2 specification published by
|
||||
Intel and available at http://www.intel.com/design/servers/ipmi/. SOL
|
||||
functionality is built on top of the RMCP+ protocol as an additional
|
||||
payload type (type 1).
|
||||
|
||||
The high end SOL logic is implemented in src/ipmitool/lib/ipmi_sol.c. SOL
|
||||
sessions are begun in ipmitool using the "sol activate" command. This
|
||||
command maps directly to the IPMI Activate Payload command. It first
|
||||
verifies that an RMCP+ session (lanplus interface) is being used to
|
||||
establish the session. Although the spec allows for a SOL connection to be
|
||||
established on a port different than the RMCP+ port that the "activate
|
||||
payload" command issued, impitool does not support this.
|
||||
|
||||
Once a session has been established (the activate payload command
|
||||
succeeds), impitool simply loops over a select() on user input and data
|
||||
returned from the BMC. All user input is first filtered so that special
|
||||
escape sequences can suspend or deactivate the SOL session and so that data
|
||||
can be broken into chunks no greater than N bytes. This maximum is
|
||||
specified by the BMC in the response to the Activate Payload command.
|
||||
|
||||
User input to the BMC is handled in ipmitool/src/plugins/lanplus/lanplus.c.
|
||||
Every SOL packet (with one exception) traveling in either direction causes
|
||||
the recipient to return an acknowledgement packet, though acks themself are
|
||||
not acknowledged. The transport layer in lanplus.c handles the logic
|
||||
regarding acks, partial acks, sequence numbers. SOL acknowledgements
|
||||
packets be acks, partial acks (the remote destination processed only some
|
||||
of the data), and nacks (requests to stop sending packets). Nacks are not
|
||||
honored by ipmitool.
|
||||
|
||||
Note that one way that SOL communication differs from standard IPMI
|
||||
commands, is that it is not simply a request response protocol. Packets
|
||||
may be returned asyncrhonously from the BMC. When establishing a SOL
|
||||
session, impitool registers a callback for asynchonously received data.
|
||||
This call back simply prints text returned from the BMC.
|
||||
|
||||
Once a user has chosen to exit the SOL session (with ~.) ipmitool sends the
|
||||
IPMI SOL Deactivate command to the BMC.
|
||||
|
||||
The standard code path for SOL logic follows:
|
||||
ipmi_sol_main (ipmi_sol.c):
|
||||
|
||||
ipmi_sol_activate (ipmi_sol.c):
|
||||
Argument validation
|
||||
Creation and dispatch of IPMI Activate Payload command
|
||||
|
||||
ipmi_sol_red_pill (ipmi_sol.c):
|
||||
Loop on select() for user input and data returned from the BMC
|
||||
Periodic dispatch of "keep alive" packet to the BMC.
|
||||
Send user input to the BMC and BMC data to the console.
|
||||
|
||||
processSolUserInput (ipmi_sol.c):
|
||||
Process possible escape sequences (~., ~B, etc.)
|
||||
Send (with retries) user data to the BMC
|
||||
Partial creation of packet payload
|
||||
|
||||
ipmi_lanplus_send_sol (lanplus.c):
|
||||
Completion of packet payload
|
||||
Send (with retries) of SOL packet
|
||||
|
||||
ipmi_lanplus_send_payload (lanplus.c):
|
||||
Creation of RMCP+ packet
|
||||
Details general to all V2 packet processing, as
|
||||
well as a some logic to handle ack reception.
|
||||
|
||||
is_sol_partial_ack (lanplus.c):
|
||||
Determine whether a data needs to be resent
|
||||
|
||||
ipmi_lanplus_recv_sol (lanplus.c):
|
||||
Handle data received by the BMC. Ack as appropriate.
|
||||
|
Loading…
x
Reference in New Issue
Block a user