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

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
...@@ -153,10 +153,14 @@ struct smb2_compression_transform_hdr { ...@@ -153,10 +153,14 @@ struct smb2_compression_transform_hdr {
} __packed; } __packed;
/* See MS-SMB2 2.2.42.1 */ /* See MS-SMB2 2.2.42.1 */
#define SMB2_COMPRESSION_FLAG_NONE 0x0000
#define SMB2_COMPRESSION_FLAG_CHAINDED 0x0001
struct compression_payload_header { struct compression_payload_header {
__le16 AlgorithmId; __le16 CompressionAlgorithm;
__le16 Reserved; __le16 Flags;
__le32 Length; __le32 Length; /* length of compressed playload including field below if present */
/* __le32 OriginalPayloadSize; */ /* optional */
} __packed; } __packed;
/* See MS-SMB2 2.2.42.2 */ /* See MS-SMB2 2.2.42.2 */
...@@ -167,6 +171,26 @@ struct compression_pattern_payload_v1 { ...@@ -167,6 +171,26 @@ struct compression_pattern_payload_v1 {
__le32 Repetitions; __le32 Repetitions;
} __packed; } __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 * SMB2 flag definitions
*/ */
...@@ -297,6 +321,8 @@ struct smb2_negotiate_req { ...@@ -297,6 +321,8 @@ struct smb2_negotiate_req {
#define SMB2_ENCRYPTION_CAPABILITIES cpu_to_le16(2) #define SMB2_ENCRYPTION_CAPABILITIES cpu_to_le16(2)
#define SMB2_COMPRESSION_CAPABILITIES cpu_to_le16(3) #define SMB2_COMPRESSION_CAPABILITIES cpu_to_le16(3)
#define SMB2_NETNAME_NEGOTIATE_CONTEXT_ID cpu_to_le16(5) #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) #define SMB2_POSIX_EXTENSIONS_AVAILABLE cpu_to_le16(0x100)
struct smb2_neg_context { struct smb2_neg_context {
...@@ -353,10 +379,10 @@ struct smb2_encryption_neg_context { ...@@ -353,10 +379,10 @@ struct smb2_encryption_neg_context {
struct smb2_compression_capabilities_context { struct smb2_compression_capabilities_context {
__le16 ContextType; /* 3 */ __le16 ContextType; /* 3 */
__le16 DataLength; __le16 DataLength;
__u32 Flags; __u32 Reserved;
__le16 CompressionAlgorithmCount; __le16 CompressionAlgorithmCount;
__u16 Padding; __u16 Padding;
__u32 Reserved1; __u32 Flags;
__le16 CompressionAlgorithms[3]; __le16 CompressionAlgorithms[3];
} __packed; } __packed;
...@@ -365,12 +391,31 @@ struct smb2_compression_capabilities_context { ...@@ -365,12 +391,31 @@ struct smb2_compression_capabilities_context {
* Its struct simply contains NetName, an array of Unicode characters * Its struct simply contains NetName, an array of Unicode characters
*/ */
struct smb2_netname_neg_context { struct smb2_netname_neg_context {
__le16 ContextType; /* 0x100 */ __le16 ContextType; /* 5 */
__le16 DataLength; __le16 DataLength;
__le32 Reserved; __le32 Reserved;
__le16 NetName[]; /* hostname of target converted to UCS-2 */ __le16 NetName[]; /* hostname of target converted to UCS-2 */
} __packed; } __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 #define POSIX_CTXT_DATA_LEN 16
struct smb2_posix_neg_context { struct smb2_posix_neg_context {
__le16 ContextType; /* 0x100 */ __le16 ContextType; /* 0x100 */
...@@ -1180,6 +1225,7 @@ struct smb2_flush_rsp { ...@@ -1180,6 +1225,7 @@ struct smb2_flush_rsp {
#define SMB2_CHANNEL_NONE cpu_to_le32(0x00000000) #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 cpu_to_le32(0x00000001) /* SMB3 or later */
#define SMB2_CHANNEL_RDMA_V1_INVALIDATE cpu_to_le32(0x00000002) /* >= SMB3.02 */ #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 */ /* SMB2 read request without RFC1001 length at the beginning */
struct smb2_read_plain_req { struct smb2_read_plain_req {
...@@ -1199,6 +1245,10 @@ struct smb2_read_plain_req { ...@@ -1199,6 +1245,10 @@ struct smb2_read_plain_req {
__u8 Buffer[1]; __u8 Buffer[1];
} __packed; } __packed;
/* Read flags */
#define SMB2_READFLAG_RESPONSE_NONE 0x00000000
#define SMB2_READFLAG_RESPONSE_RDMA_TRANSFORM 0x00000001
struct smb2_read_rsp { struct smb2_read_rsp {
struct smb2_sync_hdr sync_hdr; struct smb2_sync_hdr sync_hdr;
__le16 StructureSize; /* Must be 17 */ __le16 StructureSize; /* Must be 17 */
...@@ -1206,7 +1256,7 @@ struct smb2_read_rsp { ...@@ -1206,7 +1256,7 @@ struct smb2_read_rsp {
__u8 Reserved; __u8 Reserved;
__le32 DataLength; __le32 DataLength;
__le32 DataRemaining; __le32 DataRemaining;
__u32 Reserved2; __u32 Flags;
__u8 Buffer[1]; __u8 Buffer[1];
} __packed; } __packed;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment