1 /* 2 * This file is auto-generated. Modifications will be lost. 3 * 4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/ 5 * for more information. 6 */ 7 #ifndef _LINUX_FUSE_H 8 #define _LINUX_FUSE_H 9 #include <stdint.h> 10 #define FUSE_KERNEL_VERSION 7 11 #define FUSE_KERNEL_MINOR_VERSION 40 12 #define FUSE_ROOT_ID 1 13 struct fuse_attr { 14 uint64_t ino; 15 uint64_t size; 16 uint64_t blocks; 17 uint64_t atime; 18 uint64_t mtime; 19 uint64_t ctime; 20 uint32_t atimensec; 21 uint32_t mtimensec; 22 uint32_t ctimensec; 23 uint32_t mode; 24 uint32_t nlink; 25 uint32_t uid; 26 uint32_t gid; 27 uint32_t rdev; 28 uint32_t blksize; 29 uint32_t flags; 30 }; 31 struct fuse_sx_time { 32 int64_t tv_sec; 33 uint32_t tv_nsec; 34 int32_t __reserved; 35 }; 36 struct fuse_statx { 37 uint32_t mask; 38 uint32_t blksize; 39 uint64_t attributes; 40 uint32_t nlink; 41 uint32_t uid; 42 uint32_t gid; 43 uint16_t mode; 44 uint16_t __spare0[1]; 45 uint64_t ino; 46 uint64_t size; 47 uint64_t blocks; 48 uint64_t attributes_mask; 49 struct fuse_sx_time atime; 50 struct fuse_sx_time btime; 51 struct fuse_sx_time ctime; 52 struct fuse_sx_time mtime; 53 uint32_t rdev_major; 54 uint32_t rdev_minor; 55 uint32_t dev_major; 56 uint32_t dev_minor; 57 uint64_t __spare2[14]; 58 }; 59 struct fuse_kstatfs { 60 uint64_t blocks; 61 uint64_t bfree; 62 uint64_t bavail; 63 uint64_t files; 64 uint64_t ffree; 65 uint32_t bsize; 66 uint32_t namelen; 67 uint32_t frsize; 68 uint32_t padding; 69 uint32_t spare[6]; 70 }; 71 struct fuse_file_lock { 72 uint64_t start; 73 uint64_t end; 74 uint32_t type; 75 uint32_t pid; 76 }; 77 #define FATTR_MODE (1 << 0) 78 #define FATTR_UID (1 << 1) 79 #define FATTR_GID (1 << 2) 80 #define FATTR_SIZE (1 << 3) 81 #define FATTR_ATIME (1 << 4) 82 #define FATTR_MTIME (1 << 5) 83 #define FATTR_FH (1 << 6) 84 #define FATTR_ATIME_NOW (1 << 7) 85 #define FATTR_MTIME_NOW (1 << 8) 86 #define FATTR_LOCKOWNER (1 << 9) 87 #define FATTR_CTIME (1 << 10) 88 #define FATTR_KILL_SUIDGID (1 << 11) 89 #define FOPEN_DIRECT_IO (1 << 0) 90 #define FOPEN_KEEP_CACHE (1 << 1) 91 #define FOPEN_NONSEEKABLE (1 << 2) 92 #define FOPEN_CACHE_DIR (1 << 3) 93 #define FOPEN_STREAM (1 << 4) 94 #define FOPEN_NOFLUSH (1 << 5) 95 #define FOPEN_PARALLEL_DIRECT_WRITES (1 << 6) 96 #define FOPEN_PASSTHROUGH (1 << 7) 97 #define FUSE_ASYNC_READ (1 << 0) 98 #define FUSE_POSIX_LOCKS (1 << 1) 99 #define FUSE_FILE_OPS (1 << 2) 100 #define FUSE_ATOMIC_O_TRUNC (1 << 3) 101 #define FUSE_EXPORT_SUPPORT (1 << 4) 102 #define FUSE_BIG_WRITES (1 << 5) 103 #define FUSE_DONT_MASK (1 << 6) 104 #define FUSE_SPLICE_WRITE (1 << 7) 105 #define FUSE_SPLICE_MOVE (1 << 8) 106 #define FUSE_SPLICE_READ (1 << 9) 107 #define FUSE_FLOCK_LOCKS (1 << 10) 108 #define FUSE_HAS_IOCTL_DIR (1 << 11) 109 #define FUSE_AUTO_INVAL_DATA (1 << 12) 110 #define FUSE_DO_READDIRPLUS (1 << 13) 111 #define FUSE_READDIRPLUS_AUTO (1 << 14) 112 #define FUSE_ASYNC_DIO (1 << 15) 113 #define FUSE_WRITEBACK_CACHE (1 << 16) 114 #define FUSE_NO_OPEN_SUPPORT (1 << 17) 115 #define FUSE_PARALLEL_DIROPS (1 << 18) 116 #define FUSE_HANDLE_KILLPRIV (1 << 19) 117 #define FUSE_POSIX_ACL (1 << 20) 118 #define FUSE_ABORT_ERROR (1 << 21) 119 #define FUSE_MAX_PAGES (1 << 22) 120 #define FUSE_CACHE_SYMLINKS (1 << 23) 121 #define FUSE_NO_OPENDIR_SUPPORT (1 << 24) 122 #define FUSE_EXPLICIT_INVAL_DATA (1 << 25) 123 #define FUSE_MAP_ALIGNMENT (1 << 26) 124 #define FUSE_SUBMOUNTS (1 << 27) 125 #define FUSE_HANDLE_KILLPRIV_V2 (1 << 28) 126 #define FUSE_SETXATTR_EXT (1 << 29) 127 #define FUSE_INIT_EXT (1 << 30) 128 #define FUSE_INIT_RESERVED (1 << 31) 129 #define FUSE_SECURITY_CTX (1ULL << 32) 130 #define FUSE_HAS_INODE_DAX (1ULL << 33) 131 #define FUSE_CREATE_SUPP_GROUP (1ULL << 34) 132 #define FUSE_HAS_EXPIRE_ONLY (1ULL << 35) 133 #define FUSE_DIRECT_IO_ALLOW_MMAP (1ULL << 36) 134 #define FUSE_PASSTHROUGH (1ULL << 37) 135 #define FUSE_NO_EXPORT_SUPPORT (1ULL << 38) 136 #define FUSE_HAS_RESEND (1ULL << 39) 137 #define FUSE_DIRECT_IO_RELAX FUSE_DIRECT_IO_ALLOW_MMAP 138 #define CUSE_UNRESTRICTED_IOCTL (1 << 0) 139 #define FUSE_RELEASE_FLUSH (1 << 0) 140 #define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1) 141 #define FUSE_GETATTR_FH (1 << 0) 142 #define FUSE_LK_FLOCK (1 << 0) 143 #define FUSE_WRITE_CACHE (1 << 0) 144 #define FUSE_WRITE_LOCKOWNER (1 << 1) 145 #define FUSE_WRITE_KILL_SUIDGID (1 << 2) 146 #define FUSE_WRITE_KILL_PRIV FUSE_WRITE_KILL_SUIDGID 147 #define FUSE_READ_LOCKOWNER (1 << 1) 148 #define FUSE_IOCTL_COMPAT (1 << 0) 149 #define FUSE_IOCTL_UNRESTRICTED (1 << 1) 150 #define FUSE_IOCTL_RETRY (1 << 2) 151 #define FUSE_IOCTL_32BIT (1 << 3) 152 #define FUSE_IOCTL_DIR (1 << 4) 153 #define FUSE_IOCTL_COMPAT_X32 (1 << 5) 154 #define FUSE_IOCTL_MAX_IOV 256 155 #define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) 156 #define FUSE_FSYNC_FDATASYNC (1 << 0) 157 #define FUSE_ATTR_SUBMOUNT (1 << 0) 158 #define FUSE_ATTR_DAX (1 << 1) 159 #define FUSE_OPEN_KILL_SUIDGID (1 << 0) 160 #define FUSE_SETXATTR_ACL_KILL_SGID (1 << 0) 161 #define FUSE_EXPIRE_ONLY (1 << 0) 162 enum fuse_ext_type { 163 FUSE_MAX_NR_SECCTX = 31, 164 FUSE_EXT_GROUPS = 32, 165 }; 166 enum fuse_opcode { 167 FUSE_LOOKUP = 1, 168 FUSE_FORGET = 2, 169 FUSE_GETATTR = 3, 170 FUSE_SETATTR = 4, 171 FUSE_READLINK = 5, 172 FUSE_SYMLINK = 6, 173 FUSE_MKNOD = 8, 174 FUSE_MKDIR = 9, 175 FUSE_UNLINK = 10, 176 FUSE_RMDIR = 11, 177 FUSE_RENAME = 12, 178 FUSE_LINK = 13, 179 FUSE_OPEN = 14, 180 FUSE_READ = 15, 181 FUSE_WRITE = 16, 182 FUSE_STATFS = 17, 183 FUSE_RELEASE = 18, 184 FUSE_FSYNC = 20, 185 FUSE_SETXATTR = 21, 186 FUSE_GETXATTR = 22, 187 FUSE_LISTXATTR = 23, 188 FUSE_REMOVEXATTR = 24, 189 FUSE_FLUSH = 25, 190 FUSE_INIT = 26, 191 FUSE_OPENDIR = 27, 192 FUSE_READDIR = 28, 193 FUSE_RELEASEDIR = 29, 194 FUSE_FSYNCDIR = 30, 195 FUSE_GETLK = 31, 196 FUSE_SETLK = 32, 197 FUSE_SETLKW = 33, 198 FUSE_ACCESS = 34, 199 FUSE_CREATE = 35, 200 FUSE_INTERRUPT = 36, 201 FUSE_BMAP = 37, 202 FUSE_DESTROY = 38, 203 FUSE_IOCTL = 39, 204 FUSE_POLL = 40, 205 FUSE_NOTIFY_REPLY = 41, 206 FUSE_BATCH_FORGET = 42, 207 FUSE_FALLOCATE = 43, 208 FUSE_READDIRPLUS = 44, 209 FUSE_RENAME2 = 45, 210 FUSE_LSEEK = 46, 211 FUSE_COPY_FILE_RANGE = 47, 212 FUSE_SETUPMAPPING = 48, 213 FUSE_REMOVEMAPPING = 49, 214 FUSE_SYNCFS = 50, 215 FUSE_TMPFILE = 51, 216 FUSE_STATX = 52, 217 CUSE_INIT = 4096, 218 CUSE_INIT_BSWAP_RESERVED = 1048576, 219 FUSE_INIT_BSWAP_RESERVED = 436207616, 220 }; 221 enum fuse_notify_code { 222 FUSE_NOTIFY_POLL = 1, 223 FUSE_NOTIFY_INVAL_INODE = 2, 224 FUSE_NOTIFY_INVAL_ENTRY = 3, 225 FUSE_NOTIFY_STORE = 4, 226 FUSE_NOTIFY_RETRIEVE = 5, 227 FUSE_NOTIFY_DELETE = 6, 228 FUSE_NOTIFY_RESEND = 7, 229 FUSE_NOTIFY_CODE_MAX, 230 }; 231 #define FUSE_MIN_READ_BUFFER 8192 232 #define FUSE_COMPAT_ENTRY_OUT_SIZE 120 233 struct fuse_entry_out { 234 uint64_t nodeid; 235 uint64_t generation; 236 uint64_t entry_valid; 237 uint64_t attr_valid; 238 uint32_t entry_valid_nsec; 239 uint32_t attr_valid_nsec; 240 struct fuse_attr attr; 241 }; 242 struct fuse_forget_in { 243 uint64_t nlookup; 244 }; 245 struct fuse_forget_one { 246 uint64_t nodeid; 247 uint64_t nlookup; 248 }; 249 struct fuse_batch_forget_in { 250 uint32_t count; 251 uint32_t dummy; 252 }; 253 struct fuse_getattr_in { 254 uint32_t getattr_flags; 255 uint32_t dummy; 256 uint64_t fh; 257 }; 258 #define FUSE_COMPAT_ATTR_OUT_SIZE 96 259 struct fuse_attr_out { 260 uint64_t attr_valid; 261 uint32_t attr_valid_nsec; 262 uint32_t dummy; 263 struct fuse_attr attr; 264 }; 265 struct fuse_statx_in { 266 uint32_t getattr_flags; 267 uint32_t reserved; 268 uint64_t fh; 269 uint32_t sx_flags; 270 uint32_t sx_mask; 271 }; 272 struct fuse_statx_out { 273 uint64_t attr_valid; 274 uint32_t attr_valid_nsec; 275 uint32_t flags; 276 uint64_t spare[2]; 277 struct fuse_statx stat; 278 }; 279 #define FUSE_COMPAT_MKNOD_IN_SIZE 8 280 struct fuse_mknod_in { 281 uint32_t mode; 282 uint32_t rdev; 283 uint32_t umask; 284 uint32_t padding; 285 }; 286 struct fuse_mkdir_in { 287 uint32_t mode; 288 uint32_t umask; 289 }; 290 struct fuse_rename_in { 291 uint64_t newdir; 292 }; 293 struct fuse_rename2_in { 294 uint64_t newdir; 295 uint32_t flags; 296 uint32_t padding; 297 }; 298 struct fuse_link_in { 299 uint64_t oldnodeid; 300 }; 301 struct fuse_setattr_in { 302 uint32_t valid; 303 uint32_t padding; 304 uint64_t fh; 305 uint64_t size; 306 uint64_t lock_owner; 307 uint64_t atime; 308 uint64_t mtime; 309 uint64_t ctime; 310 uint32_t atimensec; 311 uint32_t mtimensec; 312 uint32_t ctimensec; 313 uint32_t mode; 314 uint32_t unused4; 315 uint32_t uid; 316 uint32_t gid; 317 uint32_t unused5; 318 }; 319 struct fuse_open_in { 320 uint32_t flags; 321 uint32_t open_flags; 322 }; 323 struct fuse_create_in { 324 uint32_t flags; 325 uint32_t mode; 326 uint32_t umask; 327 uint32_t open_flags; 328 }; 329 struct fuse_open_out { 330 uint64_t fh; 331 uint32_t open_flags; 332 int32_t backing_id; 333 }; 334 struct fuse_release_in { 335 uint64_t fh; 336 uint32_t flags; 337 uint32_t release_flags; 338 uint64_t lock_owner; 339 }; 340 struct fuse_flush_in { 341 uint64_t fh; 342 uint32_t unused; 343 uint32_t padding; 344 uint64_t lock_owner; 345 }; 346 struct fuse_read_in { 347 uint64_t fh; 348 uint64_t offset; 349 uint32_t size; 350 uint32_t read_flags; 351 uint64_t lock_owner; 352 uint32_t flags; 353 uint32_t padding; 354 }; 355 #define FUSE_COMPAT_WRITE_IN_SIZE 24 356 struct fuse_write_in { 357 uint64_t fh; 358 uint64_t offset; 359 uint32_t size; 360 uint32_t write_flags; 361 uint64_t lock_owner; 362 uint32_t flags; 363 uint32_t padding; 364 }; 365 struct fuse_write_out { 366 uint32_t size; 367 uint32_t padding; 368 }; 369 #define FUSE_COMPAT_STATFS_SIZE 48 370 struct fuse_statfs_out { 371 struct fuse_kstatfs st; 372 }; 373 struct fuse_fsync_in { 374 uint64_t fh; 375 uint32_t fsync_flags; 376 uint32_t padding; 377 }; 378 #define FUSE_COMPAT_SETXATTR_IN_SIZE 8 379 struct fuse_setxattr_in { 380 uint32_t size; 381 uint32_t flags; 382 uint32_t setxattr_flags; 383 uint32_t padding; 384 }; 385 struct fuse_getxattr_in { 386 uint32_t size; 387 uint32_t padding; 388 }; 389 struct fuse_getxattr_out { 390 uint32_t size; 391 uint32_t padding; 392 }; 393 struct fuse_lk_in { 394 uint64_t fh; 395 uint64_t owner; 396 struct fuse_file_lock lk; 397 uint32_t lk_flags; 398 uint32_t padding; 399 }; 400 struct fuse_lk_out { 401 struct fuse_file_lock lk; 402 }; 403 struct fuse_access_in { 404 uint32_t mask; 405 uint32_t padding; 406 }; 407 struct fuse_init_in { 408 uint32_t major; 409 uint32_t minor; 410 uint32_t max_readahead; 411 uint32_t flags; 412 uint32_t flags2; 413 uint32_t unused[11]; 414 }; 415 #define FUSE_COMPAT_INIT_OUT_SIZE 8 416 #define FUSE_COMPAT_22_INIT_OUT_SIZE 24 417 struct fuse_init_out { 418 uint32_t major; 419 uint32_t minor; 420 uint32_t max_readahead; 421 uint32_t flags; 422 uint16_t max_background; 423 uint16_t congestion_threshold; 424 uint32_t max_write; 425 uint32_t time_gran; 426 uint16_t max_pages; 427 uint16_t map_alignment; 428 uint32_t flags2; 429 uint32_t max_stack_depth; 430 uint32_t unused[6]; 431 }; 432 #define CUSE_INIT_INFO_MAX 4096 433 struct cuse_init_in { 434 uint32_t major; 435 uint32_t minor; 436 uint32_t unused; 437 uint32_t flags; 438 }; 439 struct cuse_init_out { 440 uint32_t major; 441 uint32_t minor; 442 uint32_t unused; 443 uint32_t flags; 444 uint32_t max_read; 445 uint32_t max_write; 446 uint32_t dev_major; 447 uint32_t dev_minor; 448 uint32_t spare[10]; 449 }; 450 struct fuse_interrupt_in { 451 uint64_t unique; 452 }; 453 struct fuse_bmap_in { 454 uint64_t block; 455 uint32_t blocksize; 456 uint32_t padding; 457 }; 458 struct fuse_bmap_out { 459 uint64_t block; 460 }; 461 struct fuse_ioctl_in { 462 uint64_t fh; 463 uint32_t flags; 464 uint32_t cmd; 465 uint64_t arg; 466 uint32_t in_size; 467 uint32_t out_size; 468 }; 469 struct fuse_ioctl_iovec { 470 uint64_t base; 471 uint64_t len; 472 }; 473 struct fuse_ioctl_out { 474 int32_t result; 475 uint32_t flags; 476 uint32_t in_iovs; 477 uint32_t out_iovs; 478 }; 479 struct fuse_poll_in { 480 uint64_t fh; 481 uint64_t kh; 482 uint32_t flags; 483 uint32_t events; 484 }; 485 struct fuse_poll_out { 486 uint32_t revents; 487 uint32_t padding; 488 }; 489 struct fuse_notify_poll_wakeup_out { 490 uint64_t kh; 491 }; 492 struct fuse_fallocate_in { 493 uint64_t fh; 494 uint64_t offset; 495 uint64_t length; 496 uint32_t mode; 497 uint32_t padding; 498 }; 499 #define FUSE_UNIQUE_RESEND (1ULL << 63) 500 struct fuse_in_header { 501 uint32_t len; 502 uint32_t opcode; 503 uint64_t unique; 504 uint64_t nodeid; 505 uint32_t uid; 506 uint32_t gid; 507 uint32_t pid; 508 uint16_t total_extlen; 509 uint16_t padding; 510 }; 511 struct fuse_out_header { 512 uint32_t len; 513 int32_t error; 514 uint64_t unique; 515 }; 516 struct fuse_dirent { 517 uint64_t ino; 518 uint64_t off; 519 uint32_t namelen; 520 uint32_t type; 521 char name[]; 522 }; 523 #define FUSE_REC_ALIGN(x) (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1)) 524 #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name) 525 #define FUSE_DIRENT_ALIGN(x) FUSE_REC_ALIGN(x) 526 #define FUSE_DIRENT_SIZE(d) FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) 527 struct fuse_direntplus { 528 struct fuse_entry_out entry_out; 529 struct fuse_dirent dirent; 530 }; 531 #define FUSE_NAME_OFFSET_DIRENTPLUS offsetof(struct fuse_direntplus, dirent.name) 532 #define FUSE_DIRENTPLUS_SIZE(d) FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen) 533 struct fuse_notify_inval_inode_out { 534 uint64_t ino; 535 int64_t off; 536 int64_t len; 537 }; 538 struct fuse_notify_inval_entry_out { 539 uint64_t parent; 540 uint32_t namelen; 541 uint32_t flags; 542 }; 543 struct fuse_notify_delete_out { 544 uint64_t parent; 545 uint64_t child; 546 uint32_t namelen; 547 uint32_t padding; 548 }; 549 struct fuse_notify_store_out { 550 uint64_t nodeid; 551 uint64_t offset; 552 uint32_t size; 553 uint32_t padding; 554 }; 555 struct fuse_notify_retrieve_out { 556 uint64_t notify_unique; 557 uint64_t nodeid; 558 uint64_t offset; 559 uint32_t size; 560 uint32_t padding; 561 }; 562 struct fuse_notify_retrieve_in { 563 uint64_t dummy1; 564 uint64_t offset; 565 uint32_t size; 566 uint32_t dummy2; 567 uint64_t dummy3; 568 uint64_t dummy4; 569 }; 570 struct fuse_backing_map { 571 int32_t fd; 572 uint32_t flags; 573 uint64_t padding; 574 }; 575 #define FUSE_DEV_IOC_MAGIC 229 576 #define FUSE_DEV_IOC_CLONE _IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t) 577 #define FUSE_DEV_IOC_BACKING_OPEN _IOW(FUSE_DEV_IOC_MAGIC, 1, struct fuse_backing_map) 578 #define FUSE_DEV_IOC_BACKING_CLOSE _IOW(FUSE_DEV_IOC_MAGIC, 2, uint32_t) 579 struct fuse_lseek_in { 580 uint64_t fh; 581 uint64_t offset; 582 uint32_t whence; 583 uint32_t padding; 584 }; 585 struct fuse_lseek_out { 586 uint64_t offset; 587 }; 588 struct fuse_copy_file_range_in { 589 uint64_t fh_in; 590 uint64_t off_in; 591 uint64_t nodeid_out; 592 uint64_t fh_out; 593 uint64_t off_out; 594 uint64_t len; 595 uint64_t flags; 596 }; 597 #define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0) 598 #define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1) 599 struct fuse_setupmapping_in { 600 uint64_t fh; 601 uint64_t foffset; 602 uint64_t len; 603 uint64_t flags; 604 uint64_t moffset; 605 }; 606 struct fuse_removemapping_in { 607 uint32_t count; 608 }; 609 struct fuse_removemapping_one { 610 uint64_t moffset; 611 uint64_t len; 612 }; 613 #define FUSE_REMOVEMAPPING_MAX_ENTRY (PAGE_SIZE / sizeof(struct fuse_removemapping_one)) 614 struct fuse_syncfs_in { 615 uint64_t padding; 616 }; 617 struct fuse_secctx { 618 uint32_t size; 619 uint32_t padding; 620 }; 621 struct fuse_secctx_header { 622 uint32_t size; 623 uint32_t nr_secctx; 624 }; 625 struct fuse_ext_header { 626 uint32_t size; 627 uint32_t type; 628 }; 629 struct fuse_supp_groups { 630 uint32_t nr_groups; 631 uint32_t groups[]; 632 }; 633 #endif 634