Commit 3984bdc0 authored by Steve French's avatar Steve French
Browse files

update structure definitions from updated protocol documentation



MS-SMB2 was updated recently to include new protocol definitions for
updated compression payload header and new RDMA transform capabilities
Update structure definitions in smb2pdu.h to match

Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
Acked-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
parent 119e4896
Loading
Loading
Loading
Loading
+57 −7
Original line number Diff line number Diff line
@@ -153,10 +153,14 @@ struct smb2_compression_transform_hdr {
} __packed;

/* See MS-SMB2 2.2.42.1 */
#define SMB2_COMPRESSION_FLAG_NONE	0x0000
#define SMB2_COMPRESSION_FLAG_CHAINDED	0x0001

struct compression_payload_header {
	__le16	AlgorithmId;
	__le16	Reserved;
	__le32	Length;
	__le16	CompressionAlgorithm;
	__le16	Flags;
	__le32	Length; /* length of compressed playload including field below if present */
	/* __le32 OriginalPayloadSize; */ /* optional */
} __packed;

/* See MS-SMB2 2.2.42.2 */
@@ -167,6 +171,26 @@ struct compression_pattern_payload_v1 {
	__le32	Repetitions;
} __packed;

/* See MS-SMB2 2.2.43 */
struct smb2_rdma_transform {
	__le16 RdmaDescriptorOffset;
	__le16 RdmaDescriptorLength;
	__le32 Channel; /* for values see channel description in smb2 read above */
	__le16 TransformCount;
	__le16 Reserved1;
	__le32 Reserved2;
} __packed;

struct smb2_rdma_encryption_transform {
	__le16	TransformType;
	__le16	SignatureLength;
	__le16	NonceLength;
	__u16	Reserved;
	__u8	Signature[]; /* variable length */
	/* u8 Nonce[] */
	/* followed by padding */
} __packed;

/*
 *	SMB2 flag definitions
 */
@@ -297,6 +321,8 @@ struct smb2_negotiate_req {
#define SMB2_ENCRYPTION_CAPABILITIES		cpu_to_le16(2)
#define SMB2_COMPRESSION_CAPABILITIES		cpu_to_le16(3)
#define SMB2_NETNAME_NEGOTIATE_CONTEXT_ID	cpu_to_le16(5)
#define SMB2_TRANSPORT_CAPABILITIES		cpu_to_le16(6)
#define SMB2_RDMA_TRANSFORM_CAPABILITIES	cpu_to_le16(7)
#define SMB2_POSIX_EXTENSIONS_AVAILABLE		cpu_to_le16(0x100)

struct smb2_neg_context {
@@ -353,10 +379,10 @@ struct smb2_encryption_neg_context {
struct smb2_compression_capabilities_context {
	__le16	ContextType; /* 3 */
	__le16  DataLength;
	__u32	Flags;
	__u32	Reserved;
	__le16	CompressionAlgorithmCount;
	__u16	Padding;
	__u32	Reserved1;
	__u32	Flags;
	__le16	CompressionAlgorithms[3];
} __packed;

@@ -365,12 +391,31 @@ struct smb2_compression_capabilities_context {
 * Its struct simply contains NetName, an array of Unicode characters
 */
struct smb2_netname_neg_context {
	__le16	ContextType; /* 0x100 */
	__le16	ContextType; /* 5 */
	__le16	DataLength;
	__le32	Reserved;
	__le16	NetName[]; /* hostname of target converted to UCS-2 */
} __packed;

/*
 * For rdma transform capabilities context see MS-SMB2 2.2.3.1.6
 * and 2.2.4.1.5
 */

/* RDMA Transform IDs */
#define SMB2_RDMA_TRANSFORM_NONE	0x0000
#define SMB2_RDMA_TRANSFORM_ENCRYPTION	0x0001

struct smb2_rdma_transform_capabilities_context {
	__le16	ContextType; /* 7 */
	__le16  DataLength;
	__u32	Reserved;
	__le16	TransformCount;
	__u16	Reserved1;
	__u32	Reserved2;
	__le16	RDMATransformIds[1];
} __packed;

#define POSIX_CTXT_DATA_LEN	16
struct smb2_posix_neg_context {
	__le16	ContextType; /* 0x100 */
@@ -1180,6 +1225,7 @@ struct smb2_flush_rsp {
#define SMB2_CHANNEL_NONE	cpu_to_le32(0x00000000)
#define SMB2_CHANNEL_RDMA_V1	cpu_to_le32(0x00000001) /* SMB3 or later */
#define SMB2_CHANNEL_RDMA_V1_INVALIDATE cpu_to_le32(0x00000002) /* >= SMB3.02 */
#define SMB2_CHANNEL_RDMA_TRANSFORM cpu_to_le32(0x00000003) /* >= SMB3.02, only used on write */

/* SMB2 read request without RFC1001 length at the beginning */
struct smb2_read_plain_req {
@@ -1199,6 +1245,10 @@ struct smb2_read_plain_req {
	__u8   Buffer[1];
} __packed;

/* Read flags */
#define SMB2_READFLAG_RESPONSE_NONE	0x00000000
#define SMB2_READFLAG_RESPONSE_RDMA_TRANSFORM	0x00000001

struct smb2_read_rsp {
	struct smb2_sync_hdr sync_hdr;
	__le16 StructureSize; /* Must be 17 */
@@ -1206,7 +1256,7 @@ struct smb2_read_rsp {
	__u8   Reserved;
	__le32 DataLength;
	__le32 DataRemaining;
	__u32  Reserved2;
	__u32  Flags;
	__u8   Buffer[1];
} __packed;