Blame include/ipmitool/ipmi_cfgp.h

Packit Service ed0f68
/*
Packit Service ed0f68
 * Copyright (c) 2016 Pentair Technical Products. All right reserved
Packit Service ed0f68
 *
Packit Service ed0f68
 * Redistribution and use in source and binary forms, with or without
Packit Service ed0f68
 * modification, are permitted provided that the following conditions
Packit Service ed0f68
 * are met:
Packit Service ed0f68
 *
Packit Service ed0f68
 * Redistribution of source code must retain the above copyright
Packit Service ed0f68
 * notice, this list of conditions and the following disclaimer.
Packit Service ed0f68
 *
Packit Service ed0f68
 * Redistribution in binary form must reproduce the above copyright
Packit Service ed0f68
 * notice, this list of conditions and the following disclaimer in the
Packit Service ed0f68
 * documentation and/or other materials provided with the distribution.
Packit Service ed0f68
 *
Packit Service ed0f68
 * Neither the name of Pentair Technical Products or the names of
Packit Service ed0f68
 * contributors may be used to endorse or promote products derived
Packit Service ed0f68
 * from this software without specific prior written permission.
Packit Service ed0f68
 *
Packit Service ed0f68
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Packit Service ed0f68
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Packit Service ed0f68
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
Packit Service ed0f68
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
Packit Service ed0f68
 * PENTAIR TECHNICAL SOLUTIONS BE LIABLE FOR ANY DIRECT, INDIRECT,
Packit Service ed0f68
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
Packit Service ed0f68
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Packit Service ed0f68
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Packit Service ed0f68
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit Service ed0f68
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
Packit Service ed0f68
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Packit Service ed0f68
 * POSSIBILITY OF SUCH DAMAGE.
Packit Service ed0f68
 */
Packit Service ed0f68
#ifndef IPMI_CFGP_H
Packit Service ed0f68
#define IPMI_CFGP_H
Packit Service ed0f68
Packit Service ed0f68
#include <stdio.h>
Packit Service ed0f68
Packit Service ed0f68
/* Forward declarations. */
Packit Service ed0f68
struct ipmi_cfgp;
Packit Service ed0f68
struct ipmi_cfgp_ctx;
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * Action types.
Packit Service ed0f68
 */
