184d8d4cfSChenXiaoSong /* SPDX-License-Identifier: LGPL-2.1 */ 284d8d4cfSChenXiaoSong /* 384d8d4cfSChenXiaoSong * 484d8d4cfSChenXiaoSong * Copyright (c) International Business Machines Corp., 2009, 2013 584d8d4cfSChenXiaoSong * Etersoft, 2012 684d8d4cfSChenXiaoSong * 2018 Samsung Electronics Co., Ltd. 784d8d4cfSChenXiaoSong * Author(s): Steve French (sfrench@us.ibm.com) 884d8d4cfSChenXiaoSong * Pavel Shilovsky (pshilovsky@samba.org) 2012 984d8d4cfSChenXiaoSong * Namjae Jeon (linkinjeon@kernel.org) 1084d8d4cfSChenXiaoSong * 1184d8d4cfSChenXiaoSong */ 1284d8d4cfSChenXiaoSong #ifndef _COMMON_SMB_FSCC_H 1384d8d4cfSChenXiaoSong #define _COMMON_SMB_FSCC_H 1484d8d4cfSChenXiaoSong 15d7edd389SChenXiaoSong /* See MS-FSCC 2.4.8 */ 16d7edd389SChenXiaoSong typedef struct { 17d7edd389SChenXiaoSong __le32 NextEntryOffset; 18d7edd389SChenXiaoSong __u32 FileIndex; 19d7edd389SChenXiaoSong __le64 CreationTime; 20d7edd389SChenXiaoSong __le64 LastAccessTime; 21d7edd389SChenXiaoSong __le64 LastWriteTime; 22d7edd389SChenXiaoSong __le64 ChangeTime; 23d7edd389SChenXiaoSong __le64 EndOfFile; 24d7edd389SChenXiaoSong __le64 AllocationSize; 25d7edd389SChenXiaoSong __le32 ExtFileAttributes; 26d7edd389SChenXiaoSong __le32 FileNameLength; 27d7edd389SChenXiaoSong __le32 EaSize; /* length of the xattrs */ 28d7edd389SChenXiaoSong __u8 ShortNameLength; 29d7edd389SChenXiaoSong __u8 Reserved; 30d7edd389SChenXiaoSong __u8 ShortName[24]; 31d7edd389SChenXiaoSong char FileName[]; 32d7edd389SChenXiaoSong } __packed FILE_BOTH_DIRECTORY_INFO; /* level 0x104 FFrsp data */ 33d7edd389SChenXiaoSong 34d7edd389SChenXiaoSong /* See MS-FSCC 2.4.10 */ 35d7edd389SChenXiaoSong typedef struct { 36d7edd389SChenXiaoSong __le32 NextEntryOffset; 37d7edd389SChenXiaoSong __u32 FileIndex; 38d7edd389SChenXiaoSong __le64 CreationTime; 39d7edd389SChenXiaoSong __le64 LastAccessTime; 40d7edd389SChenXiaoSong __le64 LastWriteTime; 41d7edd389SChenXiaoSong __le64 ChangeTime; 42d7edd389SChenXiaoSong __le64 EndOfFile; 43d7edd389SChenXiaoSong __le64 AllocationSize; 44d7edd389SChenXiaoSong __le32 ExtFileAttributes; 45d7edd389SChenXiaoSong __le32 FileNameLength; 46d7edd389SChenXiaoSong char FileName[]; 47d7edd389SChenXiaoSong } __packed FILE_DIRECTORY_INFO; /* level 0x101 FF resp data */ 48d7edd389SChenXiaoSong 49d7edd389SChenXiaoSong /* See MS-FSCC 2.4.14 */ 50d7edd389SChenXiaoSong typedef struct { 51d7edd389SChenXiaoSong __le32 NextEntryOffset; 52d7edd389SChenXiaoSong __u32 FileIndex; 53d7edd389SChenXiaoSong __le64 CreationTime; 54d7edd389SChenXiaoSong __le64 LastAccessTime; 55d7edd389SChenXiaoSong __le64 LastWriteTime; 56d7edd389SChenXiaoSong __le64 ChangeTime; 57d7edd389SChenXiaoSong __le64 EndOfFile; 58d7edd389SChenXiaoSong __le64 AllocationSize; 59d7edd389SChenXiaoSong __le32 ExtFileAttributes; 60d7edd389SChenXiaoSong __le32 FileNameLength; 61d7edd389SChenXiaoSong __le32 EaSize; /* length of the xattrs */ 62d7edd389SChenXiaoSong char FileName[]; 63d7edd389SChenXiaoSong } __packed FILE_FULL_DIRECTORY_INFO; /* level 0x102 rsp data */ 64d7edd389SChenXiaoSong 65d7edd389SChenXiaoSong /* See MS-FSCC 2.4.24 */ 66d7edd389SChenXiaoSong typedef struct { 67d7edd389SChenXiaoSong __le32 NextEntryOffset; 68d7edd389SChenXiaoSong __u32 FileIndex; 69d7edd389SChenXiaoSong __le64 CreationTime; 70d7edd389SChenXiaoSong __le64 LastAccessTime; 71d7edd389SChenXiaoSong __le64 LastWriteTime; 72d7edd389SChenXiaoSong __le64 ChangeTime; 73d7edd389SChenXiaoSong __le64 EndOfFile; 74d7edd389SChenXiaoSong __le64 AllocationSize; 75d7edd389SChenXiaoSong __le32 ExtFileAttributes; 76d7edd389SChenXiaoSong __le32 FileNameLength; 77d7edd389SChenXiaoSong __le32 EaSize; /* EA size */ 78d7edd389SChenXiaoSong __le32 Reserved; 79d7edd389SChenXiaoSong __le64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit*/ 80d7edd389SChenXiaoSong char FileName[]; 81d7edd389SChenXiaoSong } __packed FILE_ID_FULL_DIR_INFO; /* level 0x105 FF rsp data */ 82d7edd389SChenXiaoSong 83d7edd389SChenXiaoSong /* See MS-FSCC 2.4.34 */ 84d7edd389SChenXiaoSong struct smb2_file_network_open_info { 85d7edd389SChenXiaoSong struct_group_attr(network_open_info, __packed, 86d7edd389SChenXiaoSong __le64 CreationTime; 87d7edd389SChenXiaoSong __le64 LastAccessTime; 88d7edd389SChenXiaoSong __le64 LastWriteTime; 89d7edd389SChenXiaoSong __le64 ChangeTime; 90d7edd389SChenXiaoSong __le64 AllocationSize; 91d7edd389SChenXiaoSong __le64 EndOfFile; 92d7edd389SChenXiaoSong __le32 Attributes; 93d7edd389SChenXiaoSong ); 94d7edd389SChenXiaoSong __le32 Reserved; 95d7edd389SChenXiaoSong } __packed; /* level 34 Query also similar returned in close rsp and open rsp */ 96d7edd389SChenXiaoSong 97c4a2a49fSChenXiaoSong /* See MS-FSCC 2.5.1 */ 98c4a2a49fSChenXiaoSong #define MAX_FS_NAME_LEN 52 99c4a2a49fSChenXiaoSong typedef struct { 100c4a2a49fSChenXiaoSong __le32 Attributes; 101c4a2a49fSChenXiaoSong __le32 MaxPathNameComponentLength; 102c4a2a49fSChenXiaoSong __le32 FileSystemNameLen; 103c4a2a49fSChenXiaoSong __le16 FileSystemName[]; /* do not have to save this - get subset? */ 104c4a2a49fSChenXiaoSong } __packed FILE_SYSTEM_ATTRIBUTE_INFO; 105c4a2a49fSChenXiaoSong 10684d8d4cfSChenXiaoSong /* List of FileSystemAttributes - see MS-FSCC 2.5.1 */ 10784d8d4cfSChenXiaoSong #define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* faster nonsparse extend */ 10884d8d4cfSChenXiaoSong #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 /* allow ioctl dup extents */ 10984d8d4cfSChenXiaoSong #define FILE_SUPPORT_INTEGRITY_STREAMS 0x04000000 11084d8d4cfSChenXiaoSong #define FILE_SUPPORTS_USN_JOURNAL 0x02000000 11184d8d4cfSChenXiaoSong #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 11284d8d4cfSChenXiaoSong #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 11384d8d4cfSChenXiaoSong #define FILE_SUPPORTS_HARD_LINKS 0x00400000 11484d8d4cfSChenXiaoSong #define FILE_SUPPORTS_TRANSACTIONS 0x00200000 11584d8d4cfSChenXiaoSong #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 11684d8d4cfSChenXiaoSong #define FILE_READ_ONLY_VOLUME 0x00080000 11784d8d4cfSChenXiaoSong #define FILE_NAMED_STREAMS 0x00040000 11884d8d4cfSChenXiaoSong #define FILE_SUPPORTS_ENCRYPTION 0x00020000 11984d8d4cfSChenXiaoSong #define FILE_SUPPORTS_OBJECT_IDS 0x00010000 12084d8d4cfSChenXiaoSong #define FILE_VOLUME_IS_COMPRESSED 0x00008000 12184d8d4cfSChenXiaoSong #define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x00000400 12284d8d4cfSChenXiaoSong #define FILE_RETURNS_CLEANUP_RESULT_INFO 0x00000200 12384d8d4cfSChenXiaoSong #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100 12484d8d4cfSChenXiaoSong #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080 12584d8d4cfSChenXiaoSong #define FILE_SUPPORTS_SPARSE_FILES 0x00000040 12684d8d4cfSChenXiaoSong #define FILE_VOLUME_QUOTAS 0x00000020 12784d8d4cfSChenXiaoSong #define FILE_FILE_COMPRESSION 0x00000010 12884d8d4cfSChenXiaoSong #define FILE_PERSISTENT_ACLS 0x00000008 12984d8d4cfSChenXiaoSong #define FILE_UNICODE_ON_DISK 0x00000004 13084d8d4cfSChenXiaoSong #define FILE_CASE_PRESERVED_NAMES 0x00000002 13184d8d4cfSChenXiaoSong #define FILE_CASE_SENSITIVE_SEARCH 0x00000001 13284d8d4cfSChenXiaoSong 133464b9139SChenXiaoSong /* See MS-FSCC 2.5.8 */ 134464b9139SChenXiaoSong typedef struct { 135464b9139SChenXiaoSong __le64 TotalAllocationUnits; 136464b9139SChenXiaoSong __le64 AvailableAllocationUnits; 137464b9139SChenXiaoSong __le32 SectorsPerAllocationUnit; 138464b9139SChenXiaoSong __le32 BytesPerSector; 139464b9139SChenXiaoSong } __packed FILE_SYSTEM_SIZE_INFO; /* size info, level 0x103 */ 140464b9139SChenXiaoSong 141d7edd389SChenXiaoSong /* See MS-FSCC 2.5.10 */ 142d7edd389SChenXiaoSong typedef struct { 143d7edd389SChenXiaoSong __le32 DeviceType; 144d7edd389SChenXiaoSong __le32 DeviceCharacteristics; 145d7edd389SChenXiaoSong } __packed FILE_SYSTEM_DEVICE_INFO; /* device info level 0x104 */ 146d7edd389SChenXiaoSong 147d7edd389SChenXiaoSong /* 148*2b6abb89SChenXiaoSong * File Attributes 149*2b6abb89SChenXiaoSong * See MS-FSCC 2.6 150*2b6abb89SChenXiaoSong */ 151*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_READONLY 0x00000001 152*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_HIDDEN 0x00000002 153*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_SYSTEM 0x00000004 154*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 155*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 156*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_NORMAL 0x00000080 157*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 158*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 159*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 160*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 161*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_OFFLINE 0x00001000 162*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 163*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 164*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000 165*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000 166*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_MASK (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | \ 167*2b6abb89SChenXiaoSong FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_DIRECTORY | \ 168*2b6abb89SChenXiaoSong FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_NORMAL | \ 169*2b6abb89SChenXiaoSong FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_SPARSE_FILE | \ 170*2b6abb89SChenXiaoSong FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_COMPRESSED | \ 171*2b6abb89SChenXiaoSong FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | \ 172*2b6abb89SChenXiaoSong FILE_ATTRIBUTE_ENCRYPTED | FILE_ATTRIBUTE_INTEGRITY_STREAM | \ 173*2b6abb89SChenXiaoSong FILE_ATTRIBUTE_NO_SCRUB_DATA) 174*2b6abb89SChenXiaoSong 175*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_READONLY_LE cpu_to_le32(FILE_ATTRIBUTE_READONLY) 176*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_HIDDEN_LE cpu_to_le32(FILE_ATTRIBUTE_HIDDEN) 177*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_SYSTEM_LE cpu_to_le32(FILE_ATTRIBUTE_SYSTEM) 178*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_DIRECTORY_LE cpu_to_le32(FILE_ATTRIBUTE_DIRECTORY) 179*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_ARCHIVE_LE cpu_to_le32(FILE_ATTRIBUTE_ARCHIVE) 180*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_NORMAL_LE cpu_to_le32(FILE_ATTRIBUTE_NORMAL) 181*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_TEMPORARY_LE cpu_to_le32(FILE_ATTRIBUTE_TEMPORARY) 182*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_SPARSE_FILE_LE cpu_to_le32(FILE_ATTRIBUTE_SPARSE_FILE) 183*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_REPARSE_POINT_LE cpu_to_le32(FILE_ATTRIBUTE_REPARSE_POINT) 184*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_COMPRESSED_LE cpu_to_le32(FILE_ATTRIBUTE_COMPRESSED) 185*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_OFFLINE_LE cpu_to_le32(FILE_ATTRIBUTE_OFFLINE) 186*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED_LE cpu_to_le32(FILE_ATTRIBUTE_NOT_CONTENT_INDEXED) 187*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_ENCRYPTED_LE cpu_to_le32(FILE_ATTRIBUTE_ENCRYPTED) 188*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_INTEGRITY_STREAM_LE cpu_to_le32(FILE_ATTRIBUTE_INTEGRITY_STREAM) 189*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_NO_SCRUB_DATA_LE cpu_to_le32(FILE_ATTRIBUTE_NO_SCRUB_DATA) 190*2b6abb89SChenXiaoSong #define FILE_ATTRIBUTE_MASK_LE cpu_to_le32(FILE_ATTRIBUTE_MASK) 191*2b6abb89SChenXiaoSong 192*2b6abb89SChenXiaoSong /* 19308c2a7d2SChenXiaoSong * Response contains array of the following structures 19408c2a7d2SChenXiaoSong * See MS-FSCC 2.7.1 19508c2a7d2SChenXiaoSong */ 19608c2a7d2SChenXiaoSong struct file_notify_information { 19708c2a7d2SChenXiaoSong __le32 NextEntryOffset; 19808c2a7d2SChenXiaoSong __le32 Action; 19908c2a7d2SChenXiaoSong __le32 FileNameLength; 20008c2a7d2SChenXiaoSong __u8 FileName[]; 20108c2a7d2SChenXiaoSong } __packed; 20208c2a7d2SChenXiaoSong 20308c2a7d2SChenXiaoSong /* 204d7edd389SChenXiaoSong * See POSIX Extensions to MS-FSCC 2.3.2.1 205d7edd389SChenXiaoSong * Link: https://gitlab.com/samba-team/smb3-posix-spec/-/blob/master/fscc_posix_extensions.md 206d7edd389SChenXiaoSong */ 207d7edd389SChenXiaoSong typedef struct { 208d7edd389SChenXiaoSong /* For undefined recommended transfer size return -1 in that field */ 209d7edd389SChenXiaoSong __le32 OptimalTransferSize; /* bsize on some os, iosize on other os */ 210d7edd389SChenXiaoSong __le32 BlockSize; 211d7edd389SChenXiaoSong /* The next three fields are in terms of the block size. 212d7edd389SChenXiaoSong * (above). If block size is unknown, 4096 would be a 213d7edd389SChenXiaoSong * reasonable block size for a server to report. 214d7edd389SChenXiaoSong * Note that returning the blocks/blocksavail removes need 215d7edd389SChenXiaoSong * to make a second call (to QFSInfo level 0x103 to get this info. 216d7edd389SChenXiaoSong * UserBlockAvail is typically less than or equal to BlocksAvail, 217d7edd389SChenXiaoSong * if no distinction is made return the same value in each 218d7edd389SChenXiaoSong */ 219d7edd389SChenXiaoSong __le64 TotalBlocks; 220d7edd389SChenXiaoSong __le64 BlocksAvail; /* bfree */ 221d7edd389SChenXiaoSong __le64 UserBlocksAvail; /* bavail */ 222d7edd389SChenXiaoSong /* For undefined Node fields or FSID return -1 */ 223d7edd389SChenXiaoSong __le64 TotalFileNodes; 224d7edd389SChenXiaoSong __le64 FreeFileNodes; 225d7edd389SChenXiaoSong __le64 FileSysIdentifier; /* fsid */ 226d7edd389SChenXiaoSong /* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */ 227d7edd389SChenXiaoSong /* NB flags can come from FILE_SYSTEM_DEVICE_INFO call */ 228d7edd389SChenXiaoSong } __packed FILE_SYSTEM_POSIX_INFO; 229d7edd389SChenXiaoSong 23084d8d4cfSChenXiaoSong #endif /* _COMMON_SMB_FSCC_H */ 231