Ejemplo n.º 1
0
int
main (int argc, char **argv)
{
  struct ipmi_locate_arguments cmd_args;
  ipmi_locate_ctx_t ctx = NULL;

  ipmi_disable_coredump ();

  ipmi_locate_argp_parse (argc, argv, &cmd_args);

  if (!ipmi_is_root ())
    {
      fprintf (stderr, "%s: permission denied\n", argv[0]);
      exit (EXIT_FAILURE);
    }

  if (!(ctx = ipmi_locate_ctx_create ()))
    {
      fprintf (stderr, "ipmi_locate_ctx_create(): %s", strerror (errno));
      exit (EXIT_FAILURE);
    }

  dmidecode_probe_display (ctx);
  smbios_probe_display (ctx);
  acpi_probe_display (ctx);
  pci_probe_display (ctx);
  if (cmd_args.defaults)
    defaults_display (ctx);

  ipmi_locate_ctx_destroy (ctx);
  return (EXIT_SUCCESS);
}
Ejemplo n.º 2
0
int
main (int argc, char **argv)
{
  ipmi_oem_prog_data_t prog_data;
  struct ipmi_oem_arguments cmd_args;
  int hosts_count;
  int rv;

  ipmi_disable_coredump ();

  memset (&prog_data, '\0', sizeof (ipmi_oem_prog_data_t));
  prog_data.progname = argv[0];
  ipmi_oem_argp_parse (argc, argv, &cmd_args);
  prog_data.args = &cmd_args;

  /* Special case, just output list, don't do anything else */
  /* offer "help" as well as list, for those used to ipmitool */
  if (!cmd_args.oem_id
      || !strcasecmp (cmd_args.oem_id, "list")
      || !strcasecmp (cmd_args.oem_id, "help")
      || cmd_args.list)
    {
      if (_list () < 0)
	return (EXIT_FAILURE);
      return (EXIT_SUCCESS);
    }

  if ((hosts_count = pstdout_setup (&(prog_data.args->common_args.hostname),
				    &(prog_data.args->common_args))) < 0)
    return (EXIT_FAILURE);

  if (!hosts_count)
    return (EXIT_SUCCESS);

  /* We don't want caching info to output when are doing ranged output */
  if (hosts_count > 1)
    prog_data.args->common_args.quiet_cache = 1;

  if ((rv = pstdout_launch (prog_data.args->common_args.hostname,
                            _ipmi_oem,
                            &prog_data)) < 0)
    {
      fprintf (stderr,
               "pstdout_launch: %s\n",
               pstdout_strerror (pstdout_errnum));
      return (EXIT_FAILURE);
    }

  return (rv);
}
Ejemplo n.º 3
0
int
main (int argc, char **argv)
{
    ipmi_sensors_config_prog_data_t prog_data;
    struct ipmi_sensors_config_arguments cmd_args;
    int hosts_count;
    int rv;

    ipmi_disable_coredump ();

    memset (&prog_data, '\0', sizeof (ipmi_sensors_config_prog_data_t));
    prog_data.progname = argv[0];
    ipmi_sensors_config_argp_parse (argc, argv, &cmd_args);

    prog_data.args = &cmd_args;

    if ((hosts_count = pstdout_setup (&(prog_data.args->config_args.common_args.hostname),
                                      &(prog_data.args->config_args.common_args))) < 0)
        return (EXIT_FAILURE);

    if (!hosts_count)
        return (EXIT_SUCCESS);

    /* We don't want caching info to output when are doing ranged output */
    if (hosts_count > 1)
        prog_data.args->config_args.common_args.quiet_cache = 1;

    prog_data.hosts_count = hosts_count;

    if ((rv = pstdout_launch (prog_data.args->config_args.common_args.hostname,
                              _ipmi_sensors_config,
                              &prog_data)) < 0)
    {
        fprintf (stderr,
                 "pstdout_launch: %s\n",
                 pstdout_strerror (pstdout_errnum));
        return (EXIT_FAILURE);
    }

    return (rv);
}
Ejemplo n.º 4
0
int
main (int argc, char **argv)
{
  err_init (argv[0]);
  err_set_flags (ERROR_STDERR);

  ipmi_disable_coredump ();

  bmc_watchdog_argp_parse (argc, argv, &cmd_args);

  /* Early initialization.  Daemon must do all initialization in
   * daemon_init() b/c daemon_init() needs to close all formerly open
   * file descriptors.
   */
  if (!cmd_args.daemon)
    _init_bmc_watchdog ();

  if (cmd_args.set)
    _set_cmd ();
  else if (cmd_args.get)
    _get_cmd ();
  else if (cmd_args.reset)
    _reset_cmd ();
  else if (cmd_args.start)
    _start_cmd ();
  else if (cmd_args.stop)
    _stop_cmd ();
  else if (cmd_args.clear)
    _clear_cmd ();
  else if (cmd_args.daemon)
    _daemon_cmd (argv[0]);
  else
    err_exit ("internal error, command not set");

  ipmi_ctx_close (ipmi_ctx);
  ipmi_ctx_destroy (ipmi_ctx);
  closelog ();
  exit (EXIT_SUCCESS);
}
Ejemplo n.º 5
0
int
main (int argc, char *argv[])
{
  int i;

  ipmi_disable_coredump ();

  ipmipower_argp_parse (argc, argv, &cmd_args);

  /* after ipmipower_argp_parse - IPMIPOWER_ERROR/IPMIPOWER_DEBUG
   * macros used 
   */
  if (cmd_args.powercmd == IPMIPOWER_POWER_CMD_NONE)
    ipmipower_error_setup (IPMIPOWER_ERROR_STDERR | IPMIPOWER_ERROR_SYSLOG);
  else
    ipmipower_error_setup (IPMIPOWER_ERROR_STDERR);
  
  _ipmipower_setup ();

  ipmipower_powercmd_setup ();

  if (cmd_args.common_args.hostname)
    {
      unsigned int len = 0;

      if (!(ics = ipmipower_connection_array_create (cmd_args.common_args.hostname, &len)))
        {
          /* dump error outputs here, most notably invalid hostname output */
          cbuf_read_to_fd (ttyout, STDOUT_FILENO, -1);
          exit (EXIT_FAILURE);
        }

      ics_len = len;
    }

  /* If power command (i.e. --reset, --stat, etc.) is passed at
   * command line, put the power control commands in the pending
   * queue.
   */
  if (cmd_args.powercmd != IPMIPOWER_POWER_CMD_NONE)
    {
      struct ipmipower_connection_extra_arg *eanode;
      char errbuf[IPMIPOWER_OUTPUT_BUFLEN + 1];

      /* must be checked in args parsing */
      assert (cmd_args.common_args.hostname);

      cmd_args.ping_interval = 0;

      memset (errbuf, '\0', IPMIPOWER_OUTPUT_BUFLEN + 1);
      if (cmd_args.oem_power_type == IPMIPOWER_OEM_POWER_TYPE_NONE)
	{
	  if (ipmipower_power_cmd_check_privilege (cmd_args.powercmd,
						   errbuf,
						   IPMIPOWER_OUTPUT_BUFLEN) <= 0)
	    {
	      IPMIPOWER_ERROR (("%s", errbuf));
	      exit (EXIT_FAILURE);
	    }
	}
      else
	{
	  if (ipmipower_oem_power_cmd_check_support_and_privilege (cmd_args.powercmd,
								   errbuf,
								   IPMIPOWER_OUTPUT_BUFLEN) <= 0)
	    {
	      IPMIPOWER_ERROR (("%s", errbuf));
	      exit (EXIT_FAILURE);
	    }
	}

      _eliminate_nodes ();
      
      /* Because can input multiple hosts, check all args before doing
       * powercmd queue so we don't do any if any single argument is
       * invalid
       */
      if (cmd_args.oem_power_type != IPMIPOWER_OEM_POWER_TYPE_NONE)
	{
	  for (i = 0; i < ics_len; i++)
	    {
	      assert (ics[i].extra_args);

	      if (ics[i].skip)
		continue;
	      
	      eanode = ics[i].extra_args;
	      while (eanode)
		{
		  memset (errbuf, '\0', IPMIPOWER_OUTPUT_BUFLEN + 1);
		  
		  if (ipmipower_oem_power_cmd_check_extra_arg (eanode->extra_arg,
							       errbuf,
							       IPMIPOWER_OUTPUT_BUFLEN) <= 0)
		    {
		      IPMIPOWER_ERROR (("%s", errbuf));
		      exit (EXIT_FAILURE);
		    }
		  
		  eanode = eanode->next;
		}
	    }
	}

      for (i = 0; i < ics_len; i++)
        {
          if (ics[i].skip)
            continue;

	  if (cmd_args.oem_power_type != IPMIPOWER_OEM_POWER_TYPE_NONE)
	    {
	      assert (ics[i].extra_args);

	      eanode = ics[i].extra_args;
	      while (eanode)
		{
		  ipmipower_powercmd_queue (cmd_args.powercmd, &ics[i], eanode->extra_arg);
		  eanode = eanode->next;
		}
	    }
	  else
	    ipmipower_powercmd_queue (cmd_args.powercmd, &ics[i], NULL);
        }
    }

  /* immediately send out discovery messages upon startup */
  ipmipower_ping_force_discovery_sweep ();

  _poll_loop ((cmd_args.powercmd != IPMIPOWER_POWER_CMD_NONE) ? 1 : 0);

  ipmipower_powercmd_cleanup ();
  _ipmipower_cleanup ();

  /* If any error messages other than "on", "off", or "ok", then an
   * error occurred
   */
  for (i = IPMIPOWER_MSG_TYPE_ERROR_MIN; i < IPMIPOWER_MSG_TYPE_ERROR_MAX; i++)
    {
      if (output_counts[i])
	return (EXIT_FAILURE);
    }

  return (EXIT_SUCCESS);
}