Whamcloud - gitweb
Branch: HEAD
[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 #define CHECK_DEFINE(a)                                         \
24 do {                                                            \
25         printf("        LASSERTF("#a" == "STRINGIFY(a)          \
26                ",\" found %%lld\\n\",\n                 "       \
27                "(long long)"#a");\n");   \
28 } while(0)
29
30 #define CHECK_VALUE(a)                                          \
31 do {                                                            \
32         printf("        LASSERTF("#a                            \
33                " == %llu, \" found %%llu\\n\",\n                 "\
34                "(unsigned long long)"#a");\n",(unsigned long long)a);\
35 } while(0)
36
37 #define CHECK_MEMBER_OFFSET(s,m)                                \
38 do {                                                            \
39         CHECK_VALUE((int)offsetof(struct s, m));                \
40 } while(0)
41
42 #define CHECK_MEMBER_SIZEOF(s,m)                                \
43 do {                                                            \
44         CHECK_VALUE((int)sizeof(((struct s *)0)->m));           \
45 } while(0)
46
47 #define CHECK_MEMBER(s,m)                                       \
48 do {                                                            \
49         CHECK_MEMBER_OFFSET(s, m);                              \
50                 CHECK_MEMBER_SIZEOF(s, m);                      \
51 } while(0)
52
53 #define CHECK_STRUCT(s)                                         \
54 do {                                                            \
55         COMMENT("Checks for struct "#s);                        \
56                 CHECK_VALUE((int)sizeof(struct s));             \
57 } while(0)
58
59
60
61 void check1(void)
62 {
63 #define VALUE 1234567
64
65         CHECK_VALUE(VALUE);
66         CHECK_DEFINE(VALUE);
67 }
68
69 void
70 check_lustre_handle(void)
71 {
72         BLANK_LINE();
73         CHECK_STRUCT(lustre_handle);
74         CHECK_MEMBER(lustre_handle, cookie);
75 }
76
77 void
78 check_lustre_msg(void)
79 {
80         BLANK_LINE();
81         CHECK_STRUCT(lustre_msg);
82         CHECK_MEMBER(lustre_msg, handle);
83         CHECK_MEMBER(lustre_msg, magic);
84         CHECK_MEMBER(lustre_msg, type);
85         CHECK_MEMBER(lustre_msg, version);
86         CHECK_MEMBER(lustre_msg, opc);
87         CHECK_MEMBER(lustre_msg, last_xid);
88         CHECK_MEMBER(lustre_msg, last_committed);
89         CHECK_MEMBER(lustre_msg, transno);
90         CHECK_MEMBER(lustre_msg, status);
91         CHECK_MEMBER(lustre_msg, flags);
92         CHECK_MEMBER(lustre_msg, bufcount);
93         CHECK_MEMBER(lustre_msg, buflens[7]);
94 }
95
96 void
97 check_obdo(void)
98 {
99         BLANK_LINE();
100         CHECK_STRUCT(obdo);
101         CHECK_MEMBER(obdo, o_id);
102         CHECK_MEMBER(obdo, o_gr);
103         CHECK_MEMBER(obdo, o_atime);
104         CHECK_MEMBER(obdo, o_mtime);
105         CHECK_MEMBER(obdo, o_ctime);
106         CHECK_MEMBER(obdo, o_size);
107         CHECK_MEMBER(obdo, o_blocks);
108         CHECK_MEMBER(obdo, o_grant);
109         CHECK_MEMBER(obdo, o_blksize);
110         CHECK_MEMBER(obdo, o_mode);
111         CHECK_MEMBER(obdo, o_uid);
112         CHECK_MEMBER(obdo, o_gid);
113         CHECK_MEMBER(obdo, o_flags);
114         CHECK_MEMBER(obdo, o_nlink);
115         CHECK_MEMBER(obdo, o_generation);
116         CHECK_MEMBER(obdo, o_valid);
117         CHECK_MEMBER(obdo, o_misc);
118         CHECK_MEMBER(obdo, o_easize);
119         CHECK_MEMBER(obdo, o_mds);
120         CHECK_MEMBER(obdo, o_mds);
121         CHECK_MEMBER(obdo, o_fsuid);
122         CHECK_MEMBER(obdo, o_inline);
123
124         CHECK_VALUE(OBD_MD_FLID);
125         CHECK_VALUE(OBD_MD_FLATIME);
126         CHECK_VALUE(OBD_MD_FLMTIME);
127         CHECK_VALUE(OBD_MD_FLCTIME);
128         CHECK_VALUE(OBD_MD_FLSIZE);
129         CHECK_VALUE(OBD_MD_FLBLOCKS);
130         CHECK_VALUE(OBD_MD_FLBLKSZ);
131         CHECK_VALUE(OBD_MD_FLMODE);
132         CHECK_VALUE(OBD_MD_FLTYPE);
133         CHECK_VALUE(OBD_MD_FLUID);
134         CHECK_VALUE(OBD_MD_FLGID);
135         CHECK_VALUE(OBD_MD_FLFLAGS);
136         CHECK_VALUE(OBD_MD_FLNLINK);
137         CHECK_VALUE(OBD_MD_FLGENER);
138         CHECK_VALUE(OBD_MD_FLINLINE);
139         CHECK_VALUE(OBD_MD_FLRDEV);
140         CHECK_VALUE(OBD_MD_FLEASIZE);
141         CHECK_VALUE(OBD_MD_LINKNAME);
142         CHECK_VALUE(OBD_MD_FLHANDLE);
143         CHECK_VALUE(OBD_MD_FLCKSUM);
144         CHECK_VALUE(OBD_MD_FLQOS);
145         CHECK_VALUE(OBD_MD_FLOSCOPQ);
146         CHECK_VALUE(OBD_MD_FLCOOKIE);
147         CHECK_VALUE(OBD_MD_FLGROUP);
148
149         CHECK_VALUE(OBD_FL_INLINEDATA);
150         CHECK_VALUE(OBD_FL_OBDMDEXISTS);
151         CHECK_VALUE(OBD_FL_DELORPHAN);
152         CHECK_VALUE(OBD_FL_NORPC);
153         CHECK_VALUE(OBD_FL_IDONLY);
154         CHECK_VALUE(OBD_FL_RECREATE_OBJS);
155 }
156
157 void
158 check_lov_mds_md_v1(void)
159 {
160         BLANK_LINE();
161         CHECK_STRUCT(lov_mds_md_v1);
162         CHECK_MEMBER(lov_mds_md_v1, lmm_magic);
163         CHECK_MEMBER(lov_mds_md_v1, lmm_pattern);
164         CHECK_MEMBER(lov_mds_md_v1, lmm_object_id);
165         CHECK_MEMBER(lov_mds_md_v1, lmm_object_gr);
166         CHECK_MEMBER(lov_mds_md_v1, lmm_stripe_size);
167         CHECK_MEMBER(lov_mds_md_v1, lmm_stripe_count);
168         CHECK_MEMBER(lov_mds_md_v1, lmm_objects);
169
170         BLANK_LINE();
171         CHECK_STRUCT(lov_ost_data_v1);
172         CHECK_MEMBER(lov_ost_data_v1, l_object_id);
173         CHECK_MEMBER(lov_ost_data_v1, l_object_gr);
174         CHECK_MEMBER(lov_ost_data_v1, l_ost_gen);
175         CHECK_MEMBER(lov_ost_data_v1, l_ost_idx);
176
177         CHECK_VALUE(LOV_MAGIC_V0);
178         CHECK_VALUE(LOV_MAGIC_V1);
179
180         CHECK_VALUE(LOV_PATTERN_RAID0);
181         CHECK_VALUE(LOV_PATTERN_RAID1);
182 }
183
184 void
185 check_obd_statfs(void)
186 {
187         BLANK_LINE();
188         CHECK_STRUCT(obd_statfs);
189         CHECK_MEMBER(obd_statfs, os_type);
190         CHECK_MEMBER(obd_statfs, os_blocks);
191         CHECK_MEMBER(obd_statfs, os_bfree);
192         CHECK_MEMBER(obd_statfs, os_bavail);
193         CHECK_MEMBER(obd_statfs, os_ffree);
194         CHECK_MEMBER(obd_statfs, os_fsid);
195         CHECK_MEMBER(obd_statfs, os_bsize);
196         CHECK_MEMBER(obd_statfs, os_namelen);
197         CHECK_MEMBER(obd_statfs, os_spare);
198 }
199
200 void
201 check_obd_ioobj(void)
202 {
203         BLANK_LINE();
204         CHECK_STRUCT(obd_ioobj);
205         CHECK_MEMBER(obd_ioobj, ioo_id);
206         CHECK_MEMBER(obd_ioobj, ioo_gr);
207         CHECK_MEMBER(obd_ioobj, ioo_type);
208         CHECK_MEMBER(obd_ioobj, ioo_bufcnt);
209 }
210
211 void
212 check_niobuf_remote(void)
213 {
214         BLANK_LINE();
215         CHECK_STRUCT(niobuf_remote);
216         CHECK_MEMBER(niobuf_remote, offset);
217         CHECK_MEMBER(niobuf_remote, len);
218         CHECK_MEMBER(niobuf_remote, flags);
219
220         CHECK_VALUE(OBD_BRW_READ);
221         CHECK_VALUE(OBD_BRW_WRITE);
222         CHECK_VALUE(OBD_BRW_SYNC);
223         CHECK_VALUE(OBD_BRW_FROM_GRANT);
224 }
225
226 void
227 check_ost_body(void)
228 {
229         BLANK_LINE();
230         CHECK_STRUCT(ost_body);
231         CHECK_MEMBER(ost_body, oa);
232 }
233
234 void
235 check_lustre_stc(void)
236 {
237         BLANK_LINE();
238         CHECK_STRUCT(lustre_stc);
239         CHECK_MEMBER(lustre_stc, u.e3s.l3s_ino);
240         CHECK_MEMBER(lustre_stc, u.e3s.l3s_gen);
241         CHECK_MEMBER(lustre_stc, u.e3s.l3s_type);
242 }
243
244 void
245 check_mds_status_req(void)
246 {
247         BLANK_LINE();
248         CHECK_STRUCT(mds_status_req);
249         CHECK_MEMBER(mds_status_req, flags);
250         CHECK_MEMBER(mds_status_req, repbuf);
251 }
252
253 void
254 check_mds_body(void)
255 {
256         BLANK_LINE();
257         CHECK_STRUCT(mds_body);
258         CHECK_MEMBER(mds_body, id1);
259         CHECK_MEMBER(mds_body, id2);
260         CHECK_MEMBER(mds_body, handle);
261         CHECK_MEMBER(mds_body, size);
262         CHECK_MEMBER(mds_body, blocks);
263         CHECK_MEMBER(mds_body, io_epoch);
264         CHECK_MEMBER(mds_body, valid);
265         CHECK_MEMBER(mds_body, mode);
266         CHECK_MEMBER(mds_body, uid);
267         CHECK_MEMBER(mds_body, gid);
268         CHECK_MEMBER(mds_body, mtime);
269         CHECK_MEMBER(mds_body, ctime);
270         CHECK_MEMBER(mds_body, atime);
271         CHECK_MEMBER(mds_body, flags);
272         CHECK_MEMBER(mds_body, rdev);
273         CHECK_MEMBER(mds_body, nlink);
274         CHECK_MEMBER(mds_body, eadatasize);
275
276         CHECK_VALUE(FMODE_READ);
277         CHECK_VALUE(FMODE_WRITE);
278         CHECK_VALUE(FMODE_EXEC);
279         CHECK_VALUE(MDS_OPEN_CREAT);
280         CHECK_VALUE(MDS_OPEN_EXCL);
281         CHECK_VALUE(MDS_OPEN_TRUNC);
282         CHECK_VALUE(MDS_OPEN_APPEND);
283         CHECK_VALUE(MDS_OPEN_SYNC);
284         CHECK_VALUE(MDS_OPEN_DIRECTORY);
285         CHECK_VALUE(MDS_OPEN_DELAY_CREATE);
286         CHECK_VALUE(MDS_OPEN_HAS_EA);
287 }
288
289 void
290 check_mds_rec_setattr(void)
291 {
292         BLANK_LINE();
293         CHECK_STRUCT(mds_rec_setattr);
294         CHECK_MEMBER(mds_rec_setattr, sa_opcode);
295         CHECK_MEMBER(mds_rec_setattr, sa_valid);
296         CHECK_MEMBER(mds_rec_setattr, sa_id);
297         CHECK_MEMBER(mds_rec_setattr, sa_mode);
298         CHECK_MEMBER(mds_rec_setattr, sa_uid);
299         CHECK_MEMBER(mds_rec_setattr, sa_gid);
300         CHECK_MEMBER(mds_rec_setattr, sa_attr_flags);
301         CHECK_MEMBER(mds_rec_setattr, sa_size);
302         CHECK_MEMBER(mds_rec_setattr, sa_atime);
303         CHECK_MEMBER(mds_rec_setattr, sa_mtime);
304         CHECK_MEMBER(mds_rec_setattr, sa_ctime);
305 }
306
307 void
308 check_mds_rec_create(void)
309 {
310         BLANK_LINE();
311         CHECK_STRUCT(mds_rec_create);
312         CHECK_MEMBER(mds_rec_create, cr_opcode);
313         CHECK_MEMBER(mds_rec_create, cr_flags);
314         CHECK_MEMBER(mds_rec_create, cr_mode);
315         CHECK_MEMBER(mds_rec_create, cr_padding);
316         CHECK_MEMBER(mds_rec_create, cr_id);
317         CHECK_MEMBER(mds_rec_create, cr_replayid);
318         CHECK_MEMBER(mds_rec_create, cr_time);
319         CHECK_MEMBER(mds_rec_create, cr_rdev);
320 }
321
322 void
323 check_mds_rec_link(void)
324 {
325         BLANK_LINE();
326         CHECK_STRUCT(mds_rec_link);
327         CHECK_MEMBER(mds_rec_link, lk_opcode);
328         CHECK_MEMBER(mds_rec_link, lk_padding);
329         CHECK_MEMBER(mds_rec_link, lk_id1);
330         CHECK_MEMBER(mds_rec_link, lk_id2);
331         CHECK_MEMBER(mds_rec_link, lk_time);
332 }
333
334 void
335 check_mds_rec_unlink(void)
336 {
337         BLANK_LINE();
338         CHECK_STRUCT(mds_rec_unlink);
339         CHECK_MEMBER(mds_rec_unlink, ul_opcode);
340         CHECK_MEMBER(mds_rec_unlink, ul_mode);
341         CHECK_MEMBER(mds_rec_unlink, ul_id1);
342         CHECK_MEMBER(mds_rec_unlink, ul_id2);
343         CHECK_MEMBER(mds_rec_unlink, ul_time);
344 }
345
346 void
347 check_mds_rec_rename(void)
348 {
349         BLANK_LINE();
350         CHECK_STRUCT(mds_rec_rename);
351         CHECK_MEMBER(mds_rec_rename, rn_opcode);
352         CHECK_MEMBER(mds_rec_rename, rn_padding);
353         CHECK_MEMBER(mds_rec_rename, rn_id1);
354         CHECK_MEMBER(mds_rec_rename, rn_id2);
355         CHECK_MEMBER(mds_rec_rename, rn_time);
356 }
357
358 void
359 check_lov_desc(void)
360 {
361         BLANK_LINE();
362         CHECK_STRUCT(lov_desc);
363         CHECK_MEMBER(lov_desc, ld_tgt_count);
364         CHECK_MEMBER(lov_desc, ld_active_tgt_count);
365         CHECK_MEMBER(lov_desc, ld_default_stripe_count);
366         CHECK_MEMBER(lov_desc, ld_pattern);
367         CHECK_MEMBER(lov_desc, ld_default_stripe_size);
368         CHECK_MEMBER(lov_desc, ld_default_stripe_offset);
369         CHECK_MEMBER(lov_desc, ld_uuid);
370 }
371
372 void
373 check_ldlm_res_id(void)
374 {
375         BLANK_LINE();
376         CHECK_STRUCT(ldlm_res_id);
377         CHECK_MEMBER(ldlm_res_id, name[RES_NAME_SIZE]);
378 }
379
380 void
381 check_ldlm_extent(void)
382 {
383         BLANK_LINE();
384         CHECK_STRUCT(ldlm_extent);
385         CHECK_MEMBER(ldlm_extent, start);
386         CHECK_MEMBER(ldlm_extent, end);
387         CHECK_MEMBER(ldlm_extent, gid);
388 }
389
390 void
391 check_ldlm_flock(void)
392 {
393         BLANK_LINE();
394         CHECK_STRUCT(ldlm_flock);
395         CHECK_MEMBER(ldlm_flock, start);
396         CHECK_MEMBER(ldlm_flock, end);
397         CHECK_MEMBER(ldlm_flock, pid);
398         CHECK_MEMBER(ldlm_flock, nid);
399         CHECK_MEMBER(ldlm_flock, blocking_pid);
400         CHECK_MEMBER(ldlm_flock, blocking_nid);
401 }
402
403 void
404 check_ldlm_intent(void)
405 {
406         BLANK_LINE();
407         CHECK_STRUCT(ldlm_intent);
408         CHECK_MEMBER(ldlm_intent, opc);
409 }
410
411 void
412 check_ldlm_resource_desc(void)
413 {
414         BLANK_LINE();
415         CHECK_STRUCT(ldlm_resource_desc);
416         CHECK_MEMBER(ldlm_resource_desc, lr_type);
417         CHECK_MEMBER(ldlm_resource_desc, lr_name);
418 }
419
420 void
421 check_ldlm_lock_desc(void)
422 {
423         BLANK_LINE();
424         CHECK_STRUCT(ldlm_lock_desc);
425         CHECK_MEMBER(ldlm_lock_desc, l_resource);
426         CHECK_MEMBER(ldlm_lock_desc, l_req_mode);
427         CHECK_MEMBER(ldlm_lock_desc, l_granted_mode);
428         CHECK_MEMBER(ldlm_lock_desc, l_policy_data);
429 }
430
431 void
432 check_ldlm_request(void)
433 {
434         BLANK_LINE();
435         CHECK_STRUCT(ldlm_request);
436         CHECK_MEMBER(ldlm_request, lock_flags);
437         CHECK_MEMBER(ldlm_request, lock_desc);
438         CHECK_MEMBER(ldlm_request, lock_handle1);
439         CHECK_MEMBER(ldlm_request, lock_handle2);
440 }
441
442 void
443 check_ldlm_reply(void)
444 {
445         BLANK_LINE();
446         CHECK_STRUCT(ldlm_reply);
447         CHECK_MEMBER(ldlm_reply, lock_flags);
448         CHECK_MEMBER(ldlm_request, lock_desc);
449         CHECK_MEMBER(ldlm_reply, lock_handle);
450         CHECK_MEMBER(ldlm_reply, lock_policy_res1);
451         CHECK_MEMBER(ldlm_reply, lock_policy_res2);
452 }
453
454 void
455 check_ldlm_lvb(void)
456 {
457         BLANK_LINE();
458         CHECK_STRUCT(ost_lvb);
459         CHECK_MEMBER(ost_lvb, lvb_size);
460         CHECK_MEMBER(ost_lvb, lvb_mtime);
461         CHECK_MEMBER(ost_lvb, lvb_atime);
462         CHECK_MEMBER(ost_lvb, lvb_ctime);
463         CHECK_MEMBER(ost_lvb, lvb_blocks);
464 }
465
466 void
467 check_ptlbd_op(void)
468 {
469         BLANK_LINE();
470         CHECK_STRUCT(ptlbd_op);
471         CHECK_MEMBER(ptlbd_op, op_cmd);
472         CHECK_MEMBER(ptlbd_op, op_lun);
473         CHECK_MEMBER(ptlbd_op, op_niob_cnt);
474         CHECK_MEMBER(ptlbd_op, op__padding);
475         CHECK_MEMBER(ptlbd_op, op_block_cnt);
476 }
477
478 void
479 check_ptlbd_niob(void)
480 {
481         BLANK_LINE();
482         CHECK_STRUCT(ptlbd_niob);
483         CHECK_MEMBER(ptlbd_niob, n_xid);
484         CHECK_MEMBER(ptlbd_niob, n_block_nr);
485         CHECK_MEMBER(ptlbd_niob, n_offset);
486         CHECK_MEMBER(ptlbd_niob, n_length);
487 }
488
489 void
490 check_ptlbd_rsp(void)
491 {
492         BLANK_LINE();
493         CHECK_STRUCT(ptlbd_rsp);
494         CHECK_MEMBER(ptlbd_rsp, r_status);
495         CHECK_MEMBER(ptlbd_rsp, r_error_cnt);
496 }
497
498 void
499 check_llog_logid(void)
500 {
501         BLANK_LINE();
502         CHECK_STRUCT(llog_logid);
503         CHECK_MEMBER(llog_logid, lgl_oid);
504         CHECK_MEMBER(llog_logid, lgl_ogr);
505         CHECK_MEMBER(llog_logid, lgl_ogen);
506
507         CHECK_VALUE(OST_SZ_REC);
508         CHECK_VALUE(OST_RAID1_REC);
509         CHECK_VALUE(MDS_UNLINK_REC);
510         CHECK_VALUE(OBD_CFG_REC);
511         CHECK_VALUE(PTL_CFG_REC);
512         CHECK_VALUE(LLOG_GEN_REC);
513         CHECK_VALUE(LLOG_HDR_MAGIC);
514         CHECK_VALUE(LLOG_LOGID_MAGIC);
515 }
516
517 void
518 check_llog_catid(void)
519 {
520         BLANK_LINE();
521         CHECK_STRUCT(llog_catid);
522         CHECK_MEMBER(llog_catid, lci_logid);
523 }
524
525 void
526 check_llog_rec_hdr(void)
527 {
528         BLANK_LINE();
529         CHECK_STRUCT(llog_rec_hdr);
530         CHECK_MEMBER(llog_rec_hdr, lrh_len);
531         CHECK_MEMBER(llog_rec_hdr, lrh_index);
532         CHECK_MEMBER(llog_rec_hdr, lrh_type);
533 }
534
535 void
536 check_llog_rec_tail(void)
537 {
538         BLANK_LINE();
539         CHECK_STRUCT(llog_rec_tail);
540         CHECK_MEMBER(llog_rec_tail, lrt_len);
541         CHECK_MEMBER(llog_rec_tail, lrt_index);
542 }
543
544 void
545 check_llog_logid_rec(void)
546 {
547         BLANK_LINE();
548         CHECK_STRUCT(llog_logid_rec);
549         CHECK_MEMBER(llog_logid_rec, lid_hdr);
550         CHECK_MEMBER(llog_logid_rec, lid_id);
551         CHECK_MEMBER(llog_logid_rec, lid_tail);
552 }
553
554 void
555 check_llog_create_rec(void)
556 {
557         BLANK_LINE();
558         CHECK_STRUCT(llog_create_rec);
559         CHECK_MEMBER(llog_create_rec, lcr_hdr);
560         CHECK_MEMBER(llog_create_rec, lcr_id);
561         CHECK_MEMBER(llog_create_rec, lcr_oid);
562         CHECK_MEMBER(llog_create_rec, lcr_ogen);
563 }
564
565 void
566 check_llog_orphan_rec(void)
567 {
568         BLANK_LINE();
569         CHECK_STRUCT(llog_orphan_rec);
570         CHECK_MEMBER(llog_orphan_rec, lor_hdr);
571         CHECK_MEMBER(llog_orphan_rec, lor_oid);
572         CHECK_MEMBER(llog_orphan_rec, lor_ogen);
573         CHECK_MEMBER(llog_orphan_rec, lor_tail);
574 }
575
576 void
577 check_llog_unlink_rec(void)
578 {
579         BLANK_LINE();
580         CHECK_STRUCT(llog_unlink_rec);
581         CHECK_MEMBER(llog_unlink_rec, lur_hdr);
582         CHECK_MEMBER(llog_unlink_rec, lur_oid);
583         CHECK_MEMBER(llog_unlink_rec, lur_ogen);
584         CHECK_MEMBER(llog_unlink_rec, lur_tail);
585 }
586
587 void
588 check_llog_size_change_rec(void)
589 {
590         BLANK_LINE();
591         CHECK_STRUCT(llog_size_change_rec);
592         CHECK_MEMBER(llog_size_change_rec, lsc_hdr);
593         CHECK_MEMBER(llog_size_change_rec, lsc_id);
594         CHECK_MEMBER(llog_size_change_rec, lsc_io_epoch);
595         CHECK_MEMBER(llog_size_change_rec, lsc_tail);
596 }
597
598 void
599 check_llog_gen(void)
600 {
601         BLANK_LINE();
602         CHECK_STRUCT(llog_gen);
603         CHECK_MEMBER(llog_gen, mnt_cnt);
604         CHECK_MEMBER(llog_gen, conn_cnt);
605 }
606
607 void
608 check_llog_gen_rec(void)
609 {
610         BLANK_LINE();
611         CHECK_STRUCT(llog_gen_rec);
612         CHECK_MEMBER(llog_gen_rec, lgr_hdr);
613         CHECK_MEMBER(llog_gen_rec, lgr_gen);
614         CHECK_MEMBER(llog_gen_rec, lgr_tail);
615 }
616
617 void
618 check_llog_log_hdr(void)
619 {
620         BLANK_LINE();
621         CHECK_STRUCT(llog_log_hdr);
622         CHECK_MEMBER(llog_log_hdr, llh_hdr);
623         CHECK_MEMBER(llog_log_hdr, llh_timestamp);
624         CHECK_MEMBER(llog_log_hdr, llh_count);
625         CHECK_MEMBER(llog_log_hdr, llh_bitmap_offset);
626         CHECK_MEMBER(llog_log_hdr, llh_size);
627         CHECK_MEMBER(llog_log_hdr, llh_flags);
628         CHECK_MEMBER(llog_log_hdr, llh_cat_idx);
629         CHECK_MEMBER(llog_log_hdr, llh_tgtuuid);
630         CHECK_MEMBER(llog_log_hdr, llh_bitmap);
631         CHECK_MEMBER(llog_log_hdr, llh_tail);
632 }
633
634 void
635 check_llog_cookie(void)
636 {
637         BLANK_LINE();
638         CHECK_STRUCT(llog_cookie);
639         CHECK_MEMBER(llog_cookie, lgc_lgl);
640         CHECK_MEMBER(llog_cookie, lgc_subsys);
641         CHECK_MEMBER(llog_cookie, lgc_index);
642 }
643
644 void
645 check_llogd_body(void)
646 {
647         BLANK_LINE();
648         CHECK_STRUCT(llogd_body);
649         CHECK_MEMBER(llogd_body, lgd_logid);
650         CHECK_MEMBER(llogd_body, lgd_ctxt_idx);
651         CHECK_MEMBER(llogd_body, lgd_llh_flags);
652         CHECK_MEMBER(llogd_body, lgd_index);
653         CHECK_MEMBER(llogd_body, lgd_saved_index);
654         CHECK_MEMBER(llogd_body, lgd_len);
655         CHECK_MEMBER(llogd_body, lgd_cur_offset);
656
657         CHECK_VALUE(LLOG_ORIGIN_HANDLE_OPEN);
658         CHECK_VALUE(LLOG_ORIGIN_HANDLE_NEXT_BLOCK);
659         CHECK_VALUE(LLOG_ORIGIN_HANDLE_READ_HEADER);
660         CHECK_VALUE(LLOG_ORIGIN_HANDLE_WRITE_REC);
661         CHECK_VALUE(LLOG_ORIGIN_HANDLE_CLOSE);
662         CHECK_VALUE(LLOG_ORIGIN_CONNECT);
663         CHECK_VALUE(LLOG_CATINFO);
664 }
665
666 void
667 check_llogd_conn_body(void)
668 {
669         BLANK_LINE();
670         CHECK_STRUCT(llogd_conn_body);
671         CHECK_MEMBER(llogd_conn_body, lgdc_gen);
672         CHECK_MEMBER(llogd_conn_body, lgdc_logid);
673         CHECK_MEMBER(llogd_conn_body, lgdc_ctxt_idx);
674 }
675
676 void
677 check_lustre_capa(void)
678 {
679         BLANK_LINE();
680         CHECK_STRUCT(lustre_capa);
681         CHECK_MEMBER(lustre_capa, lc_uid);
682         CHECK_MEMBER(lustre_capa, lc_op);
683         CHECK_MEMBER(lustre_capa, lc_ino);
684         CHECK_MEMBER(lustre_capa, lc_mdsid);
685         CHECK_MEMBER(lustre_capa, lc_keyid);
686         CHECK_MEMBER(lustre_capa, lc_expiry);
687         CHECK_MEMBER(lustre_capa, lc_flags);
688         CHECK_MEMBER(lustre_capa, lc_hmac);
689 }
690
691 void
692 check_lustre_capa_key(void)
693 {
694         BLANK_LINE();
695         CHECK_STRUCT(lustre_capa_key);
696         CHECK_MEMBER(lustre_capa_key, lk_mdsid);
697         CHECK_MEMBER(lustre_capa_key, lk_keyid);
698         CHECK_MEMBER(lustre_capa_key, lk_expiry);
699         CHECK_MEMBER(lustre_capa_key, lk_key);
700 }
701
702 void
703 system_string (char *cmdline, char *str, int len)
704 {
705         int   fds[2];
706         int   rc;
707         pid_t pid;
708
709         rc = pipe(fds);
710         if (rc != 0)
711                 abort();
712
713         pid = fork();
714         if (pid == 0) {
715                 /* child */
716                 int   fd = fileno(stdout);
717
718                 rc = dup2(fds[1], fd);
719                 if (rc != fd)
720                         abort();
721
722                 exit(system(cmdline));
723                 /* notreached */
724         } else if ((int)pid < 0) {
725                 abort();
726         } else {
727                 FILE *f = fdopen(fds[0], "r");
728
729                 if (f == NULL)
730                         abort();
731
732                 close(fds[1]);
733
734                 if (fgets(str, len, f) == NULL)
735                         abort();
736
737                 if (waitpid(pid, &rc, 0) != pid)
738                         abort();
739
740                 if (!WIFEXITED(rc) || WEXITSTATUS(rc) != 0)
741                         abort();
742
743                 if (strnlen(str, len) == len)
744                         str[len - 1] = 0;
745
746                 if (str[strlen(str) - 1] == '\n')
747                         str[strlen(str) - 1] = 0;
748
749                 fclose(f);
750         }
751 }
752
753 int
754 main(int argc, char **argv)
755 {
756         char unameinfo[80];
757         char gccinfo[80];
758
759         system_string("uname -a", unameinfo, sizeof(unameinfo));
760         system_string("gcc -v 2>&1 | tail -1", gccinfo, sizeof(gccinfo));
761
762         printf ("void lustre_assert_wire_constants(void)\n"
763                 "{\n"
764                 "        /* Wire protocol assertions generated by 'wirecheck'\n"
765                 "         * running on %s\n"
766                 "         * with %s */\n"
767                 "\n", unameinfo, gccinfo);
768
769         BLANK_LINE ();
770
771         COMMENT("Constants...");
772         CHECK_DEFINE(PTLRPC_MSG_MAGIC);
773         CHECK_DEFINE(PTLRPC_MSG_VERSION);
774
775         CHECK_VALUE(PTL_RPC_MSG_REQUEST);
776         CHECK_VALUE(PTL_RPC_MSG_ERR);
777         CHECK_VALUE(PTL_RPC_MSG_REPLY);
778
779         CHECK_VALUE(MSG_LAST_REPLAY);
780         CHECK_VALUE(MSG_RESENT);
781         CHECK_VALUE(MSG_REPLAY);
782
783         CHECK_VALUE(MSG_CONNECT_RECOVERING);
784         CHECK_VALUE(MSG_CONNECT_RECONNECT);
785         CHECK_VALUE(MSG_CONNECT_REPLAYABLE);
786
787         CHECK_VALUE(OST_REPLY);
788         CHECK_VALUE(OST_GETATTR);
789         CHECK_VALUE(OST_SETATTR);
790         CHECK_VALUE(OST_READ);
791         CHECK_VALUE(OST_WRITE);
792         CHECK_VALUE(OST_CREATE);
793         CHECK_VALUE(OST_DESTROY);
794         CHECK_VALUE(OST_GET_INFO);
795         CHECK_VALUE(OST_CONNECT);
796         CHECK_VALUE(OST_DISCONNECT);
797         CHECK_VALUE(OST_PUNCH);
798         CHECK_VALUE(OST_OPEN);
799         CHECK_VALUE(OST_CLOSE);
800         CHECK_VALUE(OST_STATFS);
801         CHECK_VALUE(OST_SAN_READ);
802         CHECK_VALUE(OST_SAN_WRITE);
803         CHECK_VALUE(OST_SYNC);
804         CHECK_VALUE(OST_LAST_OPC);
805
806         CHECK_DEFINE(OBD_OBJECT_EOF);
807
808         CHECK_VALUE(OST_REQ_HAS_OA1);
809
810         CHECK_VALUE(MDS_GETATTR);
811         CHECK_VALUE(MDS_GETATTR_LOCK);
812         CHECK_VALUE(MDS_CLOSE);
813         CHECK_VALUE(MDS_REINT);
814         CHECK_VALUE(MDS_READPAGE);
815         CHECK_VALUE(MDS_CONNECT);
816         CHECK_VALUE(MDS_DISCONNECT);
817         CHECK_VALUE(MDS_GETSTATUS);
818         CHECK_VALUE(MDS_STATFS);
819         CHECK_VALUE(MDS_PIN);
820         CHECK_VALUE(MDS_UNPIN);
821         CHECK_VALUE(MDS_SYNC);
822         CHECK_VALUE(MDS_DONE_WRITING);
823         CHECK_VALUE(MDS_ACCESS_CHECK);
824         CHECK_VALUE(MDS_PARSE_ID);
825         CHECK_VALUE(MDS_LAST_OPC);
826
827         CHECK_VALUE(REINT_SETATTR);
828         CHECK_VALUE(REINT_CREATE);
829         CHECK_VALUE(REINT_LINK);
830         CHECK_VALUE(REINT_UNLINK);
831         CHECK_VALUE(REINT_RENAME);
832         CHECK_VALUE(REINT_OPEN);
833         CHECK_VALUE(REINT_MAX);
834
835         CHECK_VALUE(DISP_IT_EXECD);
836         CHECK_VALUE(DISP_LOOKUP_EXECD);
837         CHECK_VALUE(DISP_LOOKUP_NEG);
838         CHECK_VALUE(DISP_LOOKUP_POS);
839         CHECK_VALUE(DISP_OPEN_CREATE);
840         CHECK_VALUE(DISP_OPEN_OPEN);
841
842         CHECK_VALUE(MDS_STATUS_CONN);
843         CHECK_VALUE(MDS_STATUS_LOV);
844
845         CHECK_VALUE(MDS_OPEN_HAS_EA);
846
847         CHECK_VALUE(LDLM_ENQUEUE);
848         CHECK_VALUE(LDLM_CONVERT);
849         CHECK_VALUE(LDLM_CANCEL);
850         CHECK_VALUE(LDLM_BL_CALLBACK);
851         CHECK_VALUE(LDLM_CP_CALLBACK);
852         CHECK_VALUE(LDLM_FLK_DEADLOCK_CHK);
853         CHECK_VALUE(LDLM_LAST_OPC);
854
855         CHECK_VALUE(LCK_EX);
856         CHECK_VALUE(LCK_PW);
857         CHECK_VALUE(LCK_PR);
858         CHECK_VALUE(LCK_CW);
859         CHECK_VALUE(LCK_CR);
860         CHECK_VALUE(LCK_NL);
861
862         CHECK_VALUE(PTLBD_QUERY);
863         CHECK_VALUE(PTLBD_READ);
864         CHECK_VALUE(PTLBD_WRITE);
865         CHECK_VALUE(PTLBD_FLUSH);
866         CHECK_VALUE(PTLBD_CONNECT);
867         CHECK_VALUE(PTLBD_DISCONNECT);
868         CHECK_VALUE(PTLBD_LAST_OPC);
869
870         CHECK_VALUE(MGMT_CONNECT);
871         CHECK_VALUE(MGMT_DISCONNECT);
872         CHECK_VALUE(MGMT_EXCEPTION);
873
874         CHECK_VALUE(OBD_PING);
875         CHECK_VALUE(OBD_LOG_CANCEL);
876         CHECK_VALUE(OBD_LAST_OPC);
877
878         COMMENT("Sizes and Offsets");
879         BLANK_LINE();
880         check_lustre_handle();
881         check_lustre_msg();
882         check_obdo();
883         check_lov_mds_md_v1();
884         check_obd_statfs();
885         check_obd_ioobj();
886         check_niobuf_remote();
887         check_ost_body();
888         check_lustre_stc();
889         check_mds_status_req();
890         check_mds_body();
891         check_mds_rec_setattr();
892         check_mds_rec_create();
893         check_mds_rec_link();
894         check_mds_rec_unlink();
895         check_mds_rec_rename();
896         check_lov_desc();
897         check_ldlm_res_id();
898         check_ldlm_extent();
899         check_ldlm_flock();
900         check_ldlm_intent();
901         check_ldlm_resource_desc();
902         check_ldlm_lock_desc();
903         check_ldlm_request();
904         check_ldlm_reply();
905         check_ldlm_lvb();
906         check_ptlbd_op();
907         check_ptlbd_niob();
908         check_ptlbd_rsp();
909         check_llog_logid();
910         check_llog_catid();
911         check_llog_rec_hdr();
912         check_llog_rec_tail();
913         check_llog_logid_rec();
914         check_llog_create_rec();
915         check_llog_orphan_rec();
916         check_llog_unlink_rec();
917         check_llog_size_change_rec();
918         check_llog_gen();
919         check_llog_gen_rec();
920         check_llog_log_hdr();
921         check_llog_cookie();
922         check_llogd_body();
923         check_llogd_conn_body();
924         check_lustre_capa();
925         check_lustre_capa_key();
926
927         printf("}\n\n");
928
929         return(0);
930 }