+ __u32 lm_bufcount; /* number of buffers in lm_buflens[] */
+ __u32 lm_secflvr; /* 0 = no crypto, or sptlrpc security flavour */
+ __u32 lm_magic; /* RPC version magic = LUSTRE_MSG_MAGIC_V2 */
+ __u32 lm_repsize; /* size of preallocated reply buffer */
+ __u32 lm_cksum; /* CRC32 of ptlrpc_body early reply messages */
+ __u32 lm_flags; /* enum lustre_msghdr MSGHDR_* flags */
+ __u32 lm_padding_2; /* unused */
+ __u32 lm_padding_3; /* unused */
+ __u32 lm_buflens[0]; /* length of additional buffers in bytes,
+ * padded to a multiple of 8 bytes. */
+ /*
+ * message buffers are packed after padded lm_buflens[] array,
+ * padded to a multiple of 8 bytes each to align contents.
+ */
+};
+
+/* ptlrpc_body packet pb_types */
+#define PTL_RPC_MSG_REQUEST 4711 /* normal RPC request message */
+#define PTL_RPC_MSG_ERR 4712 /* error reply if request unprocessed */
+#define PTL_RPC_MSG_REPLY 4713 /* normal RPC reply message */
+
+/* ptlrpc_body pb_version ((target_version << 16) | rpc_version) */
+enum lustre_msg_version {
+ PTLRPC_MSG_VERSION = 0x00000003,
+ LUSTRE_VERSION_MASK = 0xffff0000,
+ LUSTRE_OBD_VERSION = 0x00010000,
+ LUSTRE_MDS_VERSION = 0x00020000,
+ LUSTRE_OST_VERSION = 0x00030000,
+ LUSTRE_DLM_VERSION = 0x00040000,
+ LUSTRE_LOG_VERSION = 0x00050000,
+ LUSTRE_MGS_VERSION = 0x00060000,
+};
+
+/* pb_flags that apply to all request messages */
+/* #define MSG_LAST_REPLAY 0x0001 obsolete 2.0 => {REQ,LOCK}_REPLAY_DONE */
+#define MSG_RESENT 0x0002 /* was previously sent, no reply seen */
+#define MSG_REPLAY 0x0004 /* was processed, got reply, recovery */
+/* #define MSG_AT_SUPPORT 0x0008 obsolete since 1.5, AT always enabled */
+/* #define MSG_DELAY_REPLAY 0x0010 obsolete since 2.0 */
+/* #define MSG_VERSION_REPLAY 0x0020 obsolete since 1.8.2, VBR always on */
+#define MSG_REQ_REPLAY_DONE 0x0040 /* request replay over, locks next */
+#define MSG_LOCK_REPLAY_DONE 0x0080 /* lock replay over, client done */
+
+/* pb_op_flags for connect opcodes: MDS_CONNECT, OST_CONNECT, MGS_CONNECT */
+#define MSG_CONNECT_RECOVERING 0x00000001 /* target is in recovery */
+#define MSG_CONNECT_RECONNECT 0x00000002 /* tgt already has client import */
+#define MSG_CONNECT_REPLAYABLE 0x00000004 /* target supports RPC replay */
+/* #define MSG_CONNECT_PEER 0x00000008 obsolete since 1.2, removed in 1.5 */
+#define MSG_CONNECT_LIBCLIENT 0x00000010 /* obsolete since 2.3, removed 2.6 */
+#define MSG_CONNECT_INITIAL 0x00000020 /* first client connection attempt */
+/* #define MSG_CONNECT_ASYNC 0x00000040 obsolete since 1.5 */
+#define MSG_CONNECT_NEXT_VER 0x00000080 /* use next version of lustre_msg */
+#define MSG_CONNECT_TRANSNO 0x00000100 /* client sent transno in replay */
+
+/* number of previous object versions in pb_pre_versions[] */