+ CHECK_STRUCT(layout_intent);
+ CHECK_MEMBER(layout_intent, li_opc);
+ CHECK_MEMBER(layout_intent, li_flags);
+ CHECK_MEMBER(layout_intent, li_start);
+ CHECK_MEMBER(layout_intent, li_end);
+
+ CHECK_VALUE(LAYOUT_INTENT_ACCESS);
+ CHECK_VALUE(LAYOUT_INTENT_READ);
+ CHECK_VALUE(LAYOUT_INTENT_WRITE);
+ CHECK_VALUE(LAYOUT_INTENT_GLIMPSE);
+ CHECK_VALUE(LAYOUT_INTENT_TRUNC);
+ CHECK_VALUE(LAYOUT_INTENT_RELEASE);
+ CHECK_VALUE(LAYOUT_INTENT_RESTORE);
+}
+
+static void check_hsm_state_set(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(hsm_state_set);
+ CHECK_MEMBER(hsm_state_set, hss_valid);
+ CHECK_MEMBER(hsm_state_set, hss_archive_id);
+ CHECK_MEMBER(hsm_state_set, hss_setmask);
+ CHECK_MEMBER(hsm_state_set, hss_clearmask);
+}
+
+static void check_hsm_current_action(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(hsm_current_action);
+ CHECK_MEMBER(hsm_current_action, hca_state);
+ CHECK_MEMBER(hsm_current_action, hca_action);
+ CHECK_MEMBER(hsm_current_action, hca_location);
+}
+
+static void check_hsm_request(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(hsm_request);
+ CHECK_MEMBER(hsm_request, hr_action);
+ CHECK_MEMBER(hsm_request, hr_archive_id);
+ CHECK_MEMBER(hsm_request, hr_flags);
+ CHECK_MEMBER(hsm_request, hr_itemcount);
+ CHECK_MEMBER(hsm_request, hr_data_len);
+ CHECK_VALUE_X(HSM_FORCE_ACTION);
+ CHECK_VALUE_X(HSM_GHOST_COPY);
+}
+
+static void check_hsm_user_request(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(hsm_user_request);
+ CHECK_MEMBER(hsm_user_request, hur_request);
+ CHECK_MEMBER(hsm_user_request, hur_user_item);
+}
+
+static void check_hsm_user_import(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(hsm_user_import);
+ CHECK_MEMBER(hsm_user_import, hui_size);
+ CHECK_MEMBER(hsm_user_import, hui_uid);
+ CHECK_MEMBER(hsm_user_import, hui_gid);
+ CHECK_MEMBER(hsm_user_import, hui_mode);
+ CHECK_MEMBER(hsm_user_import, hui_atime);
+ CHECK_MEMBER(hsm_user_import, hui_atime_ns);
+ CHECK_MEMBER(hsm_user_import, hui_mtime);
+ CHECK_MEMBER(hsm_user_import, hui_mtime_ns);
+ CHECK_MEMBER(hsm_user_import, hui_archive_id);
+}
+
+static void check_update_buf(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(update_buf);
+ CHECK_MEMBER(update_buf, ub_magic);
+ CHECK_MEMBER(update_buf, ub_count);
+ CHECK_MEMBER(update_buf, ub_bufs);
+}
+
+static void check_update_reply(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(update_reply);
+ CHECK_MEMBER(update_reply, ur_version);
+ CHECK_MEMBER(update_reply, ur_count);
+ CHECK_MEMBER(update_reply, ur_lens);
+}
+
+static void check_update(void)
+{
+ BLANK_LINE();
+ CHECK_STRUCT(update);
+ CHECK_MEMBER(update, u_type);
+ CHECK_MEMBER(update, u_batchid);
+ CHECK_MEMBER(update, u_fid);
+ CHECK_MEMBER(update, u_lens);
+ CHECK_MEMBER(update, u_bufs);
+}
+
+static void system_string(char *cmdline, char *str, int len)
+{
+ int fds[2];
+ int rc;
+ pid_t pid;
+
+ rc = pipe(fds);
+ if (rc != 0)
+ abort();
+
+ pid = fork();
+ if (pid == 0) {
+ /* child */
+ int fd = fileno(stdout);
+
+ rc = dup2(fds[1], fd);
+ if (rc != fd)
+ abort();
+
+ exit(system(cmdline));
+ /* notreached */
+ } else if ((int)pid < 0) {
+ abort();
+ } else {
+ FILE *f = fdopen(fds[0], "r");
+
+ if (f == NULL)
+ abort();
+
+ close(fds[1]);
+
+ if (fgets(str, len, f) == NULL)
+ abort();
+
+ if (waitpid(pid, &rc, 0) != pid)
+ abort();
+
+ if (!WIFEXITED(rc) || WEXITSTATUS(rc) != 0)
+ abort();
+
+ if (strnlen(str, len) == len)
+ str[len - 1] = 0;
+
+ if (str[strlen(str) - 1] == '\n')
+ str[strlen(str) - 1] = 0;
+
+ fclose(f);
+ }
+}
+
+int
+main(int argc, char **argv)
+{
+ char unameinfo[80];
+ char gccinfo[80];
+
+ system_string("uname -a", unameinfo, sizeof(unameinfo));
+ system_string(CC " -v 2>&1 | tail -1", gccinfo, sizeof(gccinfo));
+
+ printf ("void lustre_assert_wire_constants(void)\n"
+ "{\n"
+ " /* Wire protocol assertions generated by 'wirecheck'\n"
+ " * (make -C lustre/utils newwiretest)\n"
+ " * running on %s\n"
+ " * with %s */\n"
+ "\n", unameinfo, gccinfo);
+
+ BLANK_LINE ();
+
+ COMMENT("Constants...");
+ CHECK_VALUE(PTL_RPC_MSG_REQUEST);
+ CHECK_VALUE(PTL_RPC_MSG_ERR);
+ CHECK_VALUE(PTL_RPC_MSG_REPLY);
+
+ CHECK_DEFINE_64X(MDS_DIR_END_OFF);
+
+ CHECK_DEFINE_64X(DEAD_HANDLE_MAGIC);
+
+ CHECK_CVALUE(MTI_NAME_MAXLEN);
+
+ CHECK_VALUE(OST_REPLY);
+ CHECK_VALUE(OST_GETATTR);
+ CHECK_VALUE(OST_SETATTR);
+ CHECK_VALUE(OST_READ);
+ CHECK_VALUE(OST_WRITE);
+ CHECK_VALUE(OST_CREATE);
+ CHECK_VALUE(OST_DESTROY);
+ CHECK_VALUE(OST_GET_INFO);
+ CHECK_VALUE(OST_CONNECT);
+ CHECK_VALUE(OST_DISCONNECT);
+ CHECK_VALUE(OST_PUNCH);
+ CHECK_VALUE(OST_OPEN);
+ CHECK_VALUE(OST_CLOSE);
+ CHECK_VALUE(OST_STATFS);
+ CHECK_VALUE(OST_SYNC);
+ CHECK_VALUE(OST_SET_INFO);
+ CHECK_VALUE(OST_QUOTACHECK);
+ CHECK_VALUE(OST_QUOTACTL);
+ CHECK_VALUE(OST_QUOTA_ADJUST_QUNIT);
+ CHECK_VALUE(OST_LAST_OPC);
+
+ CHECK_DEFINE_64X(OBD_OBJECT_EOF);
+
+ CHECK_VALUE(OST_MIN_PRECREATE);
+ CHECK_VALUE(OST_MAX_PRECREATE);
+
+ CHECK_DEFINE_64X(OST_LVB_ERR_INIT);
+ CHECK_DEFINE_64X(OST_LVB_ERR_MASK);
+
+ CHECK_VALUE(MDS_FIRST_OPC);
+ CHECK_VALUE(MDS_GETATTR);
+ CHECK_VALUE(MDS_GETATTR_NAME);
+ CHECK_VALUE(MDS_CLOSE);
+ CHECK_VALUE(MDS_REINT);
+ CHECK_VALUE(MDS_READPAGE);
+ CHECK_VALUE(MDS_CONNECT);
+ CHECK_VALUE(MDS_DISCONNECT);
+ CHECK_VALUE(MDS_GETSTATUS);
+ CHECK_VALUE(MDS_STATFS);
+ CHECK_VALUE(MDS_PIN);
+ CHECK_VALUE(MDS_UNPIN);
+ CHECK_VALUE(MDS_SYNC);
+ CHECK_VALUE(MDS_DONE_WRITING);
+ CHECK_VALUE(MDS_SET_INFO);
+ CHECK_VALUE(MDS_QUOTACHECK);
+ CHECK_VALUE(MDS_QUOTACTL);
+ CHECK_VALUE(MDS_GETXATTR);
+ CHECK_VALUE(MDS_SETXATTR);
+ CHECK_VALUE(MDS_WRITEPAGE);
+ CHECK_VALUE(MDS_IS_SUBDIR);
+ CHECK_VALUE(MDS_GET_INFO);
+ CHECK_VALUE(MDS_HSM_STATE_GET);
+ CHECK_VALUE(MDS_HSM_STATE_SET);
+ CHECK_VALUE(MDS_HSM_ACTION);
+ CHECK_VALUE(MDS_HSM_PROGRESS);
+ CHECK_VALUE(MDS_HSM_REQUEST);
+ CHECK_VALUE(MDS_HSM_CT_REGISTER);
+ CHECK_VALUE(MDS_HSM_CT_UNREGISTER);
+ CHECK_VALUE(MDS_SWAP_LAYOUTS);
+ CHECK_VALUE(MDS_LAST_OPC);
+
+ CHECK_VALUE(REINT_SETATTR);
+ CHECK_VALUE(REINT_CREATE);
+ CHECK_VALUE(REINT_LINK);
+ CHECK_VALUE(REINT_UNLINK);
+ CHECK_VALUE(REINT_RENAME);
+ CHECK_VALUE(REINT_OPEN);
+ CHECK_VALUE(REINT_SETXATTR);
+ CHECK_VALUE(REINT_RMENTRY);
+ CHECK_VALUE(REINT_MAX);
+
+ CHECK_VALUE_X(DISP_IT_EXECD);
+ CHECK_VALUE_X(DISP_LOOKUP_EXECD);
+ CHECK_VALUE_X(DISP_LOOKUP_NEG);
+ CHECK_VALUE_X(DISP_LOOKUP_POS);
+ CHECK_VALUE_X(DISP_OPEN_CREATE);
+ CHECK_VALUE_X(DISP_OPEN_OPEN);
+ CHECK_VALUE_X(DISP_ENQ_COMPLETE);
+ CHECK_VALUE_X(DISP_ENQ_OPEN_REF);
+ CHECK_VALUE_X(DISP_ENQ_CREATE_REF);
+ CHECK_VALUE_X(DISP_OPEN_LOCK);
+
+ CHECK_VALUE(MDS_STATUS_CONN);
+ CHECK_VALUE(MDS_STATUS_LOV);
+
+ CHECK_VALUE(LUSTRE_BFLAG_UNCOMMITTED_WRITES);
+
+ CHECK_VALUE_X(MF_SOM_CHANGE);
+ CHECK_VALUE_X(MF_EPOCH_OPEN);
+ CHECK_VALUE_X(MF_EPOCH_CLOSE);
+ CHECK_VALUE_X(MF_MDC_CANCEL_FID1);
+ CHECK_VALUE_X(MF_MDC_CANCEL_FID2);
+ CHECK_VALUE_X(MF_MDC_CANCEL_FID3);
+ CHECK_VALUE_X(MF_MDC_CANCEL_FID4);
+ CHECK_VALUE_X(MF_SOM_AU);
+ CHECK_VALUE_X(MF_GETATTR_LOCK);
+
+ CHECK_VALUE_64X(MDS_ATTR_MODE);
+ CHECK_VALUE_64X(MDS_ATTR_UID);
+ CHECK_VALUE_64X(MDS_ATTR_GID);
+ CHECK_VALUE_64X(MDS_ATTR_SIZE);
+ CHECK_VALUE_64X(MDS_ATTR_ATIME);
+ CHECK_VALUE_64X(MDS_ATTR_MTIME);
+ CHECK_VALUE_64X(MDS_ATTR_CTIME);
+ CHECK_VALUE_64X(MDS_ATTR_ATIME_SET);
+ CHECK_VALUE_64X(MDS_ATTR_MTIME_SET);
+ CHECK_VALUE_64X(MDS_ATTR_FORCE);
+ CHECK_VALUE_64X(MDS_ATTR_ATTR_FLAG);
+ CHECK_VALUE_64X(MDS_ATTR_KILL_SUID);
+ CHECK_VALUE_64X(MDS_ATTR_KILL_SGID);
+ CHECK_VALUE_64X(MDS_ATTR_CTIME_SET);
+ CHECK_VALUE_64X(MDS_ATTR_FROM_OPEN);
+ CHECK_VALUE_64X(MDS_ATTR_BLOCKS);
+
+ CHECK_VALUE(FLD_QUERY);
+ CHECK_VALUE(FLD_FIRST_OPC);
+ CHECK_VALUE(FLD_LAST_OPC);
+
+ CHECK_VALUE(SEQ_QUERY);
+ CHECK_VALUE(SEQ_FIRST_OPC);
+ CHECK_VALUE(SEQ_LAST_OPC);
+
+ CHECK_VALUE(SEQ_ALLOC_SUPER);
+ CHECK_VALUE(SEQ_ALLOC_META);
+
+ CHECK_VALUE(LDLM_ENQUEUE);
+ CHECK_VALUE(LDLM_CONVERT);
+ CHECK_VALUE(LDLM_CANCEL);
+ CHECK_VALUE(LDLM_BL_CALLBACK);
+ CHECK_VALUE(LDLM_CP_CALLBACK);
+ CHECK_VALUE(LDLM_GL_CALLBACK);
+ CHECK_VALUE(LDLM_SET_INFO);
+ CHECK_VALUE(LDLM_LAST_OPC);
+
+ CHECK_VALUE(LCK_MINMODE);
+ CHECK_VALUE(LCK_EX);
+ CHECK_VALUE(LCK_PW);
+ CHECK_VALUE(LCK_PR);
+ CHECK_VALUE(LCK_CW);
+ CHECK_VALUE(LCK_CR);
+ CHECK_VALUE(LCK_NL);
+ CHECK_VALUE(LCK_GROUP);
+ CHECK_VALUE(LCK_COS);
+ CHECK_VALUE(LCK_MAXMODE);
+ CHECK_VALUE(LCK_MODE_NUM);
+
+ CHECK_CVALUE(LDLM_PLAIN);
+ CHECK_CVALUE(LDLM_EXTENT);
+ CHECK_CVALUE(LDLM_FLOCK);
+ CHECK_CVALUE(LDLM_IBITS);
+ CHECK_CVALUE(LDLM_MAX_TYPE);
+
+ CHECK_CVALUE(LUSTRE_RES_ID_SEQ_OFF);
+ CHECK_CVALUE(LUSTRE_RES_ID_VER_OID_OFF);
+ /* CHECK_CVALUE(LUSTRE_RES_ID_WAS_VER_OFF); packed with OID */
+
+ CHECK_VALUE(UPDATE_OBJ);
+ CHECK_VALUE(UPDATE_LAST_OPC);
+ CHECK_CVALUE(LUSTRE_RES_ID_QUOTA_SEQ_OFF);
+ CHECK_CVALUE(LUSTRE_RES_ID_QUOTA_VER_OID_OFF);
+ CHECK_CVALUE(LUSTRE_RES_ID_HSH_OFF);
+
+ CHECK_CVALUE(LQUOTA_TYPE_USR);
+ CHECK_CVALUE(LQUOTA_TYPE_GRP);
+
+ CHECK_CVALUE(LQUOTA_RES_MD);
+ CHECK_CVALUE(LQUOTA_RES_DT);
+
+ CHECK_VALUE(OBD_PING);
+ CHECK_VALUE(OBD_LOG_CANCEL);
+ CHECK_VALUE(OBD_QC_CALLBACK);
+ CHECK_VALUE(OBD_IDX_READ);
+ CHECK_VALUE(OBD_LAST_OPC);
+
+ CHECK_VALUE(QUOTA_DQACQ);
+ CHECK_VALUE(QUOTA_DQREL);
+ CHECK_VALUE(QUOTA_LAST_OPC);
+
+ CHECK_VALUE(MGS_CONNECT);
+ CHECK_VALUE(MGS_DISCONNECT);
+ CHECK_VALUE(MGS_EXCEPTION);
+ CHECK_VALUE(MGS_TARGET_REG);
+ CHECK_VALUE(MGS_TARGET_DEL);
+ CHECK_VALUE(MGS_SET_INFO);
+ CHECK_VALUE(MGS_LAST_OPC);
+
+ CHECK_VALUE(SEC_CTX_INIT);
+ CHECK_VALUE(SEC_CTX_INIT_CONT);
+ CHECK_VALUE(SEC_CTX_FINI);
+ CHECK_VALUE(SEC_LAST_OPC);
+
+ COMMENT("Sizes and Offsets");
+ BLANK_LINE();
+ CHECK_STRUCT(obd_uuid);
+ check_lu_seq_range();
+ check_lustre_mdt_attrs();
+
+ CHECK_VALUE(OBJ_CREATE);
+ CHECK_VALUE(OBJ_DESTROY);
+ CHECK_VALUE(OBJ_REF_ADD);
+ CHECK_VALUE(OBJ_REF_DEL);
+ CHECK_VALUE(OBJ_ATTR_SET);
+ CHECK_VALUE(OBJ_ATTR_GET);
+ CHECK_VALUE(OBJ_XATTR_SET);
+ CHECK_VALUE(OBJ_XATTR_GET);
+ CHECK_VALUE(OBJ_INDEX_LOOKUP);
+ CHECK_VALUE(OBJ_INDEX_LOOKUP);
+ CHECK_VALUE(OBJ_INDEX_INSERT);
+ CHECK_VALUE(OBJ_INDEX_DELETE);
+
+ check_som_attrs();
+ check_hsm_attrs();
+ check_ost_id();
+ check_lu_dirent();
+ check_luda_type();
+ check_lu_dirpage();
+ check_lustre_handle();
+ check_lustre_msg_v2();
+ check_ptlrpc_body();
+ check_obd_connect_data();
+ check_obdo();
+ check_lov_ost_data_v1();
+ check_lov_mds_md_v1();
+ check_lov_mds_md_v3();
+ check_obd_statfs();
+ check_obd_ioobj();
+ check_obd_quotactl();
+ check_obd_idx_read();
+ check_niobuf_remote();
+ check_ost_body();
+ check_ll_fid();
+ check_mdt_body();
+ check_mdt_ioepoch();
+ check_mdt_remote_perm();
+ check_mdt_rec_setattr();
+ check_mdt_rec_create();
+ check_mdt_rec_link();
+ check_mdt_rec_unlink();
+ check_mdt_rec_rename();
+ check_mdt_rec_setxattr();
+ check_mdt_rec_reint();
+ check_lmv_desc();
+ check_lmv_stripe_md();
+ check_lov_desc();
+ check_ldlm_res_id();
+ check_ldlm_extent();
+ check_ldlm_inodebits();
+ check_ldlm_flock();
+ check_ldlm_intent();
+ check_ldlm_resource_desc();
+ check_ldlm_lock_desc();
+ check_ldlm_request();
+ check_ldlm_reply();
+ check_ldlm_ost_lvb_v1();
+ check_ldlm_ost_lvb();
+ check_ldlm_lquota_lvb();
+ check_ldlm_gl_lquota_desc();
+ check_mgs_send_param();
+ check_cfg_marker();
+ check_llog_logid();
+ check_llog_catid();
+ check_llog_rec_hdr();
+ check_llog_rec_tail();
+ check_llog_logid_rec();
+ check_llog_unlink_rec();
+ check_llog_unlink64_rec();
+ check_llog_setattr64_rec();
+ check_llog_size_change_rec();
+ check_changelog_rec();
+ check_changelog_rec_ext();
+ check_changelog_setinfo();
+ check_llog_changelog_rec();
+ check_llog_changelog_user_rec();
+ check_llog_gen();
+ check_llog_gen_rec();
+ check_llog_log_hdr();
+ check_llog_cookie();
+ check_llogd_body();
+ check_llogd_conn_body();
+ check_ll_fiemap_info_key();
+ check_quota_body();
+ check_mgs_target_info();
+ check_lustre_capa();
+ check_lustre_capa_key();
+ check_getinfo_fid2path();
+ check_ll_user_fiemap();
+ check_ll_fiemap_extent();
+ printf("#ifdef LIBLUSTRE_POSIX_ACL\n");
+#ifndef LIBLUSTRE_POSIX_ACL
+#error build generator without LIBLUSTRE_POSIX_ACL defined - produce wrong check code.
+#endif
+ check_posix_acl_xattr_entry();
+ check_posix_acl_xattr_header();
+ printf("#endif\n");
+ check_link_ea_header();
+ check_link_ea_entry();
+ check_layout_intent();
+ check_hsm_action_item();
+ check_hsm_action_list();
+ check_hsm_progress();
+ check_hsm_copy();
+ check_hsm_progress_kernel();
+ check_hsm_user_item();
+ check_hsm_user_state();
+ check_hsm_state_set();
+ check_hsm_current_action();
+ check_hsm_request();
+ check_hsm_user_request();
+ check_hsm_user_import();
+
+ check_update_buf();
+ check_update_reply();
+ check_update();
+
+ printf("}\n\n");
+
+ return 0;