Whamcloud - gitweb
add CMM to makefiles
[fs/lustre-release.git] / lustre / utils / wirecheck.c
1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=8:tabstop=8:
3  */
4 #include <stdio.h>
5 #include <sys/types.h>
6 #include <sys/wait.h>
7 #include <liblustre.h>
8 #include <linux/lustre_lib.h>
9 #include <linux/lustre_idl.h>
10
11 #define BLANK_LINE()                                            \
12 do {                                                            \
13         printf("\n");                                           \
14 } while(0)
15
16 #define COMMENT(c)                                              \
17 do {                                                            \
18         printf("        /* "c" */\n");                          \
19 } while(0)
20
21 #define STRINGIFY(a) #a
22
23
24 #define CHECK_CDEFINE(a)                                        \
25         printf("        CLASSERT("#a" == "STRINGIFY(a) ");\n")
26
27 #define CHECK_CVALUE(a)                                         \
28         printf("        CLASSERT("#a" == %lld);\n", (long long)a)
29
30 #define CHECK_DEFINE(a)                                         \
31 do {                                                            \
32         printf("        LASSERTF("#a" == "STRINGIFY(a)          \
33                ",\" found %%lld\\n\",\n                 "       \
34                "(long long)"#a");\n");   \
35 } while(0)
36
37 #define CHECK_VALUE(a)                                          \
38 do {                                                            \
39         printf("        LASSERTF("#a                            \
40                " == %lld, \" found %%lld\\n\",\n                 "\
41                "(long long)"#a");\n", (long long)a);            \
42 } while(0)
43
44 #define CHECK_VALUE_64(a)                                       \
45 do {                                                            \
46         printf("        LASSERTF("#a                            \
47                " == %lldULL, \" found %%lld\\n\",\n                 "\
48                "(long long)"#a");\n", (long long)a);            \
49 } while(0)
50
51 #define CHECK_MEMBER_OFFSET(s,m)                                \
52 do {                                                            \
53         CHECK_VALUE((int)offsetof(struct s, m));                \
54 } while(0)
55
56 #define CHECK_MEMBER_SIZEOF(s,m)                                \
57 do {                                                            \
58         CHECK_VALUE((int)sizeof(((struct s *)0)->m));           \
59 } while(0)
60
61 #define CHECK_MEMBER(s,m)                                       \
62 do {                                                            \
63         CHECK_MEMBER_OFFSET(s, m);                              \
64                 CHECK_MEMBER_SIZEOF(s, m);                      \
65 } while(0)
66
67 #define CHECK_STRUCT(s)                                         \
68 do {                                                            \
69         COMMENT("Checks for struct "#s);                        \
70                 CHECK_VALUE((int)sizeof(struct s));             \
71 } while(0)
72
73
74 static void
75 check_lustre_handle(void)
76 {
77         BLANK_LINE();
78         CHECK_STRUCT(lustre_handle);
79         CHECK_MEMBER(lustre_handle, cookie);
80 }
81
82 static void
83 check_lustre_msg(void)
84 {
85         BLANK_LINE();
86         CHECK_STRUCT(lustre_msg);
87         CHECK_MEMBER(lustre_msg, handle);
88         CHECK_MEMBER(lustre_msg, magic);
89         CHECK_MEMBER(lustre_msg, type);
90         CHECK_MEMBER(lustre_msg, version);
91         CHECK_MEMBER(lustre_msg, opc);
92         CHECK_MEMBER(lustre_msg, last_xid);
93         CHECK_MEMBER(lustre_msg, last_committed);
94         CHECK_MEMBER(lustre_msg, transno);
95         CHECK_MEMBER(lustre_msg, status);
96         CHECK_MEMBER(lustre_msg, flags);
97         CHECK_MEMBER(lustre_msg, bufcount);
98         CHECK_MEMBER(lustre_msg, buflens[7]);
99 }
100
101 static void
102 check_obdo(void)
103 {
104         BLANK_LINE();
105         CHECK_STRUCT(obdo);
106         CHECK_MEMBER(obdo, o_valid);
107         CHECK_MEMBER(obdo, o_id);
108         CHECK_MEMBER(obdo, o_gr);
109         CHECK_MEMBER(obdo, o_fid);
110         CHECK_MEMBER(obdo, o_size);
111         CHECK_MEMBER(obdo, o_mtime);
112         CHECK_MEMBER(obdo, o_atime);
113         CHECK_MEMBER(obdo, o_ctime);
114         CHECK_MEMBER(obdo, o_blocks);
115         CHECK_MEMBER(obdo, o_grant);
116         CHECK_MEMBER(obdo, o_blksize);
117         CHECK_MEMBER(obdo, o_mode);
118         CHECK_MEMBER(obdo, o_uid);
119         CHECK_MEMBER(obdo, o_gid);
120         CHECK_MEMBER(obdo, o_flags);
121         CHECK_MEMBER(obdo, o_nlink);
122         CHECK_MEMBER(obdo, o_generation);
123         CHECK_MEMBER(obdo, o_misc);
124         CHECK_MEMBER(obdo, o_easize);
125         CHECK_MEMBER(obdo, o_mds);
126         CHECK_MEMBER(obdo, o_padding_1);
127         CHECK_MEMBER(obdo, o_inline);
128
129         CHECK_VALUE(OBD_INLINESZ);
130
131         CHECK_VALUE(OBD_MD_FLID);
132         CHECK_VALUE(OBD_MD_FLATIME);
133         CHECK_VALUE(OBD_MD_FLMTIME);
134         CHECK_VALUE(OBD_MD_FLCTIME);
135         CHECK_VALUE(OBD_MD_FLSIZE);
136         CHECK_VALUE(OBD_MD_FLBLOCKS);
137         CHECK_VALUE(OBD_MD_FLBLKSZ);
138         CHECK_VALUE(OBD_MD_FLMODE);
139         CHECK_VALUE(OBD_MD_FLTYPE);
140         CHECK_VALUE(OBD_MD_FLUID);
141         CHECK_VALUE(OBD_MD_FLGID);
142         CHECK_VALUE(OBD_MD_FLFLAGS);
143         CHECK_VALUE(OBD_MD_FLNLINK);
144         CHECK_VALUE(OBD_MD_FLGENER);
145         CHECK_VALUE(OBD_MD_FLINLINE);
146         CHECK_VALUE(OBD_MD_FLRDEV);
147         CHECK_VALUE(OBD_MD_FLEASIZE);
148         CHECK_VALUE(OBD_MD_LINKNAME);
149         CHECK_VALUE(OBD_MD_FLHANDLE);
150         CHECK_VALUE(OBD_MD_FLCKSUM);
151         CHECK_VALUE(OBD_MD_FLQOS);
152         CHECK_VALUE(OBD_MD_FLCOOKIE);
153         CHECK_VALUE(OBD_MD_FLGROUP);
154         CHECK_VALUE(OBD_MD_FLFID);
155         CHECK_VALUE(OBD_MD_FLEPOCH);
156         CHECK_VALUE(OBD_MD_FLGRANT);
157         CHECK_VALUE(OBD_MD_FLDIREA);
158         CHECK_VALUE(OBD_MD_FLUSRQUOTA);
159         CHECK_VALUE(OBD_MD_FLGRPQUOTA);
160         CHECK_VALUE_64(OBD_MD_MDS);
161         CHECK_VALUE_64(OBD_MD_REINT);
162
163         CHECK_VALUE(OBD_FL_INLINEDATA);
164         CHECK_VALUE(OBD_FL_OBDMDEXISTS);
165         CHECK_VALUE(OBD_FL_DELORPHAN);
166         CHECK_VALUE(OBD_FL_NORPC);
167         CHECK_VALUE(OBD_FL_IDONLY);
168         CHECK_VALUE(OBD_FL_RECREATE_OBJS);
169         CHECK_VALUE(OBD_FL_DEBUG_CHECK);
170         CHECK_VALUE(OBD_FL_NO_USRQUOTA);
171         CHECK_VALUE(OBD_FL_NO_GRPQUOTA);
172 }
173
174 static void
175 check_lov_mds_md_v1(void)
176 {
177         BLANK_LINE();
178         CHECK_STRUCT(lov_mds_md_v1);
179         CHECK_MEMBER(lov_mds_md_v1, lmm_magic);
180         CHECK_MEMBER(lov_mds_md_v1, lmm_pattern);
181         CHECK_MEMBER(lov_mds_md_v1, lmm_object_id);
182         CHECK_MEMBER(lov_mds_md_v1, lmm_object_gr);
183         CHECK_MEMBER(lov_mds_md_v1, lmm_stripe_size);
184         CHECK_MEMBER(lov_mds_md_v1, lmm_stripe_count);
185         CHECK_MEMBER(lov_mds_md_v1, lmm_objects);
186
187         BLANK_LINE();
188         CHECK_STRUCT(lov_ost_data_v1);
189         CHECK_MEMBER(lov_ost_data_v1, l_object_id);
190         CHECK_MEMBER(lov_ost_data_v1, l_object_gr);
191         CHECK_MEMBER(lov_ost_data_v1, l_ost_gen);
192         CHECK_MEMBER(lov_ost_data_v1, l_ost_idx);
193
194         CHECK_VALUE(LOV_MAGIC_V1);
195
196         CHECK_VALUE(LOV_PATTERN_RAID0);
197         CHECK_VALUE(LOV_PATTERN_RAID1);
198 }
199
200 static void
201 check_obd_statfs(void)
202 {
203         BLANK_LINE();
204         CHECK_STRUCT(obd_statfs);
205         CHECK_MEMBER(obd_statfs, os_type);
206         CHECK_MEMBER(obd_statfs, os_blocks);
207         CHECK_MEMBER(obd_statfs, os_bfree);
208         CHECK_MEMBER(obd_statfs, os_bavail);
209         CHECK_MEMBER(obd_statfs, os_ffree);
210         CHECK_MEMBER(obd_statfs, os_fsid);
211         CHECK_MEMBER(obd_statfs, os_bsize);
212         CHECK_MEMBER(obd_statfs, os_namelen);
213         CHECK_MEMBER(obd_statfs, os_state);
214 }
215
216 static void
217 check_obd_ioobj(void)
218 {
219         BLANK_LINE();
220         CHECK_STRUCT(obd_ioobj);
221         CHECK_MEMBER(obd_ioobj, ioo_id);
222         CHECK_MEMBER(obd_ioobj, ioo_gr);
223         CHECK_MEMBER(obd_ioobj, ioo_type);
224         CHECK_MEMBER(obd_ioobj, ioo_bufcnt);
225 }
226
227 static void
228 check_obd_quotactl(void)
229 {
230         BLANK_LINE();
231         CHECK_STRUCT(obd_quotactl);
232         CHECK_MEMBER(obd_quotactl, qc_cmd);
233         CHECK_MEMBER(obd_quotactl, qc_type);
234         CHECK_MEMBER(obd_quotactl, qc_id);
235         CHECK_MEMBER(obd_quotactl, qc_stat);
236         CHECK_MEMBER(obd_quotactl, qc_dqinfo);
237         CHECK_MEMBER(obd_quotactl, qc_dqblk);
238
239         BLANK_LINE();
240         CHECK_STRUCT(obd_dqinfo);
241         CHECK_MEMBER(obd_dqinfo, dqi_bgrace);
242         CHECK_MEMBER(obd_dqinfo, dqi_igrace);
243         CHECK_MEMBER(obd_dqinfo, dqi_flags);
244         CHECK_MEMBER(obd_dqinfo, dqi_valid);
245
246         BLANK_LINE();
247         CHECK_STRUCT(obd_dqblk);
248         CHECK_MEMBER(obd_dqblk, dqb_bhardlimit);
249         CHECK_MEMBER(obd_dqblk, dqb_bsoftlimit);
250         CHECK_MEMBER(obd_dqblk, dqb_curspace);
251         CHECK_MEMBER(obd_dqblk, dqb_ihardlimit);
252         CHECK_MEMBER(obd_dqblk, dqb_isoftlimit);
253         CHECK_MEMBER(obd_dqblk, dqb_curinodes);
254         CHECK_MEMBER(obd_dqblk, dqb_btime);
255         CHECK_MEMBER(obd_dqblk, dqb_itime);
256         CHECK_MEMBER(obd_dqblk, dqb_valid);
257         CHECK_MEMBER(obd_dqblk, padding);
258
259         CHECK_DEFINE(Q_QUOTACHECK);
260         CHECK_DEFINE(Q_INITQUOTA);
261         CHECK_DEFINE(Q_GETOINFO);
262         CHECK_DEFINE(Q_GETOQUOTA);
263 }
264
265 static void
266 check_niobuf_remote(void)
267 {
268         BLANK_LINE();
269         CHECK_STRUCT(niobuf_remote);
270         CHECK_MEMBER(niobuf_remote, offset);
271         CHECK_MEMBER(niobuf_remote, len);
272         CHECK_MEMBER(niobuf_remote, flags);
273
274         CHECK_VALUE(OBD_BRW_READ);
275         CHECK_VALUE(OBD_BRW_WRITE);
276         CHECK_VALUE(OBD_BRW_SYNC);
277         CHECK_VALUE(OBD_BRW_FROM_GRANT);
278         CHECK_VALUE(OBD_BRW_NOQUOTA);
279 }
280
281 static void
282 check_ost_body(void)
283 {
284         BLANK_LINE();
285         CHECK_STRUCT(ost_body);
286         CHECK_MEMBER(ost_body, oa);
287 }
288
289 static void
290 check_ll_fid(void)
291 {
292         BLANK_LINE();
293         CHECK_STRUCT(ll_fid);
294         CHECK_MEMBER(ll_fid, id);
295         CHECK_MEMBER(ll_fid, generation);
296         CHECK_MEMBER(ll_fid, f_type);
297 }
298
299 static void
300 check_mds_status_req(void)
301 {
302         BLANK_LINE();
303         CHECK_STRUCT(mds_status_req);
304         CHECK_MEMBER(mds_status_req, flags);
305         CHECK_MEMBER(mds_status_req, repbuf);
306 }
307
308 static void
309 check_mds_body(void)
310 {
311         BLANK_LINE();
312         CHECK_STRUCT(mds_body);
313         CHECK_MEMBER(mds_body, fid1);
314         CHECK_MEMBER(mds_body, fid2);
315         CHECK_MEMBER(mds_body, handle);
316         CHECK_MEMBER(mds_body, size);
317         CHECK_MEMBER(mds_body, blocks);
318         CHECK_MEMBER(mds_body, io_epoch);
319         CHECK_MEMBER(mds_body, ino);
320         CHECK_MEMBER(mds_body, valid);
321         CHECK_MEMBER(mds_body, fsuid);
322         CHECK_MEMBER(mds_body, fsgid);
323         CHECK_MEMBER(mds_body, capability);
324         CHECK_MEMBER(mds_body, mode);
325         CHECK_MEMBER(mds_body, uid);
326         CHECK_MEMBER(mds_body, gid);
327         CHECK_MEMBER(mds_body, mtime);
328         CHECK_MEMBER(mds_body, ctime);
329         CHECK_MEMBER(mds_body, atime);
330         CHECK_MEMBER(mds_body, flags);
331         CHECK_MEMBER(mds_body, rdev);
332         CHECK_MEMBER(mds_body, nlink);
333         CHECK_MEMBER(mds_body, generation);
334         CHECK_MEMBER(mds_body, suppgid);
335         CHECK_MEMBER(mds_body, eadatasize);
336         CHECK_MEMBER(mds_body, aclsize);
337         CHECK_MEMBER(mds_body, max_mdsize);
338         CHECK_MEMBER(mds_body, max_cookiesize);
339         CHECK_MEMBER(mds_body, padding_4);
340
341         CHECK_VALUE(FMODE_READ);
342         CHECK_VALUE(FMODE_WRITE);
343         CHECK_VALUE(FMODE_EXEC);
344
345         CHECK_VALUE(MDS_OPEN_CREAT);
346         CHECK_VALUE(MDS_OPEN_EXCL);
347         CHECK_VALUE(MDS_OPEN_TRUNC);
348         CHECK_VALUE(MDS_OPEN_APPEND);
349         CHECK_VALUE(MDS_OPEN_SYNC);
350         CHECK_VALUE(MDS_OPEN_DIRECTORY);
351         CHECK_VALUE(MDS_OPEN_DELAY_CREATE);
352         CHECK_CDEFINE(MDS_OPEN_OWNEROVERRIDE);
353         CHECK_CDEFINE(MDS_OPEN_JOIN_FILE);
354         CHECK_CDEFINE(MDS_OPEN_HAS_EA);
355         CHECK_CDEFINE(MDS_OPEN_HAS_OBJS);
356 }
357
358 static void
359 check_mds_rec_setattr(void)
360 {
361         BLANK_LINE();
362         CHECK_STRUCT(mds_rec_setattr);
363         CHECK_MEMBER(mds_rec_setattr, sa_opcode);
364         CHECK_MEMBER(mds_rec_setattr, sa_fsuid);
365         CHECK_MEMBER(mds_rec_setattr, sa_fsgid);
366         CHECK_MEMBER(mds_rec_setattr, sa_cap);
367         CHECK_MEMBER(mds_rec_setattr, sa_suppgid);
368         CHECK_MEMBER(mds_rec_setattr, sa_mode);
369         CHECK_MEMBER(mds_rec_setattr, sa_fid);
370         CHECK_MEMBER(mds_rec_setattr, sa_valid);
371         CHECK_MEMBER(mds_rec_setattr, sa_size);
372         CHECK_MEMBER(mds_rec_setattr, sa_mtime);
373         CHECK_MEMBER(mds_rec_setattr, sa_atime);
374         CHECK_MEMBER(mds_rec_setattr, sa_ctime);
375         CHECK_MEMBER(mds_rec_setattr, sa_uid);
376         CHECK_MEMBER(mds_rec_setattr, sa_gid);
377         CHECK_MEMBER(mds_rec_setattr, sa_attr_flags);
378 }
379
380 static void
381 check_mds_rec_create(void)
382 {
383         BLANK_LINE();
384         CHECK_STRUCT(mds_rec_create);
385         CHECK_MEMBER(mds_rec_create, cr_opcode);
386         CHECK_MEMBER(mds_rec_create, cr_fsuid);
387         CHECK_MEMBER(mds_rec_create, cr_fsgid);
388         CHECK_MEMBER(mds_rec_create, cr_cap);
389         CHECK_MEMBER(mds_rec_create, cr_flags);
390         CHECK_MEMBER(mds_rec_create, cr_mode);
391         CHECK_MEMBER(mds_rec_create, cr_fid);
392         CHECK_MEMBER(mds_rec_create, cr_replayfid);
393         CHECK_MEMBER(mds_rec_create, cr_time);
394         CHECK_MEMBER(mds_rec_create, cr_rdev);
395         CHECK_MEMBER(mds_rec_create, cr_suppgid);
396 }
397
398 static void
399 check_mds_rec_link(void)
400 {
401         BLANK_LINE();
402         CHECK_STRUCT(mds_rec_link);
403         CHECK_MEMBER(mds_rec_link, lk_opcode);
404         CHECK_MEMBER(mds_rec_link, lk_fsuid);
405         CHECK_MEMBER(mds_rec_link, lk_fsgid);
406         CHECK_MEMBER(mds_rec_link, lk_cap);
407         CHECK_MEMBER(mds_rec_link, lk_suppgid1);
408         CHECK_MEMBER(mds_rec_link, lk_suppgid2);
409         CHECK_MEMBER(mds_rec_link, lk_fid1);
410         CHECK_MEMBER(mds_rec_link, lk_fid2);
411         CHECK_MEMBER(mds_rec_link, lk_time);
412 }
413
414 static void
415 check_mds_rec_unlink(void)
416 {
417         BLANK_LINE();
418         CHECK_STRUCT(mds_rec_unlink);
419         CHECK_MEMBER(mds_rec_unlink, ul_opcode);
420         CHECK_MEMBER(mds_rec_unlink, ul_fsuid);
421         CHECK_MEMBER(mds_rec_unlink, ul_fsgid);
422         CHECK_MEMBER(mds_rec_unlink, ul_cap);
423         CHECK_MEMBER(mds_rec_unlink, ul_suppgid);
424         CHECK_MEMBER(mds_rec_unlink, ul_mode);
425         CHECK_MEMBER(mds_rec_unlink, ul_fid1);
426         CHECK_MEMBER(mds_rec_unlink, ul_fid2);
427         CHECK_MEMBER(mds_rec_unlink, ul_time);
428 }
429
430 static void
431 check_mds_rec_rename(void)
432 {
433         BLANK_LINE();
434         CHECK_STRUCT(mds_rec_rename);
435         CHECK_MEMBER(mds_rec_rename, rn_opcode);
436         CHECK_MEMBER(mds_rec_rename, rn_fsuid);
437         CHECK_MEMBER(mds_rec_rename, rn_fsgid);
438         CHECK_MEMBER(mds_rec_rename, rn_cap);
439         CHECK_MEMBER(mds_rec_rename, rn_suppgid1);
440         CHECK_MEMBER(mds_rec_rename, rn_suppgid2);
441         CHECK_MEMBER(mds_rec_rename, rn_fid1);
442         CHECK_MEMBER(mds_rec_rename, rn_fid2);
443         CHECK_MEMBER(mds_rec_rename, rn_time);
444 }
445
446 static void
447 check_lov_desc(void)
448 {
449         BLANK_LINE();
450         CHECK_STRUCT(lov_desc);
451         CHECK_MEMBER(lov_desc, ld_tgt_count);
452         CHECK_MEMBER(lov_desc, ld_active_tgt_count);
453         CHECK_MEMBER(lov_desc, ld_default_stripe_count);
454         CHECK_MEMBER(lov_desc, ld_pattern);
455         CHECK_MEMBER(lov_desc, ld_default_stripe_size);
456         CHECK_MEMBER(lov_desc, ld_default_stripe_offset);
457         CHECK_MEMBER(lov_desc, ld_default_stripe_offset);
458         CHECK_MEMBER(lov_desc, ld_padding_1);
459         CHECK_MEMBER(lov_desc, ld_padding_2);
460         CHECK_MEMBER(lov_desc, ld_padding_3);
461         CHECK_MEMBER(lov_desc, ld_padding_4);
462         CHECK_MEMBER(lov_desc, ld_uuid);
463 }
464
465 static void
466 check_ldlm_res_id(void)
467 {
468         BLANK_LINE();
469         CHECK_STRUCT(ldlm_res_id);
470         CHECK_MEMBER(ldlm_res_id, name[RES_NAME_SIZE]);
471 }
472
473 static void
474 check_ldlm_extent(void)
475 {
476         BLANK_LINE();
477         CHECK_STRUCT(ldlm_extent);
478         CHECK_MEMBER(ldlm_extent, start);
479         CHECK_MEMBER(ldlm_extent, end);
480         CHECK_MEMBER(ldlm_extent, gid);
481 }
482
483 static void
484 check_ldlm_flock(void)
485 {
486         BLANK_LINE();
487         CHECK_STRUCT(ldlm_flock);
488         CHECK_MEMBER(ldlm_flock, start);
489         CHECK_MEMBER(ldlm_flock, end);
490         CHECK_MEMBER(ldlm_flock, blocking_pid);
491         CHECK_MEMBER(ldlm_flock, pid);
492 }
493
494 static void
495 check_ldlm_intent(void)
496 {
497         BLANK_LINE();
498         CHECK_STRUCT(ldlm_intent);
499         CHECK_MEMBER(ldlm_intent, opc);
500 }
501
502 static void
503 check_ldlm_resource_desc(void)
504 {
505         BLANK_LINE();
506         CHECK_STRUCT(ldlm_resource_desc);
507         CHECK_MEMBER(ldlm_resource_desc, lr_type);
508         CHECK_MEMBER(ldlm_resource_desc, lr_padding);
509         CHECK_MEMBER(ldlm_resource_desc, lr_name);
510 }
511
512 static void
513 check_ldlm_lock_desc(void)
514 {
515         BLANK_LINE();
516         CHECK_STRUCT(ldlm_lock_desc);
517         CHECK_MEMBER(ldlm_lock_desc, l_resource);
518         CHECK_MEMBER(ldlm_lock_desc, l_req_mode);
519         CHECK_MEMBER(ldlm_lock_desc, l_granted_mode);
520         CHECK_MEMBER(ldlm_lock_desc, l_policy_data);
521 }
522
523 static void
524 check_ldlm_request(void)
525 {
526         BLANK_LINE();
527         CHECK_STRUCT(ldlm_request);
528         CHECK_MEMBER(ldlm_request, lock_flags);
529         CHECK_MEMBER(ldlm_request, lock_padding);
530         CHECK_MEMBER(ldlm_request, lock_desc);
531         CHECK_MEMBER(ldlm_request, lock_handle1);
532         CHECK_MEMBER(ldlm_request, lock_handle2);
533 }
534
535 static void
536 check_ldlm_reply(void)
537 {
538         BLANK_LINE();
539         CHECK_STRUCT(ldlm_reply);
540         CHECK_MEMBER(ldlm_reply, lock_flags);
541         CHECK_MEMBER(ldlm_request, lock_padding);
542         CHECK_MEMBER(ldlm_request, lock_desc);
543         CHECK_MEMBER(ldlm_reply, lock_handle);
544         CHECK_MEMBER(ldlm_reply, lock_policy_res1);
545         CHECK_MEMBER(ldlm_reply, lock_policy_res2);
546 }
547
548 static void
549 check_ldlm_lvb(void)
550 {
551         BLANK_LINE();
552         CHECK_STRUCT(ost_lvb);
553         CHECK_MEMBER(ost_lvb, lvb_size);
554         CHECK_MEMBER(ost_lvb, lvb_mtime);
555         CHECK_MEMBER(ost_lvb, lvb_atime);
556         CHECK_MEMBER(ost_lvb, lvb_ctime);
557         CHECK_MEMBER(ost_lvb, lvb_blocks);
558 }
559
560
561 static void
562 check_llog_logid(void)
563 {
564         BLANK_LINE();
565         CHECK_STRUCT(llog_logid);
566         CHECK_MEMBER(llog_logid, lgl_oid);
567         CHECK_MEMBER(llog_logid, lgl_ogr);
568         CHECK_MEMBER(llog_logid, lgl_ogen);
569
570         CHECK_VALUE(OST_SZ_REC);
571         CHECK_VALUE(OST_RAID1_REC);
572         CHECK_VALUE(MDS_UNLINK_REC);
573         CHECK_VALUE(MDS_SETATTR_REC);
574         CHECK_VALUE(OBD_CFG_REC);
575         CHECK_VALUE(PTL_CFG_REC);
576         CHECK_VALUE(LLOG_GEN_REC);
577         CHECK_VALUE(LLOG_HDR_MAGIC);
578         CHECK_VALUE(LLOG_LOGID_MAGIC);
579 }
580
581 static void
582 check_llog_catid(void)
583 {
584         BLANK_LINE();
585         CHECK_STRUCT(llog_catid);
586         CHECK_MEMBER(llog_catid, lci_logid);
587         CHECK_MEMBER(llog_catid, lci_padding1);
588         CHECK_MEMBER(llog_catid, lci_padding2);
589         CHECK_MEMBER(llog_catid, lci_padding3);
590 }
591
592 static void
593 check_llog_rec_hdr(void)
594 {
595         BLANK_LINE();
596         CHECK_STRUCT(llog_rec_hdr);
597         CHECK_MEMBER(llog_rec_hdr, lrh_len);
598         CHECK_MEMBER(llog_rec_hdr, lrh_index);
599         CHECK_MEMBER(llog_rec_hdr, lrh_type);
600         CHECK_MEMBER(llog_rec_hdr, padding);
601 }
602
603 static void
604 check_llog_rec_tail(void)
605 {
606         BLANK_LINE();
607         CHECK_STRUCT(llog_rec_tail);
608         CHECK_MEMBER(llog_rec_tail, lrt_len);
609         CHECK_MEMBER(llog_rec_tail, lrt_index);
610 }
611
612 static void
613 check_llog_logid_rec(void)
614 {
615         BLANK_LINE();
616         CHECK_STRUCT(llog_logid_rec);
617         CHECK_MEMBER(llog_logid_rec, lid_hdr);
618         CHECK_MEMBER(llog_logid_rec, lid_id);
619         CHECK_MEMBER(llog_logid_rec, padding1);
620         CHECK_MEMBER(llog_logid_rec, padding2);
621         CHECK_MEMBER(llog_logid_rec, padding3);
622         CHECK_MEMBER(llog_logid_rec, padding4);
623         CHECK_MEMBER(llog_logid_rec, padding5);
624         CHECK_MEMBER(llog_logid_rec, lid_tail);
625 }
626
627 static void
628 check_llog_create_rec(void)
629 {
630         BLANK_LINE();
631         CHECK_STRUCT(llog_create_rec);
632         CHECK_MEMBER(llog_create_rec, lcr_hdr);
633         CHECK_MEMBER(llog_create_rec, lcr_fid);
634         CHECK_MEMBER(llog_create_rec, lcr_oid);
635         CHECK_MEMBER(llog_create_rec, lcr_ogen);
636         CHECK_MEMBER(llog_create_rec, padding);
637 }
638
639 static void
640 check_llog_orphan_rec(void)
641 {
642         BLANK_LINE();
643         CHECK_STRUCT(llog_orphan_rec);
644         CHECK_MEMBER(llog_orphan_rec, lor_hdr);
645         CHECK_MEMBER(llog_orphan_rec, lor_oid);
646         CHECK_MEMBER(llog_orphan_rec, lor_ogen);
647         CHECK_MEMBER(llog_orphan_rec, padding);
648         CHECK_MEMBER(llog_orphan_rec, lor_tail);
649 }
650
651 static void
652 check_llog_unlink_rec(void)
653 {
654         BLANK_LINE();
655         CHECK_STRUCT(llog_unlink_rec);
656         CHECK_MEMBER(llog_unlink_rec, lur_hdr);
657         CHECK_MEMBER(llog_unlink_rec, lur_oid);
658         CHECK_MEMBER(llog_unlink_rec, lur_ogen);
659         CHECK_MEMBER(llog_unlink_rec, padding);
660         CHECK_MEMBER(llog_unlink_rec, lur_tail);
661 }
662
663 static void
664 check_llog_setattr_rec(void)
665 {
666         BLANK_LINE();
667         CHECK_STRUCT(llog_setattr_rec);
668         CHECK_MEMBER(llog_setattr_rec, lsr_hdr);
669         CHECK_MEMBER(llog_setattr_rec, lsr_oid);
670         CHECK_MEMBER(llog_setattr_rec, lsr_ogen);
671         CHECK_MEMBER(llog_setattr_rec, lsr_uid);
672         CHECK_MEMBER(llog_setattr_rec, lsr_gid);
673         CHECK_MEMBER(llog_setattr_rec, padding);
674         CHECK_MEMBER(llog_setattr_rec, lsr_tail);
675 }
676
677 static void
678 check_llog_size_change_rec(void)
679 {
680         BLANK_LINE();
681         CHECK_STRUCT(llog_size_change_rec);
682         CHECK_MEMBER(llog_size_change_rec, lsc_hdr);
683         CHECK_MEMBER(llog_size_change_rec, lsc_fid);
684         CHECK_MEMBER(llog_size_change_rec, lsc_io_epoch);
685         CHECK_MEMBER(llog_size_change_rec, padding);
686         CHECK_MEMBER(llog_size_change_rec, lsc_tail);
687 }
688
689 static void
690 check_llog_gen(void)
691 {
692         BLANK_LINE();
693         CHECK_STRUCT(llog_gen);
694         CHECK_MEMBER(llog_gen, mnt_cnt);
695         CHECK_MEMBER(llog_gen, conn_cnt);
696 }
697
698 static void
699 check_llog_gen_rec(void)
700 {
701         BLANK_LINE();
702         CHECK_STRUCT(llog_gen_rec);
703         CHECK_MEMBER(llog_gen_rec, lgr_hdr);
704         CHECK_MEMBER(llog_gen_rec, lgr_gen);
705         CHECK_MEMBER(llog_gen_rec, lgr_tail);
706 }
707
708 static void
709 check_llog_log_hdr(void)
710 {
711         BLANK_LINE();
712         CHECK_STRUCT(llog_log_hdr);
713         CHECK_MEMBER(llog_log_hdr, llh_hdr);
714         CHECK_MEMBER(llog_log_hdr, llh_timestamp);
715         CHECK_MEMBER(llog_log_hdr, llh_count);
716         CHECK_MEMBER(llog_log_hdr, llh_bitmap_offset);
717         CHECK_MEMBER(llog_log_hdr, llh_size);
718         CHECK_MEMBER(llog_log_hdr, llh_flags);
719         CHECK_MEMBER(llog_log_hdr, llh_cat_idx);
720         CHECK_MEMBER(llog_log_hdr, llh_tgtuuid);
721         CHECK_MEMBER(llog_log_hdr, llh_reserved);
722         CHECK_MEMBER(llog_log_hdr, llh_bitmap);
723         CHECK_MEMBER(llog_log_hdr, llh_tail);
724 }
725
726 static void
727 check_llog_cookie(void)
728 {
729         BLANK_LINE();
730         CHECK_STRUCT(llog_cookie);
731         CHECK_MEMBER(llog_cookie, lgc_lgl);
732         CHECK_MEMBER(llog_cookie, lgc_subsys);
733         CHECK_MEMBER(llog_cookie, lgc_index);
734         CHECK_MEMBER(llog_cookie, lgc_padding);
735 }
736
737 static void
738 check_llogd_body(void)
739 {
740         BLANK_LINE();
741         CHECK_STRUCT(llogd_body);
742         CHECK_MEMBER(llogd_body, lgd_logid);
743         CHECK_MEMBER(llogd_body, lgd_ctxt_idx);
744         CHECK_MEMBER(llogd_body, lgd_llh_flags);
745         CHECK_MEMBER(llogd_body, lgd_index);
746         CHECK_MEMBER(llogd_body, lgd_saved_index);
747         CHECK_MEMBER(llogd_body, lgd_len);
748         CHECK_MEMBER(llogd_body, lgd_cur_offset);
749
750         CHECK_VALUE(LLOG_ORIGIN_HANDLE_CREATE);
751         CHECK_VALUE(LLOG_ORIGIN_HANDLE_NEXT_BLOCK);
752         CHECK_VALUE(LLOG_ORIGIN_HANDLE_READ_HEADER);
753         CHECK_VALUE(LLOG_ORIGIN_HANDLE_WRITE_REC);
754         CHECK_VALUE(LLOG_ORIGIN_HANDLE_CLOSE);
755         CHECK_VALUE(LLOG_ORIGIN_CONNECT);
756         CHECK_VALUE(LLOG_CATINFO);
757 }
758
759 static void
760 check_llogd_conn_body(void)
761 {
762         BLANK_LINE();
763         CHECK_STRUCT(llogd_conn_body);
764         CHECK_MEMBER(llogd_conn_body, lgdc_gen);
765         CHECK_MEMBER(llogd_conn_body, lgdc_logid);
766         CHECK_MEMBER(llogd_conn_body, lgdc_ctxt_idx);
767 }
768
769 static void
770 check_qunit_data(void)
771 {
772         BLANK_LINE();
773         CHECK_STRUCT(qunit_data);
774         CHECK_MEMBER(qunit_data, qd_id);
775         CHECK_MEMBER(qunit_data, qd_type);
776         CHECK_MEMBER(qunit_data, qd_count);
777         CHECK_MEMBER(qunit_data, qd_isblk);
778 }
779
780 static void
781 system_string (char *cmdline, char *str, int len)
782 {
783         int   fds[2];
784         int   rc;
785         pid_t pid;
786
787         rc = pipe(fds);
788         if (rc != 0)
789                 abort();
790
791         pid = fork();
792         if (pid == 0) {
793                 /* child */
794                 int   fd = fileno(stdout);
795
796                 rc = dup2(fds[1], fd);
797                 if (rc != fd)
798                         abort();
799
800                 exit(system(cmdline));
801                 /* notreached */
802         } else if ((int)pid < 0) {
803                 abort();
804         } else {
805                 FILE *f = fdopen(fds[0], "r");
806
807                 if (f == NULL)
808                         abort();
809
810                 close(fds[1]);
811
812                 if (fgets(str, len, f) == NULL)
813                         abort();
814
815                 if (waitpid(pid, &rc, 0) != pid)
816                         abort();
817
818                 if (!WIFEXITED(rc) || WEXITSTATUS(rc) != 0)
819                         abort();
820
821                 if (strnlen(str, len) == len)
822                         str[len - 1] = 0;
823
824                 if (str[strlen(str) - 1] == '\n')
825                         str[strlen(str) - 1] = 0;
826
827                 fclose(f);
828         }
829 }
830
831 int
832 main(int argc, char **argv)
833 {
834         char unameinfo[80];
835         char gccinfo[80];
836
837         system_string("uname -a", unameinfo, sizeof(unameinfo));
838         system_string(CC " -v 2>&1 | tail -1", gccinfo, sizeof(gccinfo));
839
840         printf ("void lustre_assert_wire_constants(void)\n"
841                 "{\n"
842                 "        /* Wire protocol assertions generated by 'wirecheck'\n"
843                 "         * running on %s\n"
844                 "         * with %s */\n"
845                 "\n", unameinfo, gccinfo);
846
847         BLANK_LINE ();
848
849         COMMENT("Constants...");
850         CHECK_DEFINE(PTLRPC_MSG_MAGIC);
851         CHECK_DEFINE(PTLRPC_MSG_VERSION);
852
853         CHECK_VALUE(PTL_RPC_MSG_REQUEST);
854         CHECK_VALUE(PTL_RPC_MSG_ERR);
855         CHECK_VALUE(PTL_RPC_MSG_REPLY);
856
857         CHECK_VALUE(MSG_LAST_REPLAY);
858         CHECK_VALUE(MSG_RESENT);
859         CHECK_VALUE(MSG_REPLAY);
860
861         CHECK_VALUE(MSG_CONNECT_RECOVERING);
862         CHECK_VALUE(MSG_CONNECT_RECONNECT);
863         CHECK_VALUE(MSG_CONNECT_REPLAYABLE);
864
865         CHECK_VALUE(OST_REPLY);
866         CHECK_VALUE(OST_GETATTR);
867         CHECK_VALUE(OST_SETATTR);
868         CHECK_VALUE(OST_READ);
869         CHECK_VALUE(OST_WRITE);
870         CHECK_VALUE(OST_CREATE);
871         CHECK_VALUE(OST_DESTROY);
872         CHECK_VALUE(OST_GET_INFO);
873         CHECK_VALUE(OST_CONNECT);
874         CHECK_VALUE(OST_DISCONNECT);
875         CHECK_VALUE(OST_PUNCH);
876         CHECK_VALUE(OST_OPEN);
877         CHECK_VALUE(OST_CLOSE);
878         CHECK_VALUE(OST_STATFS);
879         CHECK_VALUE(OST_SAN_READ);
880         CHECK_VALUE(OST_SAN_WRITE);
881         CHECK_VALUE(OST_SYNC);
882         CHECK_VALUE(OST_QUOTACHECK);
883         CHECK_VALUE(OST_QUOTACTL);
884         CHECK_VALUE(OST_LAST_OPC);
885
886         CHECK_DEFINE(OBD_OBJECT_EOF);
887
888         CHECK_VALUE(MDS_GETATTR);
889         CHECK_VALUE(MDS_GETATTR_NAME);
890         CHECK_VALUE(MDS_CLOSE);
891         CHECK_VALUE(MDS_REINT);
892         CHECK_VALUE(MDS_READPAGE);
893         CHECK_VALUE(MDS_CONNECT);
894         CHECK_VALUE(MDS_DISCONNECT);
895         CHECK_VALUE(MDS_GETSTATUS);
896         CHECK_VALUE(MDS_STATFS);
897         CHECK_VALUE(MDS_PIN);
898         CHECK_VALUE(MDS_UNPIN);
899         CHECK_VALUE(MDS_SYNC);
900         CHECK_VALUE(MDS_DONE_WRITING);
901         CHECK_VALUE(MDS_SET_INFO);
902         CHECK_VALUE(MDS_QUOTACHECK);
903         CHECK_VALUE(MDS_QUOTACTL);
904         CHECK_VALUE(MDS_LAST_OPC);
905
906         CHECK_VALUE(REINT_SETATTR);
907         CHECK_VALUE(REINT_CREATE);
908         CHECK_VALUE(REINT_LINK);
909         CHECK_VALUE(REINT_UNLINK);
910         CHECK_VALUE(REINT_RENAME);
911         CHECK_VALUE(REINT_OPEN);
912         CHECK_VALUE(REINT_MAX);
913
914         CHECK_VALUE(DISP_IT_EXECD);
915         CHECK_VALUE(DISP_LOOKUP_EXECD);
916         CHECK_VALUE(DISP_LOOKUP_NEG);
917         CHECK_VALUE(DISP_LOOKUP_POS);
918         CHECK_VALUE(DISP_OPEN_CREATE);
919         CHECK_VALUE(DISP_OPEN_OPEN);
920
921         CHECK_VALUE(MDS_STATUS_CONN);
922         CHECK_VALUE(MDS_STATUS_LOV);
923
924         CHECK_VALUE(LDLM_ENQUEUE);
925         CHECK_VALUE(LDLM_CONVERT);
926         CHECK_VALUE(LDLM_CANCEL);
927         CHECK_VALUE(LDLM_BL_CALLBACK);
928         CHECK_VALUE(LDLM_CP_CALLBACK);
929         CHECK_VALUE(LDLM_GL_CALLBACK);
930         CHECK_VALUE(LDLM_LAST_OPC);
931
932         CHECK_VALUE(LCK_EX);
933         CHECK_VALUE(LCK_PW);
934         CHECK_VALUE(LCK_PR);
935         CHECK_VALUE(LCK_CW);
936         CHECK_VALUE(LCK_CR);
937         CHECK_VALUE(LCK_NL);
938         CHECK_VALUE(LCK_GROUP);
939         CHECK_VALUE(LCK_MAXMODE);
940
941         CHECK_VALUE(MGS_CONNECT);
942         CHECK_VALUE(MGS_DISCONNECT);
943         CHECK_VALUE(MGS_EXCEPTION);
944         CHECK_VALUE(MGS_TARGET_REG);
945         CHECK_VALUE(MGS_TARGET_DEL);
946
947         CHECK_VALUE(OBD_PING);
948         CHECK_VALUE(OBD_LOG_CANCEL);
949         CHECK_VALUE(OBD_QC_CALLBACK);
950         CHECK_VALUE(OBD_LAST_OPC);
951
952         CHECK_VALUE(QUOTA_DQACQ);
953         CHECK_VALUE(QUOTA_DQREL);
954
955         CHECK_VALUE(OBD_CONNECT_RDONLY);
956         CHECK_VALUE(OBD_CONNECT_INDEX);
957         CHECK_VALUE(OBD_CONNECT_GRANT);
958         CHECK_VALUE(OBD_CONNECT_SRVLOCK);
959         CHECK_VALUE(OBD_CONNECT_VERSION);
960         CHECK_VALUE(OBD_CONNECT_REQPORTAL);
961         CHECK_VALUE(OBD_CONNECT_ACL);
962         CHECK_VALUE(OBD_CONNECT_XATTR);
963         CHECK_VALUE(OBD_CONNECT_CROW);
964         CHECK_VALUE(OBD_CONNECT_TRUNCLOCK);
965         CHECK_VALUE(OBD_CONNECT_TRANSNO);
966
967         COMMENT("Sizes and Offsets");
968         BLANK_LINE();
969         check_lustre_handle();
970         check_lustre_msg();
971         check_obdo();
972         check_lov_mds_md_v1();
973         check_obd_statfs();
974         check_obd_ioobj();
975         check_obd_quotactl();
976         check_niobuf_remote();
977         check_ost_body();
978         check_ll_fid();
979         check_mds_status_req();
980         check_mds_body();
981         check_mds_rec_setattr();
982         check_mds_rec_create();
983         check_mds_rec_link();
984         check_mds_rec_unlink();
985         check_mds_rec_rename();
986         check_lov_desc();
987         check_ldlm_res_id();
988         check_ldlm_extent();
989         check_ldlm_flock();
990         check_ldlm_intent();
991         check_ldlm_resource_desc();
992         check_ldlm_lock_desc();
993         check_ldlm_request();
994         check_ldlm_reply();
995         check_ldlm_lvb();
996         check_llog_logid();
997         check_llog_catid();
998         check_llog_rec_hdr();
999         check_llog_rec_tail();
1000         check_llog_logid_rec();
1001         check_llog_create_rec();
1002         check_llog_orphan_rec();
1003         check_llog_unlink_rec();
1004         check_llog_setattr_rec();
1005         check_llog_size_change_rec();
1006         check_llog_gen();
1007         check_llog_gen_rec();
1008         check_llog_log_hdr();
1009         check_llog_cookie();
1010         check_llogd_body();
1011         check_llogd_conn_body();
1012         check_qunit_data();
1013
1014         printf("}\n\n");
1015
1016         return(0);
1017 }