mirror of
https://github.com/ipmitool/ipmitool.git
synced 2025-05-11 11:07:23 +00:00
Some of the header guard names in ipmitool duplicated with the ones in freeipmi. * ipmitool/ipmi_fru.h and freeipmi/fru/ipmi-fru.h both uses IPMI_FRU_H * ipmitool/ipmi_sdr.h and freeipmi/sdr/ipmi-sdr.h both uses IPMI_SDR_H * ipmitool/ipmi_sel.h and freeipmi/sel/ipmi-sel.h both uses IPMI_SEL_H This is problematic as including the 1st will prevent the 2nd from being included, leading to the loss of any declarations, inline definitions, or other "#includes" in the 2nd header. For example, including ipmitool/ipmi_sel.h and freeipmi/freeipmi.h fails to build. $ cat test.c #include <ipmitool/ipmi_sel.h> #include <freeipmi/freeipmi.h> $ gcc test.c -I${HOME}/src/oss/ipmitool/include In file included from /usr/include/freeipmi/freeipmi.h:90, from test.c:2: /usr/include/freeipmi/sdr/oem/ipmi-sdr-oem-intel-node-manager.h:48:44: error: unknown type name 'ipmi_sdr_ctx_t'; did you mean 'ipmi_fru_ctx_t'? 48 | int ipmi_sdr_oem_parse_intel_node_manager (ipmi_sdr_ctx_t ctx, | ^~~~~~~~~~~~~~ | ipmi_fru_ctx_t Remove header guards and use "#pragma once" instead. In this way, we don't have to do manual management to avoid name clashes. * src/plugins/lan/md5.h is left as is being an external header originally. * src/plugins/imb/imbapi.h is a convoluted header consisting of multiple header guards. Let's just add "#pragma once" and leave header guards as is for now. Signed-off-by: Bing-Hua Wang <binghuawang@ami.com>
196 lines
5.0 KiB
C
196 lines
5.0 KiB
C
/*
|
|
* Copyright (c) 2016 Pentair Technical Products. All right reserved
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* Redistribution of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* Redistribution in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* Neither the name of Pentair Technical Products or the names of
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
* PENTAIR TECHNICAL SOLUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <stdio.h>
|
|
|
|
/* Forward declarations. */
|
|
struct ipmi_cfgp;
|
|
struct ipmi_cfgp_ctx;
|
|
|
|
/*
|
|
* Action types.
|
|
*/
|
|
enum {
|
|
/* parse dumped parameter data */
|
|
CFGP_PARSE,
|
|
/* get parameter from BMC */
|
|
CFGP_GET,
|
|
/* set parameter to BMC */
|
|
CFGP_SET,
|
|
/* output parameter data in form that can be parsed back */
|
|
CFGP_SAVE,
|
|
/* print parameter in user-friendly format */
|
|
CFGP_PRINT
|
|
};
|
|
|
|
/*
|
|
* Action-specific information.
|
|
*/
|
|
struct ipmi_cfgp_action {
|
|
/* Action type. */
|
|
int type;
|
|
|
|
/* Set selector. */
|
|
int set;
|
|
|
|
/* Block selector. */
|
|
int block;
|
|
|
|
/* No error output needed. */
|
|
int quiet;
|
|
|
|
/* Number of command line arguments (only for parse action). */
|
|
int argc;
|
|
|
|
/* Command line arguments (only for parse action). */
|
|
const char **argv;
|
|
|
|
/* Output file (only for dump/print actions). */
|
|
FILE *file;
|
|
};
|
|
|
|
/*
|
|
* Access types.
|
|
*/
|
|
enum {
|
|
CFGP_RDWR,
|
|
CFGP_RDONLY,
|
|
CFGP_WRONLY,
|
|
CFGP_RESERVED
|
|
};
|
|
|
|
/*
|
|
* Configuration parameter descriptor.
|
|
*/
|
|
struct ipmi_cfgp {
|
|
/* Parameter name. */
|
|
const char *name;
|
|
|
|
/* Parameter format description. */
|
|
const char *format;
|
|
|
|
/* Various parameter traits. */
|
|
unsigned int size; /* block size */
|
|
unsigned int access:2; /* read-write/read-only/write-only */
|
|
unsigned int is_set:1; /* takes non-zero set selectors */
|
|
unsigned int first_set:1; /* 1 = 1-based set selector */
|
|
unsigned int has_blocks:1; /* takes non-zero block selectors */
|
|
unsigned int first_block:1; /* 1 = 1-based block selector */
|
|
|
|
/* Parameter-specific data. */
|
|
int specific;
|
|
};
|
|
|
|
/* Parameter callback. */
|
|
typedef int (*ipmi_cfgp_handler_t)(void *priv,
|
|
const struct ipmi_cfgp *p, const struct ipmi_cfgp_action *action,
|
|
unsigned char *data);
|
|
|
|
/*
|
|
* Parameter selector.
|
|
*/
|
|
struct ipmi_cfgp_sel {
|
|
int param;
|
|
int set;
|
|
int block;
|
|
};
|
|
|
|
/*
|
|
* Configuration parameter data.
|
|
*/
|
|
struct ipmi_cfgp_data {
|
|
struct ipmi_cfgp_data *next;
|
|
struct ipmi_cfgp_sel sel;
|
|
unsigned char data[];
|
|
};
|
|
|
|
/*
|
|
* Configuration parameter operation context.
|
|
*/
|
|
struct ipmi_cfgp_ctx {
|
|
/* Set of parameters. */
|
|
const struct ipmi_cfgp *set;
|
|
|
|
/* Descriptor count. */
|
|
int count;
|
|
|
|
/* Parameter action handler. */
|
|
ipmi_cfgp_handler_t handler;
|
|
|
|
/* ipmitool cmd name */
|
|
const char *cmdname;
|
|
|
|
/* List of parameter values. */
|
|
struct ipmi_cfgp_data *v;
|
|
|
|
/* Private data. */
|
|
void *priv;
|
|
};
|
|
|
|
/* Initialize configuration context. */
|
|
extern int ipmi_cfgp_init(struct ipmi_cfgp_ctx *ctx,
|
|
const struct ipmi_cfgp *set, unsigned int count,
|
|
const char *cmdname,
|
|
ipmi_cfgp_handler_t handler, void *priv);
|
|
|
|
/* Uninitialize context, free allocated memory. */
|
|
extern int ipmi_cfgp_uninit(struct ipmi_cfgp_ctx *ctx);
|
|
|
|
/* Print parameter usage. */
|
|
void ipmi_cfgp_usage(const struct ipmi_cfgp *set, int count, int write);
|
|
|
|
/* Parse parameter selector from command line. */
|
|
extern int ipmi_cfgp_parse_sel(struct ipmi_cfgp_ctx *ctx,
|
|
int argc, const char **argv, struct ipmi_cfgp_sel *sel);
|
|
|
|
/* Parse parameter data from command line. */
|
|
extern int ipmi_cfgp_parse_data(struct ipmi_cfgp_ctx *ctx,
|
|
const struct ipmi_cfgp_sel *sel, int argc, const char **argv);
|
|
|
|
/* Get parameter data from BMC. */
|
|
extern int ipmi_cfgp_get(struct ipmi_cfgp_ctx *ctx,
|
|
const struct ipmi_cfgp_sel *sel);
|
|
|
|
/* Set parameter data to BMC. */
|
|
extern int ipmi_cfgp_set(struct ipmi_cfgp_ctx *ctx,
|
|
const struct ipmi_cfgp_sel *sel);
|
|
|
|
/* Write parameter data to file. */
|
|
extern int ipmi_cfgp_save(struct ipmi_cfgp_ctx *ctx,
|
|
const struct ipmi_cfgp_sel *sel, FILE *file);
|
|
|
|
/* Print parameter data in user-friendly format. */
|
|
extern int ipmi_cfgp_print(struct ipmi_cfgp_ctx *ctx,
|
|
const struct ipmi_cfgp_sel *sel, FILE *file);
|