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

cmd_conn.c

Go to the documentation of this file.
00001 /*
00002  * cmd_conn.c
00003  *
00004  * A command interpreter for OpenIPMI
00005  *
00006  * Author: MontaVista Software, Inc.
00007  *         Corey Minyard <minyard@mvista.com>
00008  *         source@mvista.com
00009  *
00010  * Copyright 2004 MontaVista Software Inc.
00011  *
00012  *  This program is free software; you can redistribute it and/or
00013  *  modify it under the terms of the GNU Lesser General Public License
00014  *  as published by the Free Software Foundation; either version 2 of
00015  *  the License, or (at your option) any later version.
00016  *
00017  *
00018  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
00019  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00020  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
00021  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
00022  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00023  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
00024  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00025  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
00026  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
00027  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00028  *
00029  *  You should have received a copy of the GNU Lesser General Public
00030  *  License along with this program; if not, write to the Free
00031  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00032  */
00033 
00034 #include <errno.h>
00035 #include <string.h>
00036 #include <ctype.h>
00037 #include <stdlib.h>
00038 #include <stdio.h>
00039 #include <OpenIPMI/ipmiif.h>
00040 #include <OpenIPMI/ipmi_cmdlang.h>
00041 
00042 static void
00043 con_list_handler(ipmi_domain_t *domain, int conn, void *cb_data)
00044 {
00045     ipmi_cmd_info_t *cmd_info = cb_data;
00046     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00047     char            conn_name[IPMI_DOMAIN_NAME_LEN+20];
00048     int             p;
00049 
00050     if (cmdlang->err)
00051         return;
00052 
00053     p = ipmi_domain_get_name(domain, conn_name, sizeof(conn_name));
00054     snprintf(conn_name+p, sizeof(conn_name)-p, ".%d", conn);
00055     ipmi_cmdlang_out(cmd_info, "Name", conn_name);
00056 }
00057 
00058 static void
00059 con_list(ipmi_domain_t *domain, void *cb_data)
00060 {
00061     ipmi_cmd_info_t *cmd_info = cb_data;
00062     char             domain_name[IPMI_DOMAIN_NAME_LEN];
00063 
00064     ipmi_domain_get_name(domain, domain_name, sizeof(domain_name));
00065     ipmi_cmdlang_out(cmd_info, "Domain", NULL);
00066     ipmi_cmdlang_down(cmd_info);
00067     ipmi_cmdlang_out(cmd_info, "Name", domain_name);
00068     ipmi_cmdlang_out(cmd_info, "Connections", NULL);
00069     ipmi_cmdlang_down(cmd_info);
00070     ipmi_domain_iterate_connections(domain, con_list_handler, cb_data);
00071     ipmi_cmdlang_up(cmd_info);
00072     ipmi_cmdlang_up(cmd_info);
00073 }
00074 
00075 static void
00076 con_info(ipmi_domain_t *domain, int conn, void *cb_data)
00077 {
00078     ipmi_cmd_info_t *cmd_info = cb_data;
00079     char            conn_name[IPMI_DOMAIN_NAME_LEN+20];
00080     int             p;
00081     int             rv;
00082     unsigned int    val;
00083     unsigned int    num;
00084     unsigned int    port;
00085 
00086     rv = ipmi_domain_is_connection_active(domain, conn, &val);
00087     if (rv)
00088         return;
00089 
00090     p = ipmi_domain_get_name(domain, conn_name, sizeof(conn_name));
00091     snprintf(conn_name+p, sizeof(conn_name)-p, ".%d", conn);
00092 
00093     ipmi_cmdlang_out(cmd_info, "Connection", NULL);
00094     ipmi_cmdlang_down(cmd_info);
00095     ipmi_cmdlang_out(cmd_info, "Name", conn_name);
00096     ipmi_cmdlang_out_bool(cmd_info, "Active", val);
00097     rv = ipmi_domain_is_connection_up(domain, conn, &val);
00098     if (!rv)
00099         ipmi_cmdlang_out_bool(cmd_info, "Up", val);
00100     rv = ipmi_domain_num_connection_ports(domain, conn, &num);
00101     if (!rv) {
00102         for (port=0; port<num; port++) {
00103             rv = ipmi_domain_is_connection_port_up(domain,
00104                                                    conn,
00105                                                    port,
00106                                                    &val);
00107             if (!rv) {
00108                 ipmi_cmdlang_out(cmd_info, "Port", NULL);
00109                 ipmi_cmdlang_down(cmd_info);
00110                 ipmi_cmdlang_out_int(cmd_info, "Number", port);
00111                 ipmi_cmdlang_out_bool(cmd_info, "Up", val);
00112                 ipmi_cmdlang_up(cmd_info);
00113             }
00114         }
00115     }
00116     ipmi_cmdlang_up(cmd_info);
00117 }
00118 
00119 static void
00120 con_activate(ipmi_domain_t *domain, int conn, void *cb_data)
00121 {
00122     ipmi_cmd_info_t *cmd_info = cb_data;
00123     ipmi_cmdlang_t *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00124     int             rv;
00125     char            conn_name[IPMI_DOMAIN_NAME_LEN+20];
00126     int             p;
00127 
00128     rv = ipmi_domain_activate_connection(domain, conn);
00129     if (rv) {
00130         cmdlang->errstr = "Unable to activate connection";
00131         cmdlang->err = rv;
00132         ipmi_domain_get_name(domain, cmdlang->objstr,
00133                              cmdlang->objstr_len);
00134         cmdlang->location = "cmd_conn.c(con_activate)";
00135     }
00136 
00137     p = ipmi_domain_get_name(domain, conn_name, sizeof(conn_name));
00138     snprintf(conn_name+p, sizeof(conn_name)-p, ".%d", conn);
00139     ipmi_cmdlang_out(cmd_info, "Connection activated", conn_name);
00140 }
00141 
00142 static ipmi_cmdlang_cmd_t *conn_cmds;
00143 
00144 static ipmi_cmdlang_init_t cmds_conn[] =
00145 {
00146     { "con", NULL,
00147       "- Commands dealing with connections",
00148       NULL, NULL, &conn_cmds},
00149     { "list", &conn_cmds,
00150       "<domain> - List all the connection in the domain",
00151       ipmi_cmdlang_domain_handler, con_list,  NULL },
00152     { "info", &conn_cmds,
00153       "<connection> - Dump information about a connection",
00154       ipmi_cmdlang_connection_handler, con_info, NULL },
00155     { "activate", &conn_cmds,
00156       "<connection> - Dump information about a connection",
00157       ipmi_cmdlang_connection_handler, con_activate, NULL },
00158 };
00159 #define CMDS_CONN_LEN (sizeof(cmds_conn)/sizeof(ipmi_cmdlang_init_t))
00160 
00161 int
00162 ipmi_cmdlang_con_init(os_handler_t *os_hnd)
00163 {
00164     return ipmi_cmdlang_reg_table(cmds_conn, CMDS_CONN_LEN);
00165 }

© sourcejam.com 2005-2008