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

cmd_entity.c

Go to the documentation of this file.
00001 /*
00002  * cmd_entity.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 <OpenIPMI/ipmiif.h>
00039 #include <OpenIPMI/ipmi_cmdlang.h>
00040 #include <OpenIPMI/ipmi_fru.h>
00041 
00042 /* Internal includes, do not use in your programs */
00043 #include <OpenIPMI/internal/ipmi_malloc.h>
00044 
00045 /* Don't pollute the namespace iwth ipmi_fru_t. */
00046 void ipmi_cmdlang_dump_fru_info(ipmi_cmd_info_t *cmd_info, ipmi_fru_t *fru);
00047 
00048 void ipmi_cmdlang_sensor_change(enum ipmi_update_e op,
00049                                 ipmi_entity_t      *entity,
00050                                 ipmi_sensor_t      *sensor,
00051                                 void               *cb_data);
00052 void ipmi_cmdlang_control_change(enum ipmi_update_e op,
00053                                  ipmi_entity_t      *entity,
00054                                  ipmi_control_t      *control,
00055                                  void               *cb_data);
00056 
00057 static void
00058 entity_iterate_handler(ipmi_entity_t *entity, ipmi_entity_t *parent,
00059                        void *cb_data)
00060 {
00061     ipmi_cmd_info_t *cmd_info = cb_data;
00062     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00063     char            entity_name[IPMI_ENTITY_NAME_LEN];
00064 
00065     if (cmdlang->err)
00066         return;
00067 
00068     ipmi_entity_get_name(parent, entity_name, sizeof(entity_name));
00069 
00070     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00071 }
00072 
00073 static void
00074 entity_child_handler(ipmi_entity_t *parent, ipmi_entity_t *entity,
00075                      void *cb_data)
00076 {
00077     ipmi_cmd_info_t *cmd_info = cb_data;
00078     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00079     char            entity_name[IPMI_ENTITY_NAME_LEN];
00080 
00081     if (cmdlang->err)
00082         return;
00083 
00084     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00085 
00086     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00087     if (ipmi_entity_get_is_parent(entity)) {
00088         ipmi_cmdlang_down(cmd_info);
00089         ipmi_entity_iterate_children(entity, entity_child_handler, cmd_info);
00090         ipmi_cmdlang_up(cmd_info);
00091     }
00092 }
00093 
00094 static void
00095 entity_tree_handler(ipmi_entity_t *entity, void *cb_data)
00096 {
00097     ipmi_cmd_info_t *cmd_info = cb_data;
00098     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00099     char            entity_name[IPMI_ENTITY_NAME_LEN];
00100 
00101     if (cmdlang->err)
00102         return;
00103 
00104     if (ipmi_entity_get_is_child(entity))
00105         return;
00106 
00107     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00108 
00109     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00110     if (ipmi_entity_get_is_parent(entity)) {
00111         ipmi_cmdlang_down(cmd_info);
00112         ipmi_entity_iterate_children(entity, entity_child_handler, cmd_info);
00113         ipmi_cmdlang_up(cmd_info);
00114     }
00115 }
00116 
00117 static void
00118 entity_tree(ipmi_domain_t *domain, void *cb_data)
00119 {
00120     ipmi_cmd_info_t *cmd_info = cb_data;
00121     char             domain_name[IPMI_DOMAIN_NAME_LEN];
00122 
00123     ipmi_domain_get_name(domain, domain_name, sizeof(domain_name));
00124     ipmi_cmdlang_out(cmd_info, "Domain", NULL);
00125     ipmi_cmdlang_down(cmd_info);
00126     ipmi_cmdlang_out(cmd_info, "Name", domain_name);
00127     ipmi_cmdlang_out(cmd_info, "Entities", NULL);
00128     ipmi_cmdlang_down(cmd_info);
00129     ipmi_domain_iterate_entities(domain, entity_tree_handler, cmd_info);
00130     ipmi_cmdlang_up(cmd_info);
00131     ipmi_cmdlang_up(cmd_info);
00132 }
00133 
00134 static void
00135 entity_list_handler(ipmi_entity_t *entity, void *cb_data)
00136 {
00137     ipmi_cmd_info_t *cmd_info = cb_data;
00138     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00139     char            entity_name[IPMI_ENTITY_NAME_LEN];
00140 
00141     if (cmdlang->err)
00142         return;
00143 
00144     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00145 
00146     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00147 }
00148 
00149 static void
00150 entity_list(ipmi_domain_t *domain, void *cb_data)
00151 {
00152     ipmi_cmd_info_t *cmd_info = cb_data;
00153     char             domain_name[IPMI_DOMAIN_NAME_LEN];
00154 
00155     ipmi_domain_get_name(domain, domain_name, sizeof(domain_name));
00156     ipmi_cmdlang_out(cmd_info, "Domain", NULL);
00157     ipmi_cmdlang_down(cmd_info);
00158     ipmi_cmdlang_out(cmd_info, "Name", domain_name);
00159     ipmi_cmdlang_out(cmd_info, "Entities", NULL);
00160     ipmi_cmdlang_down(cmd_info);
00161     ipmi_domain_iterate_entities(domain, entity_list_handler, cmd_info);
00162     ipmi_cmdlang_up(cmd_info);
00163     ipmi_cmdlang_up(cmd_info);
00164 }
00165 
00166 static void
00167 entity_dump(ipmi_entity_t *entity, ipmi_cmd_info_t *cmd_info)
00168 {
00169     enum ipmi_dlr_type_e type;
00170     static char          *ent_types[] = { "unknown", "mc", "fru",
00171                                           "generic", "invalid" };
00172     int                  length;
00173     unsigned int         val;
00174 
00175     type = ipmi_entity_get_type(entity);
00176     if (type > IPMI_ENTITY_GENERIC)
00177         type = IPMI_ENTITY_GENERIC + 1;
00178     ipmi_cmdlang_out(cmd_info, "Type", ent_types[type]);
00179 
00180     ipmi_cmdlang_out_bool(cmd_info, "Present", ipmi_entity_is_present(entity));
00181     ipmi_cmdlang_out_bool(cmd_info, "Presence sensor always there",
00182                          ipmi_entity_get_presence_sensor_always_there(entity));
00183     ipmi_cmdlang_out_bool(cmd_info, "Hot swappable",
00184                           ipmi_entity_hot_swappable(entity));
00185     if (ipmi_entity_hot_swappable(entity)) {
00186         ipmi_cmdlang_out_bool(cmd_info, "Supports managed hot swap",
00187                               ipmi_entity_supports_managed_hot_swap(entity));
00188     }
00189 
00190     if (ipmi_entity_get_is_child(entity)) {
00191         ipmi_cmdlang_out(cmd_info, "Parents", NULL);
00192         ipmi_cmdlang_down(cmd_info);
00193         ipmi_entity_iterate_parents(entity, entity_iterate_handler, cmd_info);
00194         ipmi_cmdlang_up(cmd_info);
00195     }
00196     if (ipmi_entity_get_is_parent(entity)) {
00197         ipmi_cmdlang_out(cmd_info, "Children", NULL);
00198         ipmi_cmdlang_down(cmd_info);
00199         ipmi_entity_iterate_children(entity, entity_iterate_handler, cmd_info);
00200         ipmi_cmdlang_up(cmd_info);
00201     }
00202 
00203     if (ipmi_entity_get_physical_slot_num(entity, &val) == 0)
00204         ipmi_cmdlang_out_int(cmd_info, "Physical Slot", val);
00205 
00206     length = ipmi_entity_get_id_length(entity);
00207     if (length &&
00208         (ipmi_entity_get_id_type(entity) == IPMI_ASCII_STR && length > 1))
00209     {
00210         char *str = ipmi_mem_alloc(length);
00211 
00212         if (str) {
00213             length = ipmi_entity_get_id(entity, str, length);
00214             ipmi_cmdlang_out_type(cmd_info, "Id",
00215                                   ipmi_entity_get_id_type(entity),
00216                                   str, length);
00217             ipmi_mem_free(str);
00218         }
00219     }
00220     ipmi_cmdlang_out(cmd_info, "Entity ID String",
00221                      ipmi_entity_get_entity_id_string(entity));
00222 
00223     switch (type) {
00224     case IPMI_ENTITY_MC:
00225         ipmi_cmdlang_out_int(cmd_info, "Channel",
00226                              ipmi_entity_get_channel(entity));
00227         ipmi_cmdlang_out_int(cmd_info, "LUN", ipmi_entity_get_lun(entity));
00228         ipmi_cmdlang_out_hex(cmd_info, "OEM", ipmi_entity_get_oem(entity));
00229         ipmi_cmdlang_out_hex(cmd_info, "Slave Address",
00230                              ipmi_entity_get_slave_address(entity));
00231         ipmi_cmdlang_out_bool(cmd_info, "ACPI_system_power_notify_required",
00232                     ipmi_entity_get_ACPI_system_power_notify_required(entity));
00233         ipmi_cmdlang_out_bool(cmd_info, "ACPI_device_power_notify_required",
00234                     ipmi_entity_get_ACPI_device_power_notify_required(entity));
00235         ipmi_cmdlang_out_bool(cmd_info, "controller_logs_init_agent_errors",
00236                     ipmi_entity_get_controller_logs_init_agent_errors(entity));
00237         ipmi_cmdlang_out_bool(cmd_info, "log_init_agent_errors_accessing",
00238                     ipmi_entity_get_log_init_agent_errors_accessing(entity));
00239         ipmi_cmdlang_out_bool(cmd_info, "global_init",
00240                               ipmi_entity_get_global_init(entity));
00241         ipmi_cmdlang_out_bool(cmd_info, "chassis_device",
00242                               ipmi_entity_get_chassis_device(entity));
00243         ipmi_cmdlang_out_bool(cmd_info, "bridge",
00244                               ipmi_entity_get_bridge(entity));
00245         ipmi_cmdlang_out_bool(cmd_info, "IPMB_event_generator",
00246                               ipmi_entity_get_IPMB_event_generator(entity));
00247         ipmi_cmdlang_out_bool(cmd_info, "IPMB_event_receiver",
00248                               ipmi_entity_get_IPMB_event_receiver(entity));
00249         ipmi_cmdlang_out_bool(cmd_info, "FRU_inventory_device",
00250                               ipmi_entity_get_FRU_inventory_device(entity));
00251         ipmi_cmdlang_out_bool(cmd_info, "SEL_device",
00252                               ipmi_entity_get_SEL_device(entity));
00253         ipmi_cmdlang_out_bool(cmd_info, "SDR_repository_device",
00254                               ipmi_entity_get_SDR_repository_device(entity));
00255         ipmi_cmdlang_out_bool(cmd_info, "sensor_device",
00256                               ipmi_entity_get_sensor_device(entity));
00257         break;
00258 
00259     case IPMI_ENTITY_FRU:
00260         ipmi_cmdlang_out_int(cmd_info, "Channel",
00261                              ipmi_entity_get_channel(entity));
00262         ipmi_cmdlang_out_int(cmd_info, "LUN", ipmi_entity_get_lun(entity));
00263         ipmi_cmdlang_out_hex(cmd_info, "OEM", ipmi_entity_get_oem(entity));
00264         ipmi_cmdlang_out_hex(cmd_info, "access_address",
00265                          ipmi_entity_get_access_address(entity));
00266         ipmi_cmdlang_out_hex(cmd_info, "private_bus_id",
00267                          ipmi_entity_get_private_bus_id(entity));
00268         ipmi_cmdlang_out_int(cmd_info, "device_type",
00269                          ipmi_entity_get_device_type(entity));
00270         ipmi_cmdlang_out_int(cmd_info, "device_modifier",
00271                          ipmi_entity_get_device_modifier(entity));
00272         ipmi_cmdlang_out_bool(cmd_info, "is_logical_fru",
00273                          ipmi_entity_get_is_logical_fru(entity));
00274         ipmi_cmdlang_out_hex(cmd_info, "fru_device_id",
00275                          ipmi_entity_get_fru_device_id(entity));
00276         break;
00277 
00278     case IPMI_ENTITY_GENERIC:
00279         ipmi_cmdlang_out_int(cmd_info, "Channel",
00280                              ipmi_entity_get_channel(entity));
00281         ipmi_cmdlang_out_int(cmd_info, "LUN", ipmi_entity_get_lun(entity));
00282         ipmi_cmdlang_out_hex(cmd_info, "OEM", ipmi_entity_get_oem(entity));
00283         ipmi_cmdlang_out_hex(cmd_info, "access_address",
00284                          ipmi_entity_get_access_address(entity));
00285         ipmi_cmdlang_out_hex(cmd_info, "private_bus_id",
00286                          ipmi_entity_get_private_bus_id(entity));
00287         ipmi_cmdlang_out_int(cmd_info, "device_type",
00288                          ipmi_entity_get_device_type(entity));
00289         ipmi_cmdlang_out_int(cmd_info, "device_modifier",
00290                          ipmi_entity_get_device_modifier(entity));
00291         ipmi_cmdlang_out_hex(cmd_info, "slave_address",
00292                          ipmi_entity_get_slave_address(entity));
00293         ipmi_cmdlang_out_int(cmd_info, "address_span",
00294                          ipmi_entity_get_address_span(entity));
00295         break;
00296 
00297     default:
00298         break;
00299     }
00300 }
00301 
00302 static void
00303 entity_info(ipmi_entity_t *entity, void *cb_data)
00304 {
00305     ipmi_cmd_info_t *cmd_info = cb_data;
00306     char            entity_name[IPMI_ENTITY_NAME_LEN];
00307 
00308     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00309 
00310     ipmi_cmdlang_out(cmd_info, "Entity", NULL);
00311     ipmi_cmdlang_down(cmd_info);
00312     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00313     entity_dump(entity, cmd_info);
00314     ipmi_cmdlang_up(cmd_info);
00315 }
00316 
00317 static void
00318 fru_info(ipmi_entity_t *entity, void *cb_data)
00319 {
00320     ipmi_cmd_info_t *cmd_info = cb_data;
00321     ipmi_fru_t      *fru;
00322     char            entity_name[IPMI_ENTITY_NAME_LEN];
00323 
00324     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00325 
00326     ipmi_cmdlang_out(cmd_info, "Entity", NULL);
00327     ipmi_cmdlang_down(cmd_info);
00328     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00329 
00330     /* We cheat here and don't call the entity functions, but that
00331        allows us to reuse the FRU output functions.  If you are
00332        looking at this for an example DON'T DO THIS IN YOUR CODE. */
00333     fru = ipmi_entity_get_fru(entity);
00334     if (fru)
00335         ipmi_cmdlang_dump_fru_info(cmd_info, fru);
00336     ipmi_cmdlang_up(cmd_info);
00337 }
00338 
00339 static void
00340 entity_hs_get_act_time_done(ipmi_entity_t  *entity,
00341                             int            err,
00342                             ipmi_timeout_t val,
00343                             void           *cb_data)
00344 {
00345     ipmi_cmd_info_t    *cmd_info = cb_data;
00346     ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00347     char               entity_name[IPMI_ENTITY_NAME_LEN];
00348 
00349     ipmi_cmdlang_lock(cmd_info);
00350     if (err) {
00351         cmdlang->errstr = "Error reading entity hot-swap activate time";
00352         cmdlang->err = err;
00353         ipmi_entity_get_name(entity, cmdlang->objstr,
00354                              cmdlang->objstr_len);
00355         cmdlang->location = "cmd_sensor.c(entity_hs_get_act_time_done)";
00356         goto out;
00357     }
00358 
00359     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00360     ipmi_cmdlang_out(cmd_info, "Entity", NULL);
00361     ipmi_cmdlang_down(cmd_info);
00362     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00363     ipmi_cmdlang_out_timeout(cmd_info, "Auto-Activation Time", val);
00364 
00365  out:
00366     ipmi_cmdlang_unlock(cmd_info);
00367     ipmi_cmdlang_cmd_info_put(cmd_info);
00368 }
00369 
00370 static void
00371 entity_hs_get_act_time(ipmi_entity_t *entity, void *cb_data)
00372 {
00373     ipmi_cmd_info_t *cmd_info = cb_data;
00374     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00375     int             rv;
00376 
00377     ipmi_cmdlang_cmd_info_get(cmd_info);
00378     rv = ipmi_entity_get_auto_activate_time(entity,
00379                                             entity_hs_get_act_time_done,
00380                                             cmd_info);
00381     if (rv) {
00382         ipmi_cmdlang_cmd_info_put(cmd_info);
00383         cmdlang->err = rv;
00384         cmdlang->errstr = "Error getting auto activate time";
00385         ipmi_entity_get_name(entity, cmdlang->objstr,
00386                              cmdlang->objstr_len);
00387         cmdlang->location = "cmd_entity.c(entity_hs_get_act_time)";
00388     }
00389 }
00390 
00391 static void
00392 entity_hs_set_act_time_done(ipmi_entity_t  *entity,
00393                             int            err,
00394                             void           *cb_data)
00395 {
00396     ipmi_cmd_info_t    *cmd_info = cb_data;
00397     ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00398     char               entity_name[IPMI_ENTITY_NAME_LEN];
00399 
00400     ipmi_cmdlang_lock(cmd_info);
00401     if (err) {
00402         cmdlang->errstr = "Error setting entity hot-swap activate time";
00403         cmdlang->err = err;
00404         ipmi_entity_get_name(entity, cmdlang->objstr,
00405                              cmdlang->objstr_len);
00406         cmdlang->location = "cmd_sensor.c(entity_hs_set_act_time_done)";
00407         goto out;
00408     }
00409 
00410     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00411     ipmi_cmdlang_out(cmd_info, "Set act time", entity_name);
00412 
00413  out:
00414     ipmi_cmdlang_unlock(cmd_info);
00415     ipmi_cmdlang_cmd_info_put(cmd_info);
00416 }
00417 
00418 static void
00419 entity_hs_set_act_time(ipmi_entity_t *entity, void *cb_data)
00420 {
00421     ipmi_cmd_info_t *cmd_info = cb_data;
00422     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00423     int             rv;
00424     ipmi_timeout_t  val;
00425     int             curr_arg = ipmi_cmdlang_get_curr_arg(cmd_info);
00426     int             argc = ipmi_cmdlang_get_argc(cmd_info);
00427     char            **argv = ipmi_cmdlang_get_argv(cmd_info);
00428 
00429     if ((argc - curr_arg) < 1) {
00430         cmdlang->errstr = "Not enough parameters";
00431         cmdlang->err = EINVAL;
00432         goto out_err;
00433     }
00434 
00435     ipmi_cmdlang_get_timeout(argv[curr_arg], &val, cmd_info);
00436     if (cmdlang->err) {
00437         cmdlang->errstr = "time invalid";
00438         goto out_err;
00439     }
00440     curr_arg++;
00441 
00442     ipmi_cmdlang_cmd_info_get(cmd_info);
00443     rv = ipmi_entity_set_auto_activate_time(entity,
00444                                             val,
00445                                             entity_hs_set_act_time_done,
00446                                             cmd_info);
00447     if (rv) {
00448         ipmi_cmdlang_cmd_info_put(cmd_info);
00449         cmdlang->err = rv;
00450         cmdlang->errstr = "Error setting auto activate time";
00451         goto out_err;
00452     }
00453     return;
00454 
00455  out_err:
00456     ipmi_entity_get_name(entity, cmdlang->objstr,
00457                          cmdlang->objstr_len);
00458     cmdlang->location = "cmd_entity.c(entity_hs_set_act_time)";
00459 }
00460 
00461 static void
00462 entity_hs_get_deact_time_done(ipmi_entity_t  *entity,
00463                               int            err,
00464                               ipmi_timeout_t val,
00465                               void           *cb_data)
00466 {
00467     ipmi_cmd_info_t    *cmd_info = cb_data;
00468     ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00469     char               entity_name[IPMI_ENTITY_NAME_LEN];
00470 
00471     ipmi_cmdlang_lock(cmd_info);
00472     if (err) {
00473         cmdlang->errstr = "Error reading entity hot-swap deactivate time";
00474         cmdlang->err = err;
00475         ipmi_entity_get_name(entity, cmdlang->objstr,
00476                              cmdlang->objstr_len);
00477         cmdlang->location = "cmd_sensor.c(entity_hs_get_deact_time_done)";
00478         goto out;
00479     }
00480 
00481     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00482     ipmi_cmdlang_out(cmd_info, "Entity", NULL);
00483     ipmi_cmdlang_down(cmd_info);
00484     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00485     ipmi_cmdlang_out_timeout(cmd_info, "Auto-Deactivation Time", val);
00486 
00487  out:
00488     ipmi_cmdlang_unlock(cmd_info);
00489     ipmi_cmdlang_cmd_info_put(cmd_info);
00490 }
00491 
00492 static void
00493 entity_hs_get_deact_time(ipmi_entity_t *entity, void *cb_data)
00494 {
00495     ipmi_cmd_info_t *cmd_info = cb_data;
00496     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00497     int             rv;
00498 
00499     ipmi_cmdlang_cmd_info_get(cmd_info);
00500     rv = ipmi_entity_get_auto_deactivate_time(entity,
00501                                             entity_hs_get_deact_time_done,
00502                                             cmd_info);
00503     if (rv) {
00504         ipmi_cmdlang_cmd_info_put(cmd_info);
00505         cmdlang->err = rv;
00506         cmdlang->errstr = "Error getting auto deactivate time";
00507         ipmi_entity_get_name(entity, cmdlang->objstr,
00508                              cmdlang->objstr_len);
00509         cmdlang->location = "cmd_entity.c(entity_hs_get_deact_time)";
00510     }
00511 }
00512 
00513 static void
00514 entity_hs_set_deact_time_done(ipmi_entity_t  *entity,
00515                               int            err,
00516                               void           *cb_data)
00517 {
00518     ipmi_cmd_info_t    *cmd_info = cb_data;
00519     ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00520     char               entity_name[IPMI_ENTITY_NAME_LEN];
00521 
00522     ipmi_cmdlang_lock(cmd_info);
00523     if (err) {
00524         cmdlang->errstr = "Error setting entity hot-swap deactivate time";
00525         cmdlang->err = err;
00526         ipmi_entity_get_name(entity, cmdlang->objstr,
00527                              cmdlang->objstr_len);
00528         cmdlang->location = "cmd_sensor.c(entity_hs_set_deact_time_done)";
00529         goto out;
00530     }
00531 
00532     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00533     ipmi_cmdlang_out(cmd_info, "Set deact time", entity_name);
00534 
00535  out:
00536     ipmi_cmdlang_unlock(cmd_info);
00537     ipmi_cmdlang_cmd_info_put(cmd_info);
00538 }
00539 
00540 static void
00541 entity_hs_set_deact_time(ipmi_entity_t *entity, void *cb_data)
00542 {
00543     ipmi_cmd_info_t *cmd_info = cb_data;
00544     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00545     int             rv;
00546     ipmi_timeout_t  val;
00547     int             curr_arg = ipmi_cmdlang_get_curr_arg(cmd_info);
00548     int             argc = ipmi_cmdlang_get_argc(cmd_info);
00549     char            **argv = ipmi_cmdlang_get_argv(cmd_info);
00550 
00551     if ((argc - curr_arg) < 1) {
00552         cmdlang->errstr = "Not enough parameters";
00553         cmdlang->err = EINVAL;
00554         goto out_err;
00555     }
00556 
00557     ipmi_cmdlang_get_timeout(argv[curr_arg], &val, cmd_info);
00558     if (cmdlang->err) {
00559         cmdlang->errstr = "time invalid";
00560         goto out_err;
00561     }
00562     curr_arg++;
00563 
00564     ipmi_cmdlang_cmd_info_get(cmd_info);
00565     rv = ipmi_entity_set_auto_deactivate_time(entity,
00566                                               val,
00567                                               entity_hs_set_deact_time_done,
00568                                               cmd_info);
00569     if (rv) {
00570         ipmi_cmdlang_cmd_info_put(cmd_info);
00571         cmdlang->err = rv;
00572         cmdlang->errstr = "Error setting auto deactivate time";
00573         goto out_err;
00574     }
00575     return;
00576 
00577  out_err:
00578     ipmi_entity_get_name(entity, cmdlang->objstr,
00579                          cmdlang->objstr_len);
00580     cmdlang->location = "cmd_entity.c(entity_hs_set_deact_time)";
00581 }
00582 
00583 static void
00584 entity_hs_activation_request_done(ipmi_entity_t  *entity,
00585                                   int            err,
00586                                   void           *cb_data)
00587 {
00588     ipmi_cmd_info_t    *cmd_info = cb_data;
00589     ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00590     char               entity_name[IPMI_ENTITY_NAME_LEN];
00591 
00592     ipmi_cmdlang_lock(cmd_info);
00593     if (err) {
00594         cmdlang->errstr = "Error from entity hot-swap activation request";
00595         cmdlang->err = err;
00596         ipmi_entity_get_name(entity, cmdlang->objstr,
00597                              cmdlang->objstr_len);
00598         cmdlang->location = "cmd_sensor.c(entity_hs_activation_request_done)";
00599         goto out;
00600     }
00601 
00602     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00603     ipmi_cmdlang_out(cmd_info, "Activation requested", entity_name);
00604 
00605  out:
00606     ipmi_cmdlang_unlock(cmd_info);
00607     ipmi_cmdlang_cmd_info_put(cmd_info);
00608 }
00609 
00610 static void
00611 entity_hs_activation_request(ipmi_entity_t *entity, void *cb_data)
00612 {
00613     ipmi_cmd_info_t *cmd_info = cb_data;
00614     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00615     int             rv;
00616 
00617     ipmi_cmdlang_cmd_info_get(cmd_info);
00618     rv = ipmi_entity_set_activation_requested
00619         (entity,
00620          entity_hs_activation_request_done,
00621          cmd_info);
00622     if (rv) {
00623         ipmi_cmdlang_cmd_info_put(cmd_info);
00624         cmdlang->err = rv;
00625         cmdlang->errstr = "Error sending activation request";
00626         ipmi_entity_get_name(entity, cmdlang->objstr,
00627                              cmdlang->objstr_len);
00628         cmdlang->location = "cmd_entity.c(entity_hs_activation_request)";
00629     }
00630 }
00631 
00632 static void
00633 entity_hs_activate_done(ipmi_entity_t  *entity,
00634                                 int            err,
00635                                 void           *cb_data)
00636 {
00637     ipmi_cmd_info_t    *cmd_info = cb_data;
00638     ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00639     char               entity_name[IPMI_ENTITY_NAME_LEN];
00640 
00641     ipmi_cmdlang_lock(cmd_info);
00642     if (err) {
00643         cmdlang->errstr = "Error from entity hot-swap activate";
00644         cmdlang->err = err;
00645         ipmi_entity_get_name(entity, cmdlang->objstr,
00646                              cmdlang->objstr_len);
00647         cmdlang->location = "cmd_sensor.c(entity_hs_activate_done)";
00648         goto out;
00649     }
00650 
00651     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00652     ipmi_cmdlang_out(cmd_info, "Activated", entity_name);
00653 
00654  out:
00655     ipmi_cmdlang_unlock(cmd_info);
00656     ipmi_cmdlang_cmd_info_put(cmd_info);
00657 }
00658 
00659 static void
00660 entity_hs_activate(ipmi_entity_t *entity, void *cb_data)
00661 {
00662     ipmi_cmd_info_t *cmd_info = cb_data;
00663     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00664     int             rv;
00665 
00666     ipmi_cmdlang_cmd_info_get(cmd_info);
00667     rv = ipmi_entity_activate(entity,
00668                               entity_hs_activate_done,
00669                               cmd_info);
00670     if (rv) {
00671         ipmi_cmdlang_cmd_info_put(cmd_info);
00672         cmdlang->err = rv;
00673         cmdlang->errstr = "Error sending activate";
00674         ipmi_entity_get_name(entity, cmdlang->objstr,
00675                              cmdlang->objstr_len);
00676         cmdlang->location = "cmd_entity.c(entity_hs_activate)";
00677     }
00678 }
00679 
00680 static void
00681 entity_hs_deactivate_done(ipmi_entity_t  *entity,
00682                                 int            err,
00683                                 void           *cb_data)
00684 {
00685     ipmi_cmd_info_t    *cmd_info = cb_data;
00686     ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00687     char               entity_name[IPMI_ENTITY_NAME_LEN];
00688 
00689     ipmi_cmdlang_lock(cmd_info);
00690     if (err) {
00691         cmdlang->errstr = "Error from entity hot-swap deactivate";
00692         cmdlang->err = err;
00693         ipmi_entity_get_name(entity, cmdlang->objstr,
00694                              cmdlang->objstr_len);
00695         cmdlang->location = "cmd_sensor.c(entity_hs_deactivate_done)";
00696         goto out;
00697     }
00698 
00699     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00700     ipmi_cmdlang_out(cmd_info, "Deactivated", entity_name);
00701 
00702  out:
00703     ipmi_cmdlang_unlock(cmd_info);
00704     ipmi_cmdlang_cmd_info_put(cmd_info);
00705 }
00706 
00707 static void
00708 entity_hs_deactivate(ipmi_entity_t *entity, void *cb_data)
00709 {
00710     ipmi_cmd_info_t *cmd_info = cb_data;
00711     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00712     int             rv;
00713 
00714     ipmi_cmdlang_cmd_info_get(cmd_info);
00715     rv = ipmi_entity_deactivate(entity,
00716                                 entity_hs_deactivate_done,
00717                                 cmd_info);
00718     if (rv) {
00719         ipmi_cmdlang_cmd_info_put(cmd_info);
00720         cmdlang->err = rv;
00721         cmdlang->errstr = "Error sending deactivate";
00722         ipmi_entity_get_name(entity, cmdlang->objstr,
00723                              cmdlang->objstr_len);
00724         cmdlang->location = "cmd_entity.c(entity_hs_deactivate)";
00725     }
00726 }
00727 
00728 static void
00729 entity_hs_state_done(ipmi_entity_t             *entity,
00730                      int                       err,
00731                      enum ipmi_hot_swap_states state,
00732                      void                      *cb_data)
00733 {
00734     ipmi_cmd_info_t    *cmd_info = cb_data;
00735     ipmi_cmdlang_t     *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00736     char               entity_name[IPMI_ENTITY_NAME_LEN];
00737 
00738     ipmi_cmdlang_lock(cmd_info);
00739     if (err) {
00740         cmdlang->errstr = "Error reading hot-swap state";
00741         cmdlang->err = err;
00742         ipmi_entity_get_name(entity, cmdlang->objstr,
00743                              cmdlang->objstr_len);
00744         cmdlang->location = "cmd_sensor.c(entity_hs_state_done)";
00745         goto out;
00746     }
00747 
00748     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00749     ipmi_cmdlang_out(cmd_info, "Entity", NULL);
00750     ipmi_cmdlang_down(cmd_info);
00751     ipmi_cmdlang_out(cmd_info, "Name", entity_name);
00752     ipmi_cmdlang_out(cmd_info, "State", ipmi_hot_swap_state_name(state));
00753 
00754  out:
00755     ipmi_cmdlang_unlock(cmd_info);
00756     ipmi_cmdlang_cmd_info_put(cmd_info);
00757 }
00758 
00759 static void
00760 entity_hs_state(ipmi_entity_t *entity, void *cb_data)
00761 {
00762     ipmi_cmd_info_t *cmd_info = cb_data;
00763     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00764     int             rv;
00765 
00766     ipmi_cmdlang_cmd_info_get(cmd_info);
00767     rv = ipmi_entity_get_hot_swap_state(entity,
00768                                         entity_hs_state_done,
00769                                         cmd_info);
00770     if (rv) {
00771         ipmi_cmdlang_cmd_info_put(cmd_info);
00772         cmdlang->err = rv;
00773         cmdlang->errstr = "Error getting hot-swap state";
00774         ipmi_entity_get_name(entity, cmdlang->objstr,
00775                              cmdlang->objstr_len);
00776         cmdlang->location = "cmd_entity.c(entity_hs_get_state)";
00777     }
00778 }
00779 
00780 static void
00781 entity_hs_check(ipmi_entity_t *entity, void *cb_data)
00782 {
00783     ipmi_cmd_info_t *cmd_info = cb_data;
00784     ipmi_cmdlang_t  *cmdlang = ipmi_cmdinfo_get_cmdlang(cmd_info);
00785     int             rv;
00786     char            entity_name[IPMI_ENTITY_NAME_LEN];
00787 
00788     rv = ipmi_entity_check_hot_swap_state(entity);
00789     if (rv) {
00790         cmdlang->err = rv;
00791         cmdlang->errstr = "Error checking hot-swap state";
00792         ipmi_entity_get_name(entity, cmdlang->objstr,
00793                              cmdlang->objstr_len);
00794         cmdlang->location = "cmd_entity.c(entity_hs_check)";
00795     } else {
00796       ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00797       ipmi_cmdlang_out(cmd_info, "Check started", entity_name);
00798     }
00799 }
00800 
00801 
00802 void fru_change(enum ipmi_update_e op,
00803                 ipmi_entity_t      *entity,
00804                 void               *cb_data)
00805 {
00806     char            *errstr;
00807     int             rv;
00808     ipmi_cmd_info_t *evi;
00809     ipmi_fru_t      *fru;
00810     char            entity_name[IPMI_ENTITY_NAME_LEN];
00811 
00812     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00813 
00814     evi = ipmi_cmdlang_alloc_event_info();
00815     if (!evi) {
00816         rv = ENOMEM;
00817         errstr = "Out of memory";
00818         goto out_err;
00819     }
00820 
00821     ipmi_cmdlang_out(evi, "Object Type", "Entity FRU");
00822     ipmi_cmdlang_out(evi, "Name", entity_name);
00823 
00824     switch (op) {
00825     case IPMI_ADDED:
00826         ipmi_cmdlang_out(evi, "Operation", "Add");
00827         if (ipmi_cmdlang_get_evinfo()) {
00828             ipmi_cmdlang_down(evi);
00829             fru = ipmi_entity_get_fru(entity);
00830             if (fru)
00831                 ipmi_cmdlang_dump_fru_info(evi, fru);
00832             ipmi_cmdlang_up(evi);
00833         }
00834         break;
00835 
00836     case IPMI_DELETED:
00837         ipmi_cmdlang_out(evi, "Operation", "Delete");
00838         break;
00839 
00840     case IPMI_CHANGED:
00841         ipmi_cmdlang_out(evi, "Operation", "Change");
00842         if (ipmi_cmdlang_get_evinfo()) {
00843             ipmi_cmdlang_down(evi);
00844             fru = ipmi_entity_get_fru(entity);
00845             if (fru)
00846                 ipmi_cmdlang_dump_fru_info(evi, fru);
00847             ipmi_cmdlang_up(evi);
00848         }
00849         break;
00850     }
00851 
00852     ipmi_cmdlang_cmd_info_put(evi);
00853     return;
00854 
00855  out_err:
00856     ipmi_cmdlang_global_err(entity_name,
00857                             "cmd_entity.c(fru_change)",
00858                             errstr, rv);
00859     if (evi)
00860         ipmi_cmdlang_cmd_info_put(evi);
00861 }
00862 
00863 static int
00864 presence_change(ipmi_entity_t *entity,
00865                 int           present,
00866                 void          *cb_data,
00867                 ipmi_event_t  *event)
00868 {
00869     char            *errstr;
00870     int             rv;
00871     ipmi_cmd_info_t *evi;
00872     char            entity_name[IPMI_ENTITY_NAME_LEN];
00873 
00874     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00875 
00876     evi = ipmi_cmdlang_alloc_event_info();
00877     if (!evi) {
00878         rv = ENOMEM;
00879         errstr = "Out of memory";
00880         goto out_err;
00881     }
00882 
00883     ipmi_cmdlang_out(evi, "Object Type", "Entity");
00884     ipmi_cmdlang_out(evi, "Name", entity_name);
00885     ipmi_cmdlang_out(evi, "Operation", "Presence Change");
00886     ipmi_cmdlang_out_bool(evi, "Present", present);
00887 
00888     if (event) {
00889         ipmi_cmdlang_out(evi, "Event", NULL);
00890         ipmi_cmdlang_down(evi);
00891         ipmi_cmdlang_event_out(event, evi);
00892         ipmi_cmdlang_up(evi);
00893     }
00894 
00895     ipmi_cmdlang_cmd_info_put(evi);
00896     return IPMI_EVENT_NOT_HANDLED;
00897 
00898  out_err:
00899     ipmi_cmdlang_global_err(entity_name,
00900                             "cmd_entity.c(presence_change)",
00901                             errstr, rv);
00902     if (evi)
00903         ipmi_cmdlang_cmd_info_put(evi);
00904 
00905     return IPMI_EVENT_NOT_HANDLED;
00906 }
00907 
00908 static int
00909 entity_hot_swap(ipmi_entity_t             *entity,
00910                 enum ipmi_hot_swap_states last_state,
00911                 enum ipmi_hot_swap_states curr_state,
00912                 void                      *cb_data,
00913                 ipmi_event_t              *event)
00914 {
00915     char            *errstr;
00916     int             rv;
00917     ipmi_cmd_info_t *evi;
00918     char            entity_name[IPMI_ENTITY_NAME_LEN];
00919 
00920     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00921 
00922     evi = ipmi_cmdlang_alloc_event_info();
00923     if (!evi) {
00924         rv = ENOMEM;
00925         errstr = "Out of memory";
00926         goto out_err;
00927     }
00928 
00929     ipmi_cmdlang_out(evi, "Object Type", "Entity");
00930     ipmi_cmdlang_out(evi, "Name", entity_name);
00931     ipmi_cmdlang_out(evi, "Operation", "Hot-Swap Change");
00932     ipmi_cmdlang_out(evi, "Last State", 
00933                      ipmi_hot_swap_state_name(last_state));
00934     ipmi_cmdlang_out(evi, "State", ipmi_hot_swap_state_name(curr_state));
00935 
00936     if (event) {
00937         ipmi_cmdlang_out(evi, "Event", NULL);
00938         ipmi_cmdlang_down(evi);
00939         ipmi_cmdlang_event_out(event, evi);
00940         ipmi_cmdlang_up(evi);
00941     }
00942 
00943     ipmi_cmdlang_cmd_info_put(evi);
00944     return IPMI_EVENT_NOT_HANDLED;
00945 
00946  out_err:
00947     ipmi_cmdlang_global_err(entity_name,
00948                             "cmd_entity.c(entity_hot_swap)",
00949                             errstr, rv);
00950     if (evi)
00951         ipmi_cmdlang_cmd_info_put(evi);
00952 
00953     return IPMI_EVENT_NOT_HANDLED;
00954 }
00955 
00956 void
00957 ipmi_cmdlang_entity_change(enum ipmi_update_e op,
00958                            ipmi_domain_t      *domain,
00959                            ipmi_entity_t      *entity,
00960                            void               *cb_data)
00961 {
00962     char            *errstr;
00963     int             rv;
00964     ipmi_cmd_info_t *evi;
00965     char            entity_name[IPMI_ENTITY_NAME_LEN];
00966 
00967     ipmi_entity_get_name(entity, entity_name, sizeof(entity_name));
00968 
00969     evi = ipmi_cmdlang_alloc_event_info();
00970     if (!evi) {
00971         rv = ENOMEM;
00972         errstr = "Out of memory";
00973         goto out_err;
00974     }
00975 
00976     ipmi_cmdlang_out(evi, "Object Type", "Entity");
00977     ipmi_cmdlang_out(evi, "Name", entity_name);
00978 
00979     switch (op) {
00980     case IPMI_ADDED:
00981         ipmi_cmdlang_out(evi, "Operation", "Add");
00982         if (ipmi_cmdlang_get_evinfo())
00983             entity_dump(entity, evi);
00984 
00985         rv = ipmi_entity_add_sensor_update_handler(entity,
00986                                                    ipmi_cmdlang_sensor_change,
00987                                                    entity);
00988         if (rv) {
00989             errstr = "ipmi_entity_add_sensor_update_handler";
00990             goto out_err;
00991         }
00992         rv = ipmi_entity_add_fru_update_handler(entity,
00993                                                 fru_change,
00994                                                 entity);
00995         if (rv) {
00996             errstr = "ipmi_entity_add_control_fru_handler";
00997             goto out_err;
00998         }
00999         rv = ipmi_entity_add_presence_handler(entity,
01000                                               presence_change,
01001                                               NULL);
01002         if (rv) {
01003             errstr = "ipmi_entity_add_presence_handler";
01004             goto out_err;
01005         }
01006         rv = ipmi_entity_add_control_update_handler
01007             (entity,
01008              ipmi_cmdlang_control_change,
01009              entity);
01010         if (rv) {
01011             errstr = "ipmi_entity_add_control_update_handler";
01012             goto out_err;
01013         }
01014         rv = ipmi_entity_add_hot_swap_handler(entity,
01015                                               entity_hot_swap,
01016                                               NULL);
01017         if (rv) {
01018             errstr = "ipmi_entity_add_hot_swap_handler";
01019             goto out_err;
01020         }
01021         break;
01022 
01023         case IPMI_DELETED:
01024             ipmi_cmdlang_out(evi, "Operation", "Delete");
01025             break;
01026 
01027         case IPMI_CHANGED:
01028             ipmi_cmdlang_out(evi, "Operation", "Change");
01029             if (ipmi_cmdlang_get_evinfo())
01030                 entity_dump(entity, evi);
01031             break;
01032     }
01033 
01034     ipmi_cmdlang_cmd_info_put(evi);
01035     return;
01036 
01037  out_err:
01038     ipmi_cmdlang_global_err(entity_name,
01039                             "cmd_entity.c(ipmi_cmdlang_entity_change)",
01040                             errstr, rv);
01041     if (evi)
01042         ipmi_cmdlang_cmd_info_put(evi);
01043 }
01044 
01045 static ipmi_cmdlang_cmd_t *entity_cmds, *hs_cmds;
01046 
01047 static ipmi_cmdlang_init_t cmds_entity[] =
01048 {
01049     { "entity", NULL,
01050       "- Commands dealing with entities",
01051       NULL, NULL, &entity_cmds },
01052     { "list", &entity_cmds,
01053       "- List all the entities in the system",
01054       ipmi_cmdlang_domain_handler, entity_list, NULL },
01055     { "tree", &entity_cmds,
01056       "- List all the entities in the system in their tree structure",
01057       ipmi_cmdlang_domain_handler, entity_tree, NULL },
01058     { "info", &entity_cmds,
01059       "<entity> - Dump information about an entity",
01060       ipmi_cmdlang_entity_handler, entity_info, NULL },
01061     { "fru", &entity_cmds,
01062       "<entity> - Dump FRU information about an entity",
01063       ipmi_cmdlang_entity_handler, fru_info, NULL },
01064     { "hs", &entity_cmds,
01065       "- Commands dealing with hot-swap",
01066       NULL, NULL, &hs_cmds },
01067     { "get_act_time", &hs_cmds,
01068       "<entity> - Get the hot-swap auto-activate time",
01069       ipmi_cmdlang_entity_handler, entity_hs_get_act_time, NULL },
01070     { "set_act_time", &hs_cmds,
01071       "<entity> - Set the hot-swap auto-activate time",
01072       ipmi_cmdlang_entity_handler, entity_hs_set_act_time, NULL },
01073     { "get_deact_time", &hs_cmds,
01074       "<entity> - Get the hot-swap auto-deactivate time",
01075       ipmi_cmdlang_entity_handler, entity_hs_get_deact_time, NULL },
01076     { "set_deact_time", &hs_cmds,
01077       "<entity> - Set the hot-swap auto-deactivate time",
01078       ipmi_cmdlang_entity_handler, entity_hs_set_deact_time, NULL },
01079     { "activation_request", &hs_cmds,
01080       "<entity> Act like a user requested an"
01081       " activation of the entity.  This is generally equivalent to"
01082       " closing the handle latch or something like that.",
01083       ipmi_cmdlang_entity_handler, entity_hs_activation_request, NULL },
01084     { "activate", &hs_cmds,
01085       "<entity> - activate the given entity",
01086       ipmi_cmdlang_entity_handler, entity_hs_activate, NULL },
01087     { "deactivate", &hs_cmds,
01088       "<entity> - deactivate the given entity",
01089       ipmi_cmdlang_entity_handler, entity_hs_deactivate, NULL },
01090     { "state", &hs_cmds,
01091       "<entity> - Return the current hot-swap state of the given entity",
01092       ipmi_cmdlang_entity_handler, entity_hs_state, NULL },
01093     { "check", &hs_cmds,
01094       "<entity> - Check the hot-swap state of the entity.  This will"
01095       " not return anything, but will generate an event if the state"
01096       " is wrong",
01097       ipmi_cmdlang_entity_handler, entity_hs_check, NULL },
01098 };
01099 #define CMDS_ENTITY_LEN (sizeof(cmds_entity)/sizeof(ipmi_cmdlang_init_t))
01100 
01101 int
01102 ipmi_cmdlang_entity_init(os_handler_t *os_hnd)
01103 {
01104     return ipmi_cmdlang_reg_table(cmds_entity, CMDS_ENTITY_LEN);
01105 }

© sourcejam.com 2005-2008