Main Page | Class List | Directories | File List | Class Members | File Members

ipmi_sol.h

Go to the documentation of this file.
00001 /*
00002  * ipmi_sol.h
00003  *
00004  * IPMI Serial-over-LAN Client Code
00005  *
00006  * Author: Cyclades Australia Pty. Ltd.
00007  *         Darius Davis <darius.davis@cyclades.com>
00008  *
00009  * Copyright 2005 Cyclades Australia Pty. Ltd.
00010  *
00011  *  This program is free software; you can redistribute it and/or
00012  *  modify it under the terms of the GNU Lesser General Public License
00013  *  as published by the Free Software Foundation; either version 2 of
00014  *  the License, or (at your option) any later version.
00015  *
00016  *
00017  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
00018  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00019  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00020  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00021  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00022  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
00023  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00024  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
00025  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
00026  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027  *
00028  *  You should have received a copy of the GNU Lesser General Public
00029  *  License along with this program; if not, write to the Free
00030  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00031  */
00032 
00073 #ifndef _IPMI_SOL_H
00074 #define _IPMI_SOL_H
00075 
00076 #ifdef __cplusplus
00077 extern "C" {
00078 #endif
00079 
00083 #define IPMI_SOL_BMC_TRANSMIT_QUEUE                0x01
00084 #define IPMI_SOL_BMC_RECEIVE_QUEUE                 0x02
00085 #define IPMI_SOL_MANAGEMENT_CONSOLE_TRANSMIT_QUEUE 0x04
00086 #define IPMI_SOL_MANAGEMENT_CONSOLE_RECEIVE_QUEUE  0x08
00087 
00088 #define IPMI_SOL_BMC_QUEUES (IPMI_SOL_BMC_TRANSMIT_QUEUE \
00089                              | IPMI_SOL_BMC_RECEIVE_QUEUE)
00090 
00091 #define IPMI_SOL_MANAGEMENT_CONSOLE_QUEUES \
00092         (IPMI_SOL_MANAGEMENT_CONSOLE_TRANSMIT_QUEUE \
00093          | IPMI_SOL_MANAGEMENT_CONSOLE_RECEIVE_QUEUE)
00094 
00095 #define IPMI_SOL_ALL_QUEUES (IPMI_SOL_BMC_QUEUES \
00096                              | IPMI_SOL_MANAGEMENT_CONSOLE_QUEUES)
00097 
00098 
00102 #define IPMI_SOL_BIT_RATE_DEFAULT               0x00
00103 #define IPMI_SOL_BIT_RATE_9600                  0x06
00104 #define IPMI_SOL_BIT_RATE_19200                 0x07
00105 #define IPMI_SOL_BIT_RATE_38400                 0x08
00106 #define IPMI_SOL_BIT_RATE_57600                 0x09
00107 #define IPMI_SOL_BIT_RATE_115200                0x0a
00108 
00109 
00113 typedef enum
00114 {
00115     /* The connection is closed; no data transfer is possible. */
00116     ipmi_sol_state_closed,
00117 
00118     /* The connection is currently starting up; no data transfer yet. */
00119     ipmi_sol_state_connecting,
00120 
00121     /* The connection is up and operational. */
00122     ipmi_sol_state_connected,
00123 
00124     /* The connection is up, but the BMC has reported Character
00125        Transfer Unavailable.  This means the BMC is flow-controlling
00126        us. */
00127     ipmi_sol_state_connected_ctu,
00128 
00129     /* The connection is going down.  No data transfer. */
00130     ipmi_sol_state_closing
00131 } ipmi_sol_state;
00132 
00133 
00137 typedef enum
00138 {
00139     ipmi_sol_serial_alerts_fail = 0,
00140     ipmi_sol_serial_alerts_deferred = 1,
00141     ipmi_sol_serial_alerts_succeed = 2
00142 } ipmi_sol_serial_alert_behavior;
00143 
00144 
00148 typedef struct ipmi_sol_conn_s ipmi_sol_conn_t;
00149 
00150 
00179 typedef void (*ipmi_sol_connection_state_cb)(ipmi_sol_conn_t *conn,
00180                                              ipmi_sol_state  state,
00181                                              int             error,
00182                                              void            *cb_data);
00183 
00184 
00206 typedef void (*ipmi_sol_transmit_complete_cb)(ipmi_sol_conn_t *conn,
00207                                               int             error,
00208                                               void            *cb_data);
00209 
00210 
00231 typedef int (*ipmi_sol_data_received_cb)(ipmi_sol_conn_t *conn,
00232                                          const void      *buf,
00233                                          size_t          count,
00234                                          void            *cb_data);
00235 
00236 
00257 typedef void (*ipmi_sol_flush_complete_cb)(ipmi_sol_conn_t *conn,
00258                                            int             error,
00259                                            int         queue_selectors_flushed,
00260                                            void            *cb_data);
00261 
00262 
00273 typedef void (*ipmi_sol_break_detected_cb)(ipmi_sol_conn_t *conn,
00274                                            void            *cb_data);
00275 
00276 
00288 typedef void (*ipmi_sol_bmc_transmit_overrun_cb)(ipmi_sol_conn_t *conn,
00289                                                  void            *cb_data);
00290 
00291 
00302 int ipmi_sol_create(ipmi_con_t      *ipmi,
00303                     ipmi_sol_conn_t **sol_conn);
00304 
00305 
00306 
00307 /**************************************************************************
00308  ** IPMI SoL connection configuration
00309  **/
00310 
00311 
00321 int ipmi_sol_register_connection_state_callback(ipmi_sol_conn_t *conn,
00322                                                ipmi_sol_connection_state_cb cb,
00323                                                 void            *cb_data);
00324 int ipmi_sol_deregister_connection_state_callback(ipmi_sol_conn_t *conn,
00325                                                ipmi_sol_connection_state_cb cb,
00326                                                   void *cb_data);
00327 
00328 int ipmi_sol_register_data_received_callback(ipmi_sol_conn_t *conn,
00329                                              ipmi_sol_data_received_cb cb,
00330                                              void            *cb_data);
00331 int ipmi_sol_deregister_data_received_callback(ipmi_sol_conn_t *conn,
00332                                                ipmi_sol_data_received_cb cb,
00333                                                void            *cb_data);
00334 
00335 int ipmi_sol_register_break_detected_callback(ipmi_sol_conn_t *conn,
00336                                               ipmi_sol_break_detected_cb cb,
00337                                               void            *cb_data);
00338 int ipmi_sol_deregister_break_detected_callback(ipmi_sol_conn_t *conn,
00339                                                 ipmi_sol_break_detected_cb cb,
00340                                                 void            *cb_data);
00341 
00342 int ipmi_sol_register_bmc_transmit_overrun_callback(ipmi_sol_conn_t *conn,
00343                                            ipmi_sol_bmc_transmit_overrun_cb cb,
00344                                                     void            *cb_data);
00345 int ipmi_sol_deregister_bmc_transmit_overrun_callback(ipmi_sol_conn_t *conn,
00346                                            ipmi_sol_bmc_transmit_overrun_cb cb,
00347                                                       void           *cb_data);
00348 
00349 
00357 void ipmi_sol_set_ACK_timeout(ipmi_sol_conn_t *conn, int timeout_usec);
00358 
00367 int ipmi_sol_get_ACK_timeout(ipmi_sol_conn_t *conn);
00368 
00369 
00376 void ipmi_sol_set_ACK_retries(ipmi_sol_conn_t *conn, int retries);
00377 
00385 int ipmi_sol_get_ACK_retries(ipmi_sol_conn_t *conn);
00386 
00395 int ipmi_sol_set_use_authentication(ipmi_sol_conn_t *conn,
00396                                     int             use_authentication);
00397 
00405 int ipmi_sol_get_use_authentication(ipmi_sol_conn_t *conn);
00406 
00407 
00416 int ipmi_sol_set_use_encryption(ipmi_sol_conn_t *conn, int use_encryption);
00417 
00425 int ipmi_sol_get_use_encryption(ipmi_sol_conn_t *conn);
00426 
00427 
00436 int ipmi_sol_set_shared_serial_alert_behavior(ipmi_sol_conn_t *conn,
00437                                       ipmi_sol_serial_alert_behavior behavior);
00438 
00446 ipmi_sol_serial_alert_behavior ipmi_sol_get_shared_serial_alert_behavior
00447                                                       (ipmi_sol_conn_t *conn);
00448 
00449 
00459 int ipmi_sol_set_deassert_CTS_DCD_DSR_on_connect(ipmi_sol_conn_t *conn,
00460                                                  int             assert);
00461 
00470 int ipmi_sol_get_deassert_CTS_DCD_DSR_on_connect(ipmi_sol_conn_t *conn);
00471 
00472 
00480 int ipmi_sol_set_bit_rate(ipmi_sol_conn_t *conn, unsigned char rate);
00481 
00482 
00489 unsigned char ipmi_sol_get_bit_rate(ipmi_sol_conn_t *conn);
00490 
00491 
00512 int ipmi_sol_open(ipmi_sol_conn_t *conn);
00513 
00514 
00535 int ipmi_sol_close(ipmi_sol_conn_t *conn);
00536 
00537 
00551 int ipmi_sol_force_close(ipmi_sol_conn_t *conn);
00552 
00553 
00562 int ipmi_sol_free(ipmi_sol_conn_t *conn);
00563 
00564 
00565 
00566 /******************************************************************************
00567  ** IPMI SoL write operations (and sundry operations that cause a transmit)
00568  **/
00569  
00591 int ipmi_sol_write(ipmi_sol_conn_t *conn,
00592                    const void      *buf,
00593                    int             count,
00594                    ipmi_sol_transmit_complete_cb cb,
00595                    void            *cb_data);
00596 
00597 
00609 int ipmi_sol_release_nack(ipmi_sol_conn_t *conn);
00610 
00611 
00626 int ipmi_sol_send_break(ipmi_sol_conn_t *conn,
00627                         ipmi_sol_transmit_complete_cb cb,
00628                         void            *cb_data);
00629 
00630 
00654 int ipmi_sol_set_CTS_assertable(ipmi_sol_conn_t *conn,
00655                                 int             asserted,
00656                                 ipmi_sol_transmit_complete_cb cb,
00657                                 void            *cb_data);
00658 
00659 
00675 int ipmi_sol_set_DCD_DSR_asserted(ipmi_sol_conn_t *conn,
00676                                   int             asserted,
00677                                   ipmi_sol_transmit_complete_cb cb,
00678                                   void            *cb_data);
00679 
00680 
00699 int ipmi_sol_set_RI_asserted(ipmi_sol_conn_t *conn,
00700                              int             asserted,
00701                              ipmi_sol_transmit_complete_cb cb,
00702                              void            *cb_data);
00703 
00704 
00733 int ipmi_sol_flush(ipmi_sol_conn_t *conn,
00734                    int             queue_selectors,
00735                    ipmi_sol_flush_complete_cb cb,
00736                    void            *cb_data);
00737 
00738 #ifdef __cplusplus
00739 }
00740 #endif
00741 
00742 #endif /* _IPMI_SOL_H */

© sourcejam.com 2005-2008