multipathd: fix reservation_key check
[multipath-tools/.git] / libmultipath / print.h
1 #ifndef _PRINT_H
2 #define _PRINT_H
3 #include "dm-generic.h"
4
5 #define PRINT_PATH_LONG      "%w %i %d %D %p %t %T %s %o"
6 #define PRINT_PATH_INDENT    "%i %d %D %t %T %o"
7 #define PRINT_PATH_CHECKER   "%i %d %D %p %t %T %o %C"
8 #define PRINT_MAP_STATUS     "%n %F %Q %N %t %r"
9 #define PRINT_MAP_STATS      "%n %0 %1 %2 %3 %4"
10 #define PRINT_MAP_NAMES      "%n %d %w"
11 #define PRINT_MAP_PROPS      "size=%S features='%f' hwhandler='%h' wp=%r"
12 #define PRINT_PG_INDENT      "policy='%s' prio=%p status=%t"
13
14 #define PRINT_JSON_MULTIPLIER     5
15 #define PRINT_JSON_MAJOR_VERSION  0
16 #define PRINT_JSON_MINOR_VERSION  1
17 #define PRINT_JSON_START_VERSION  "   \"major_version\": %d,\n" \
18                                   "   \"minor_version\": %d,\n"
19 #define PRINT_JSON_START_ELEM     "{\n"
20 #define PRINT_JSON_START_MAP      "   \"map\":"
21 #define PRINT_JSON_START_MAPS     "\"maps\": ["
22 #define PRINT_JSON_START_PATHS    "\"paths\": ["
23 #define PRINT_JSON_START_GROUPS   "\"path_groups\": ["
24 #define PRINT_JSON_END_ELEM       "},"
25 #define PRINT_JSON_END_LAST_ELEM  "}"
26 #define PRINT_JSON_END_LAST       "}\n"
27 #define PRINT_JSON_END_ARRAY      "]\n"
28 #define PRINT_JSON_INDENT    "   "
29 #define PRINT_JSON_MAP       "{\n" \
30                              "      \"name\" : \"%n\",\n" \
31                              "      \"uuid\" : \"%w\",\n" \
32                              "      \"sysfs\" : \"%d\",\n" \
33                              "      \"failback\" : \"%F\",\n" \
34                              "      \"queueing\" : \"%Q\",\n" \
35                              "      \"paths\" : %N,\n" \
36                              "      \"write_prot\" : \"%r\",\n" \
37                              "      \"dm_st\" : \"%t\",\n" \
38                              "      \"features\" : \"%f\",\n" \
39                              "      \"hwhandler\" : \"%h\",\n" \
40                              "      \"action\" : \"%A\",\n" \
41                              "      \"path_faults\" : %0,\n" \
42                              "      \"vend\" : \"%v\",\n" \
43                              "      \"prod\" : \"%p\",\n" \
44                              "      \"rev\" : \"%e\",\n" \
45                              "      \"switch_grp\" : %1,\n" \
46                              "      \"map_loads\" : %2,\n" \
47                              "      \"total_q_time\" : %3,\n" \
48                              "      \"q_timeouts\" : %4,"
49
50 #define PRINT_JSON_GROUP     "{\n" \
51                              "         \"selector\" : \"%s\",\n" \
52                              "         \"pri\" : %p,\n" \
53                              "         \"dm_st\" : \"%t\","
54
55 #define PRINT_JSON_GROUP_NUM "         \"group\" : %d,\n"
56
57 #define PRINT_JSON_PATH      "{\n" \
58                              "            \"dev\" : \"%d\",\n"\
59                              "            \"dev_t\" : \"%D\",\n" \
60                              "            \"dm_st\" : \"%t\",\n" \
61                              "            \"dev_st\" : \"%o\",\n" \
62                              "            \"chk_st\" : \"%T\",\n" \
63                              "            \"checker\" : \"%c\",\n" \
64                              "            \"pri\" : %p,\n" \
65                              "            \"host_wwnn\" : \"%N\",\n" \
66                              "            \"target_wwnn\" : \"%n\",\n" \
67                              "            \"host_wwpn\" : \"%R\",\n" \
68                              "            \"target_wwpn\" : \"%r\",\n" \
69                              "            \"host_adapter\" : \"%a\""
70
71 #define MAX_LINE_LEN  80
72 #define MAX_LINES     64
73 #define MAX_FIELD_LEN 128
74 #define PROGRESS_LEN  10
75
76 struct path_data {
77         char wildcard;
78         char * header;
79         int width;
80         int (*snprint)(char * buff, size_t len, const struct path * pp);
81 };
82
83 struct multipath_data {
84         char wildcard;
85         char * header;
86         int width;
87         int (*snprint)(char * buff, size_t len, const struct multipath * mpp);
88 };
89
90 struct pathgroup_data {
91         char wildcard;
92         char * header;
93         int width;
94         int (*snprint)(char * buff, size_t len, const struct pathgroup * pgp);
95 };
96
97 enum layout_reset {
98         LAYOUT_RESET_NOT,
99         LAYOUT_RESET_ZERO,
100         LAYOUT_RESET_HEADER,
101 };
102
103 void _get_path_layout (const struct _vector *gpvec, enum layout_reset);
104 void get_path_layout (vector pathvec, int header);
105 void _get_multipath_layout (const struct _vector *gmvec, enum layout_reset);
106 void get_multipath_layout (vector mpvec, int header);
107 int snprint_path_header (char *, int, const char *);
108 int snprint_multipath_header (char *, int, const char *);
109 int _snprint_path (const struct gen_path *, char *, int, const char *, int);
110 #define snprint_path(buf, len, fmt, pp, v) \
111         _snprint_path(dm_path_to_gen(pp), buf, len, fmt,  v)
112 int _snprint_multipath (const struct gen_multipath *, char *, int,
113                         const char *, int);
114 #define snprint_multipath(buf, len, fmt, mp, v)                         \
115         _snprint_multipath(dm_multipath_to_gen(mp), buf, len, fmt,  v)
116 int _snprint_multipath_topology (const struct gen_multipath *, char *, int, 
117                                  int verbosity);
118 #define snprint_multipath_topology(buf, len, mpp, v) \
119         _snprint_multipath_topology (dm_multipath_to_gen(mpp), buf, len, v)
120 int snprint_multipath_topology_json (char * buff, int len,
121                                 const struct vectors * vecs);
122 int snprint_multipath_map_json (char * buff, int len,
123                                 const struct multipath * mpp, int last);
124 int snprint_defaults (struct config *, char *, int);
125 int snprint_blacklist (struct config *, char *, int);
126 int snprint_blacklist_except (struct config *, char *, int);
127 int snprint_blacklist_report (struct config *, char *, int);
128 int snprint_wildcards (char *, int);
129 int snprint_status (char *, int, const struct vectors *);
130 int snprint_devices (struct config *, char *, int, const struct vectors *);
131 int snprint_hwtable (struct config *, char *, int, const vector);
132 int snprint_mptable (struct config *, char *, int, const vector);
133 int snprint_overrides (struct config *, char *, int, const struct hwentry *);
134 int snprint_path_serial (char *, size_t, const struct path *);
135 int snprint_host_wwnn (char *, size_t, const struct path *);
136 int snprint_host_wwpn (char *, size_t, const struct path *);
137 int snprint_tgt_wwnn (char *, size_t, const struct path *);
138 int snprint_tgt_wwpn (char *, size_t, const struct path *);
139
140 void _print_multipath_topology (const struct gen_multipath * gmp,
141                                 int verbosity);
142 #define print_multipath_topology(mpp, v) \
143         _print_multipath_topology(dm_multipath_to_gen(mpp), v)
144
145 void print_all_paths (vector pathvec, int banner);
146 void print_all_paths_custo (vector pathvec, int banner, char *fmt);
147
148 int snprint_path_attr(const struct gen_path* gp,
149                       char *buf, int len, char wildcard);
150 int snprint_pathgroup_attr(const struct gen_pathgroup* gpg,
151                            char *buf, int len, char wildcard);
152 int snprint_multipath_attr(const struct gen_multipath* gm,
153                            char *buf, int len, char wildcard);
154 int snprint_multipath_style(const struct gen_multipath *gmp,
155                             char *style, int len, int verbosity);
156 #endif /* _PRINT_H */