mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 06:55:13 +08:00
smb: common: simplify compression headers
[ Upstream commit 24337b60e8
]
Unify compression headers (chained and unchained) into a single struct
so we can use it for the initial compression transform header
interchangeably.
Also make the OriginalPayloadSize field to be always visible in the
compression payload header, and have callers subtract its size when not
needed.
Rename the related structs to match the naming convetion used in the
other SMB2 structs.
Signed-off-by: Enzo Matsumiya <ematsumiya@suse.de>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
fdd938b2b4
commit
eb4a05e3c3
@ -208,36 +208,43 @@ struct smb2_transform_hdr {
|
||||
__le64 SessionId;
|
||||
} __packed;
|
||||
|
||||
|
||||
/* See MS-SMB2 2.2.42 */
|
||||
struct smb2_compression_transform_hdr_unchained {
|
||||
__le32 ProtocolId; /* 0xFC 'S' 'M' 'B' */
|
||||
__le32 OriginalCompressedSegmentSize;
|
||||
__le16 CompressionAlgorithm;
|
||||
__le16 Flags;
|
||||
__le16 Length; /* if chained it is length, else offset */
|
||||
} __packed;
|
||||
|
||||
/* See MS-SMB2 2.2.42.1 */
|
||||
/*
|
||||
* These are simplified versions from the spec, as we don't need a fully fledged
|
||||
* form of both unchained and chained structs.
|
||||
*
|
||||
* Moreover, even in chained compressed payloads, the initial compression header
|
||||
* has the form of the unchained one -- i.e. it never has the
|
||||
* OriginalPayloadSize field and ::Offset field always represent an offset
|
||||
* (instead of a length, as it is in the chained header).
|
||||
*
|
||||
* See MS-SMB2 2.2.42 for more details.
|
||||
*/
|
||||
#define SMB2_COMPRESSION_FLAG_NONE 0x0000
|
||||
#define SMB2_COMPRESSION_FLAG_CHAINED 0x0001
|
||||
|
||||
struct compression_payload_header {
|
||||
struct smb2_compression_hdr {
|
||||
__le32 ProtocolId; /* 0xFC 'S' 'M' 'B' */
|
||||
__le32 OriginalCompressedSegmentSize;
|
||||
__le16 CompressionAlgorithm;
|
||||
__le16 Flags;
|
||||
__le16 Offset; /* this is the size of the uncompressed SMB2 header below */
|
||||
/* uncompressed SMB2 header (READ or WRITE) goes here */
|
||||
/* compressed data goes here */
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* ... OTOH, set compression payload header to always have OriginalPayloadSize
|
||||
* as it's easier to pass the struct size minus sizeof(OriginalPayloadSize)
|
||||
* than to juggle around the header/data memory.
|
||||
*/
|
||||
struct smb2_compression_payload_hdr {
|
||||
__le16 CompressionAlgorithm;
|
||||
__le16 Flags;
|
||||
__le32 Length; /* length of compressed playload including field below if present */
|
||||
/* __le32 OriginalPayloadSize; */ /* optional, present when LZNT1, LZ77, LZ77+Huffman */
|
||||
__le32 OriginalPayloadSize; /* accounted when LZNT1, LZ77, LZ77+Huffman */
|
||||
} __packed;
|
||||
|
||||
/* See MS-SMB2 2.2.42.2 */
|
||||
struct smb2_compression_transform_hdr_chained {
|
||||
__le32 ProtocolId; /* 0xFC 'S' 'M' 'B' */
|
||||
__le32 OriginalCompressedSegmentSize;
|
||||
/* struct compression_payload_header[] */
|
||||
} __packed;
|
||||
|
||||
/* See MS-SMB2 2.2.42.2.2 */
|
||||
struct compression_pattern_payload_v1 {
|
||||
struct smb2_compression_pattern_v1 {
|
||||
__u8 Pattern;
|
||||
__u8 Reserved1;
|
||||
__le16 Reserved2;
|
||||
|
Loading…
Reference in New Issue
Block a user