Packit Service ed0f68
enum {
Packit Service ed0f68
	/* parse dumped parameter data */
Packit Service ed0f68
	CFGP_PARSE,
Packit Service ed0f68
	/* get parameter from BMC */
Packit Service ed0f68
	CFGP_GET,
Packit Service ed0f68
	/* set parameter to BMC */
Packit Service ed0f68
	CFGP_SET,
Packit Service ed0f68
	/* output parameter data in form that can be parsed back */
Packit Service ed0f68
	CFGP_SAVE,
Packit Service ed0f68
	/* print parameter in user-friendly format */
Packit Service ed0f68
	CFGP_PRINT
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * Action-specific information.
Packit Service ed0f68
 */
Packit Service ed0f68
struct ipmi_cfgp_action {
Packit Service ed0f68
	/* Action type. */
Packit Service ed0f68
	int type;
Packit Service ed0f68
Packit Service ed0f68
	/* Set selector. */
Packit Service ed0f68
	int set;
Packit Service ed0f68
Packit Service ed0f68
	/* Block selector. */
Packit Service ed0f68
	int block;
Packit Service ed0f68
Packit Service ed0f68
	/* No error output needed. */
Packit Service ed0f68
	int quiet;
Packit Service ed0f68
Packit Service ed0f68
	/* Number of command line arguments (only for parse action). */
Packit Service ed0f68
	int argc;
Packit Service ed0f68
Packit Service ed0f68
	/* Command line arguments (only for parse action). */
Packit Service ed0f68
	const char **argv;
Packit Service ed0f68
Packit Service ed0f68
	/* Output file (only for dump/print actions). */
Packit Service ed0f68
	FILE *file;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * Access types.
Packit Service ed0f68
 */
Packit Service ed0f68
enum {
Packit Service ed0f68
	CFGP_RDWR,
Packit Service ed0f68
	CFGP_RDONLY,
Packit Service ed0f68
	CFGP_WRONLY,
Packit Service ed0f68
	CFGP_RESERVED
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * Configuration parameter descriptor.
Packit Service ed0f68
 */
Packit Service ed0f68
struct ipmi_cfgp {
Packit Service ed0f68
	/* Parameter name. */
Packit Service ed0f68
	const char *name;
Packit Service ed0f68
Packit Service ed0f68
	/* Parameter format description. */
Packit Service ed0f68
	const char *format;
Packit Service ed0f68
Packit Service ed0f68
	/* Various parameter traits. */
Packit Service ed0f68
	unsigned int size;		/* block size */
Packit Service ed0f68
	unsigned int access:2;		/* read-write/read-only/write-only */
Packit Service ed0f68
	unsigned int is_set:1;		/* takes non-zero set selectors */
Packit Service ed0f68
	unsigned int first_set:1;	/* 1 = 1-based set selector */
Packit Service ed0f68
	unsigned int has_blocks:1;	/* takes non-zero block selectors */
Packit Service ed0f68
	unsigned int first_block:1;	/* 1 = 1-based block selector */
Packit Service ed0f68
Packit Service ed0f68
	/* Parameter-specific data. */
Packit Service ed0f68
	int specific;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
/* Parameter callback. */
Packit Service ed0f68
typedef int (*ipmi_cfgp_handler_t)(void *priv,
Packit Service ed0f68
	const struct ipmi_cfgp *p, const struct ipmi_cfgp_action *action,
Packit Service ed0f68
	unsigned char *data);
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * Parameter selector.
Packit Service ed0f68
 */
Packit Service ed0f68
struct ipmi_cfgp_sel {
Packit Service ed0f68
	int param;
Packit Service ed0f68
	int set;
Packit Service ed0f68
	int block;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * Configuration parameter data.
Packit Service ed0f68
 */
Packit Service ed0f68
struct ipmi_cfgp_data {
Packit Service ed0f68
	struct ipmi_cfgp_data *next;
Packit Service ed0f68
	struct ipmi_cfgp_sel sel;
Packit Service ed0f68
	unsigned char data[];
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
/*
Packit Service ed0f68
 * Configuration parameter operation context.
Packit Service ed0f68
 */
Packit Service ed0f68
struct ipmi_cfgp_ctx {
Packit Service ed0f68
	/* Set of parameters. */
Packit Service ed0f68
	const struct ipmi_cfgp *set;
Packit Service ed0f68
Packit Service ed0f68
	/* Descriptor count. */
Packit Service ed0f68
	int count;
Packit Service ed0f68
Packit Service ed0f68
	/* Parameter action handler. */
Packit Service ed0f68
	ipmi_cfgp_handler_t handler;
Packit Service ed0f68
Packit Service ed0f68
	/* ipmitool cmd name */
Packit Service ed0f68
	const char *cmdname;
Packit Service ed0f68
Packit Service ed0f68
	/* List of parameter values. */
Packit Service ed0f68
	struct ipmi_cfgp_data *v;
Packit Service ed0f68
Packit Service ed0f68
	/* Private data. */
Packit Service ed0f68
	void *priv;
Packit Service ed0f68
};
Packit Service ed0f68
Packit Service ed0f68
/* Initialize configuration context. */
Packit Service ed0f68
extern int ipmi_cfgp_init(struct ipmi_cfgp_ctx *ctx,
Packit Service ed0f68
		const struct ipmi_cfgp *set, unsigned int count,
Packit Service ed0f68
		const char *cmdname,
Packit Service ed0f68
		ipmi_cfgp_handler_t handler, void *priv);
Packit Service ed0f68
Packit Service ed0f68
/* Uninitialize context, free allocated memory. */
Packit Service ed0f68
extern int ipmi_cfgp_uninit(struct ipmi_cfgp_ctx *ctx);
Packit Service ed0f68
Packit Service ed0f68
/* Print parameter usage. */
Packit Service ed0f68
void ipmi_cfgp_usage(const struct ipmi_cfgp *set, int count, int write);
Packit Service ed0f68
Packit Service ed0f68
/* Parse parameter selector from command line. */
Packit Service ed0f68
extern int ipmi_cfgp_parse_sel(struct ipmi_cfgp_ctx *ctx,
Packit Service ed0f68
		int argc, const char **argv, struct ipmi_cfgp_sel *sel);
Packit Service ed0f68
Packit Service ed0f68
/* Parse parameter data from command line. */
Packit Service ed0f68
extern int ipmi_cfgp_parse_data(struct ipmi_cfgp_ctx *ctx,
Packit Service ed0f68
		const struct ipmi_cfgp_sel *sel, int argc, const char **argv);
Packit Service ed0f68
Packit Service ed0f68
/* Get parameter data from BMC. */
Packit Service ed0f68
extern int ipmi_cfgp_get(struct ipmi_cfgp_ctx *ctx,
Packit Service ed0f68
		const struct ipmi_cfgp_sel *sel);
Packit Service ed0f68
Packit Service ed0f68
/* Set parameter data to BMC. */
Packit Service ed0f68
extern int ipmi_cfgp_set(struct ipmi_cfgp_ctx *ctx,
Packit Service ed0f68
		const struct ipmi_cfgp_sel *sel);
Packit Service ed0f68
Packit Service ed0f68
/* Write parameter data to file. */
Packit Service ed0f68
extern int ipmi_cfgp_save(struct ipmi_cfgp_ctx *ctx,
Packit Service ed0f68
		const struct ipmi_cfgp_sel *sel, FILE *file);
Packit Service ed0f68
Packit Service ed0f68
/* Print parameter data in user-friendly format. */
Packit Service ed0f68
extern int ipmi_cfgp_print(struct ipmi_cfgp_ctx *ctx,
Packit Service ed0f68
		const struct ipmi_cfgp_sel *sel, FILE *file);
Packit Service ed0f68
Packit Service ed0f68
#endif /* IPMI_CFGP_H */