xref: /freebsd/lib/libmt/mtlib.h (revision b3e76948)
143518607SKenneth D. Merry /*-
243518607SKenneth D. Merry  * Copyright (c) 2013, 2014 Spectra Logic Corporation
343518607SKenneth D. Merry  * All rights reserved.
443518607SKenneth D. Merry  *
543518607SKenneth D. Merry  * Redistribution and use in source and binary forms, with or without
643518607SKenneth D. Merry  * modification, are permitted provided that the following conditions
743518607SKenneth D. Merry  * are met:
843518607SKenneth D. Merry  * 1. Redistributions of source code must retain the above copyright
943518607SKenneth D. Merry  *    notice, this list of conditions, and the following disclaimer,
1043518607SKenneth D. Merry  *    without modification.
1143518607SKenneth D. Merry  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1243518607SKenneth D. Merry  *    substantially similar to the "NO WARRANTY" disclaimer below
1343518607SKenneth D. Merry  *    ("Disclaimer") and any redistribution must be conditioned upon
1443518607SKenneth D. Merry  *    including a substantially similar Disclaimer requirement for further
1543518607SKenneth D. Merry  *    binary redistribution.
1643518607SKenneth D. Merry  *
1743518607SKenneth D. Merry  * NO WARRANTY
1843518607SKenneth D. Merry  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
1943518607SKenneth D. Merry  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2043518607SKenneth D. Merry  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
2143518607SKenneth D. Merry  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2243518607SKenneth D. Merry  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2343518607SKenneth D. Merry  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2443518607SKenneth D. Merry  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2543518607SKenneth D. Merry  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
2643518607SKenneth D. Merry  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
2743518607SKenneth D. Merry  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2843518607SKenneth D. Merry  * POSSIBILITY OF SUCH DAMAGES.
2943518607SKenneth D. Merry  *
3043518607SKenneth D. Merry  * Authors: Ken Merry           (Spectra Logic Corporation)
3143518607SKenneth D. Merry  */
3243518607SKenneth D. Merry 
3343518607SKenneth D. Merry #ifndef	_MTLIB_H
3443518607SKenneth D. Merry #define	_MTLIB_H
3543518607SKenneth D. Merry 
3643518607SKenneth D. Merry typedef enum {
3743518607SKenneth D. Merry 	MT_TYPE_NONE,
3843518607SKenneth D. Merry 	MT_TYPE_STRING,
3943518607SKenneth D. Merry 	MT_TYPE_INT,
4043518607SKenneth D. Merry 	MT_TYPE_UINT,
4143518607SKenneth D. Merry 	MT_TYPE_NODE
4243518607SKenneth D. Merry } mt_variable_type;
4343518607SKenneth D. Merry 
4443518607SKenneth D. Merry struct mt_status_nv {
4543518607SKenneth D. Merry 	char *name;
4643518607SKenneth D. Merry 	char *value;
4743518607SKenneth D. Merry 	STAILQ_ENTRY(mt_status_nv) links;
4843518607SKenneth D. Merry };
4943518607SKenneth D. Merry 
5043518607SKenneth D. Merry struct mt_status_entry {
5143518607SKenneth D. Merry 	char *entry_name;
5243518607SKenneth D. Merry 	char *value;
5343518607SKenneth D. Merry 	uint64_t value_unsigned;
5443518607SKenneth D. Merry 	int64_t value_signed;
5543518607SKenneth D. Merry 	char *fmt;
5643518607SKenneth D. Merry 	char *desc;
5743518607SKenneth D. Merry 	size_t size;
5843518607SKenneth D. Merry 	mt_variable_type var_type;
5943518607SKenneth D. Merry 	struct mt_status_entry *parent;
6043518607SKenneth D. Merry 	STAILQ_HEAD(, mt_status_nv) nv_list;
6143518607SKenneth D. Merry 	STAILQ_HEAD(, mt_status_entry) child_entries;
6243518607SKenneth D. Merry 	STAILQ_ENTRY(mt_status_entry) links;
6343518607SKenneth D. Merry };
6443518607SKenneth D. Merry 
6543518607SKenneth D. Merry struct mt_status_data {
6643518607SKenneth D. Merry 	int level;
6743518607SKenneth D. Merry 	struct sbuf *cur_sb[32];
6843518607SKenneth D. Merry 	struct mt_status_entry *cur_entry[32];
6943518607SKenneth D. Merry 	int error;
7043518607SKenneth D. Merry 	char error_str[128];
7143518607SKenneth D. Merry 	STAILQ_HEAD(, mt_status_entry) entries;
7243518607SKenneth D. Merry };
7343518607SKenneth D. Merry 
7443518607SKenneth D. Merry typedef enum {
7543518607SKenneth D. Merry 	MT_PF_NONE		= 0x00,
7643518607SKenneth D. Merry 	MT_PF_VERBOSE		= 0x01,
7743518607SKenneth D. Merry 	MT_PF_FULL_PATH		= 0x02,
7843518607SKenneth D. Merry 	MT_PF_INCLUDE_ROOT	= 0x04
7943518607SKenneth D. Merry } mt_print_flags;
8043518607SKenneth D. Merry 
8143518607SKenneth D. Merry struct mt_print_params {
8243518607SKenneth D. Merry 	mt_print_flags flags;
8343518607SKenneth D. Merry 	char root_name[64];
8443518607SKenneth D. Merry };
8543518607SKenneth D. Merry 
8643518607SKenneth D. Merry __BEGIN_DECLS
8743518607SKenneth D. Merry void mt_start_element(void *user_data, const char *name, const char **attr);
8843518607SKenneth D. Merry void mt_end_element(void *user_data, const char *name);
8943518607SKenneth D. Merry void mt_char_handler(void *user_data, const XML_Char *str, int len);
9043518607SKenneth D. Merry void mt_status_tree_sbuf(struct sbuf *sb, struct mt_status_entry *entry,
9143518607SKenneth D. Merry 			 int indent, void (*sbuf_func)(struct sbuf *sb,
9243518607SKenneth D. Merry 			 struct mt_status_entry *entry, void *arg), void *arg);
9343518607SKenneth D. Merry void mt_status_tree_print(struct mt_status_entry *entry, int indent,
9443518607SKenneth D. Merry 			  void (*print_func)(struct mt_status_entry *entry,
9543518607SKenneth D. Merry 			  void *arg), void *arg);
9643518607SKenneth D. Merry struct mt_status_entry *mt_entry_find(struct mt_status_entry *entry,
9743518607SKenneth D. Merry 				      char *name);
9843518607SKenneth D. Merry struct mt_status_entry *mt_status_entry_find(struct mt_status_data *status_data,
9943518607SKenneth D. Merry 					     char *name);
10043518607SKenneth D. Merry void mt_status_entry_free(struct mt_status_entry *entry);
10143518607SKenneth D. Merry void mt_status_free(struct mt_status_data *status_data);
10243518607SKenneth D. Merry void mt_entry_sbuf(struct sbuf *sb, struct mt_status_entry *entry, char *fmt);
10343518607SKenneth D. Merry void mt_param_parent_print(struct mt_status_entry *entry,
10443518607SKenneth D. Merry 			   struct mt_print_params *print_params);
10543518607SKenneth D. Merry void mt_param_parent_sbuf(struct sbuf *sb, struct mt_status_entry *entry,
10643518607SKenneth D. Merry 			  struct mt_print_params *print_params);
10743518607SKenneth D. Merry void mt_param_entry_sbuf(struct sbuf *sb, struct mt_status_entry *entry,
10843518607SKenneth D. Merry 			 void *arg);
10943518607SKenneth D. Merry void mt_param_entry_print(struct mt_status_entry *entry, void *arg);
11043518607SKenneth D. Merry int mt_protect_print(struct mt_status_data *status_data, int verbose);
11143518607SKenneth D. Merry int mt_param_list(struct mt_status_data *status_data, char *param_name,
11243518607SKenneth D. Merry 		  int quiet);
11343518607SKenneth D. Merry const char *mt_density_name(int density_num);
11443518607SKenneth D. Merry int mt_density_bp(int density_num, int bpi);
11543518607SKenneth D. Merry int mt_density_num(const char *density_name);
11643518607SKenneth D. Merry int mt_get_xml_str(int mtfd, unsigned long cmd, char **xml_str);
11743518607SKenneth D. Merry int mt_get_status(char *xml_str, struct mt_status_data *status_data);
11843518607SKenneth D. Merry __END_DECLS
11943518607SKenneth D. Merry 
12043518607SKenneth D. Merry #endif /* _MTLIB_H */
121