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