#ifndef _PRINT_H #define _PRINT_H #include "dm-generic.h" #define PRINT_PATH_LONG "%w %i %d %D %p %t %T %s %o" #define PRINT_PATH_INDENT "%i %d %D %t %T %o" #define PRINT_PATH_CHECKER "%i %d %D %p %t %T %o %C" #define PRINT_MAP_STATUS "%n %F %Q %N %t %r" #define PRINT_MAP_STATS "%n %0 %1 %2 %3 %4" #define PRINT_MAP_NAMES "%n %d %w" #define PRINT_MAP_PROPS "size=%S features='%f' hwhandler='%h' wp=%r" #define PRINT_PG_INDENT "policy='%s' prio=%p status=%t" #define PRINT_JSON_MULTIPLIER 5 #define PRINT_JSON_MAJOR_VERSION 0 #define PRINT_JSON_MINOR_VERSION 1 #define PRINT_JSON_START_VERSION " \"major_version\": %d,\n" \ " \"minor_version\": %d,\n" #define PRINT_JSON_START_ELEM "{\n" #define PRINT_JSON_START_MAP " \"map\":" #define PRINT_JSON_START_MAPS "\"maps\": [" #define PRINT_JSON_START_PATHS "\"paths\": [" #define PRINT_JSON_START_GROUPS "\"path_groups\": [" #define PRINT_JSON_END_ELEM "}," #define PRINT_JSON_END_LAST_ELEM "}" #define PRINT_JSON_END_LAST "}\n" #define PRINT_JSON_END_ARRAY "]\n" #define PRINT_JSON_INDENT " " #define PRINT_JSON_MAP "{\n" \ " \"name\" : \"%n\",\n" \ " \"uuid\" : \"%w\",\n" \ " \"sysfs\" : \"%d\",\n" \ " \"failback\" : \"%F\",\n" \ " \"queueing\" : \"%Q\",\n" \ " \"paths\" : %N,\n" \ " \"write_prot\" : \"%r\",\n" \ " \"dm_st\" : \"%t\",\n" \ " \"features\" : \"%f\",\n" \ " \"hwhandler\" : \"%h\",\n" \ " \"action\" : \"%A\",\n" \ " \"path_faults\" : %0,\n" \ " \"vend\" : \"%v\",\n" \ " \"prod\" : \"%p\",\n" \ " \"rev\" : \"%e\",\n" \ " \"switch_grp\" : %1,\n" \ " \"map_loads\" : %2,\n" \ " \"total_q_time\" : %3,\n" \ " \"q_timeouts\" : %4," #define PRINT_JSON_GROUP "{\n" \ " \"selector\" : \"%s\",\n" \ " \"pri\" : %p,\n" \ " \"dm_st\" : \"%t\",\n" \ " \"marginal_st\" : \"%M\"," #define PRINT_JSON_GROUP_NUM " \"group\" : %d,\n" #define PRINT_JSON_PATH "{\n" \ " \"dev\" : \"%d\",\n"\ " \"dev_t\" : \"%D\",\n" \ " \"dm_st\" : \"%t\",\n" \ " \"dev_st\" : \"%o\",\n" \ " \"chk_st\" : \"%T\",\n" \ " \"checker\" : \"%c\",\n" \ " \"pri\" : %p,\n" \ " \"host_wwnn\" : \"%N\",\n" \ " \"target_wwnn\" : \"%n\",\n" \ " \"host_wwpn\" : \"%R\",\n" \ " \"target_wwpn\" : \"%r\",\n" \ " \"host_adapter\" : \"%a\",\n" \ " \"marginal_st\" : \"%M\"" #define MAX_LINE_LEN 80 #define MAX_LINES 64 #define MAX_FIELD_LEN 128 #define PROGRESS_LEN 10 struct path_data { char wildcard; char * header; unsigned int width; int (*snprint)(char * buff, size_t len, const struct path * pp); }; struct multipath_data { char wildcard; char * header; unsigned int width; int (*snprint)(char * buff, size_t len, const struct multipath * mpp); }; struct pathgroup_data { char wildcard; char * header; unsigned int width; int (*snprint)(char * buff, size_t len, const struct pathgroup * pgp); }; enum layout_reset { LAYOUT_RESET_NOT, LAYOUT_RESET_ZERO, LAYOUT_RESET_HEADER, }; void _get_path_layout (const struct _vector *gpvec, enum layout_reset); void get_path_layout (vector pathvec, int header); void _get_multipath_layout (const struct _vector *gmvec, enum layout_reset); void get_multipath_layout (vector mpvec, int header); int snprint_path_header (char *, int, const char *); int snprint_multipath_header (char *, int, const char *); int _snprint_path (const struct gen_path *, char *, int, const char *, int); #define snprint_path(buf, len, fmt, pp, v) \ _snprint_path(dm_path_to_gen(pp), buf, len, fmt, v) int _snprint_multipath (const struct gen_multipath *, char *, int, const char *, int); #define snprint_multipath(buf, len, fmt, mp, v) \ _snprint_multipath(dm_multipath_to_gen(mp), buf, len, fmt, v) int _snprint_multipath_topology (const struct gen_multipath *, char *, int, int verbosity); #define snprint_multipath_topology(buf, len, mpp, v) \ _snprint_multipath_topology (dm_multipath_to_gen(mpp), buf, len, v) int snprint_multipath_topology_json (char * buff, int len, const struct vectors * vecs); char *snprint_config(const struct config *conf, int *len, const struct _vector *hwtable, const struct _vector *mpvec); int snprint_multipath_map_json (char * buff, int len, const struct multipath * mpp); int snprint_blacklist_report (struct config *, char *, int); int snprint_wildcards (char *, int); int snprint_status (char *, int, const struct vectors *); int snprint_devices (struct config *, char *, int, const struct vectors *); int snprint_path_serial (char *, size_t, const struct path *); int snprint_host_wwnn (char *, size_t, const struct path *); int snprint_host_wwpn (char *, size_t, const struct path *); int snprint_tgt_wwnn (char *, size_t, const struct path *); int snprint_tgt_wwpn (char *, size_t, const struct path *); #define PROTOCOL_BUF_SIZE sizeof("scsi:unspec") int snprint_path_protocol(char *, size_t, const struct path *); void _print_multipath_topology (const struct gen_multipath * gmp, int verbosity); #define print_multipath_topology(mpp, v) \ _print_multipath_topology(dm_multipath_to_gen(mpp), v) void print_all_paths (vector pathvec, int banner); void print_all_paths_custo (vector pathvec, int banner, char *fmt); int snprint_path_attr(const struct gen_path* gp, char *buf, int len, char wildcard); int snprint_pathgroup_attr(const struct gen_pathgroup* gpg, char *buf, int len, char wildcard); int snprint_multipath_attr(const struct gen_multipath* gm, char *buf, int len, char wildcard); int snprint_multipath_style(const struct gen_multipath *gmp, char *style, int len, int verbosity); #endif /* _PRINT_H */