00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
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 }