14f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe#ifndef FIO_VERIFY_H 24f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe#define FIO_VERIFY_H 34f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe 403e20d687566753b90383571e5e152c5142bdffdBruce Cran#include <stdint.h> 503e20d687566753b90383571e5e152c5142bdffdBruce Cran 6d3a173a927084660c365d6aa162016ebb0746946Jens Axboe#define FIO_HDR_MAGIC 0xacca 74f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe 84f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboeenum { 94f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_NONE = 0, /* no verification */ 104f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_MD5, /* md5 sum data blocks */ 114f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_CRC64, /* crc64 sum data blocks */ 124f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_CRC32, /* crc32 sum data blocks */ 134f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_CRC32C, /* crc32c sum data blocks */ 144f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_CRC32C_INTEL, /* crc32c sum data blocks with hw */ 154f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_CRC16, /* crc16 sum data blocks */ 164f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_CRC7, /* crc7 sum data blocks */ 174f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_SHA256, /* sha256 sum data blocks */ 184f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_SHA512, /* sha512 sum data blocks */ 19844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe VERIFY_XXHASH, /* xxhash sum data blocks */ 204f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_META, /* block_num, timestamp etc. */ 217c353ceb3257b132f4c98326046b42201e070731Jens Axboe VERIFY_SHA1, /* sha1 sum data blocks */ 2292bf48d530ab09bae4058df711c4723c73da51b9Jens Axboe VERIFY_PATTERN, /* verify specific patterns */ 234f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe VERIFY_NULL, /* pretend to verify */ 244f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 254f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe 264f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe/* 274f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe * A header structure associated with each checksummed data block. It is 284f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe * followed by a checksum specific header that contains the verification 294f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe * data. 304f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe */ 314f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct verify_header { 32d3a173a927084660c365d6aa162016ebb0746946Jens Axboe uint16_t magic; 33d3a173a927084660c365d6aa162016ebb0746946Jens Axboe uint16_t verify_type; 34f65d1c2663ac6007eac1a2063fe25b4275d013e4Jens Axboe uint32_t len; 35f65d1c2663ac6007eac1a2063fe25b4275d013e4Jens Axboe uint64_t rand_seed; 36f65d1c2663ac6007eac1a2063fe25b4275d013e4Jens Axboe uint32_t crc32; 374f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 384f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe 394f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct vhdr_md5 { 4034644af59bd9232cc2948baf4f94b6534cb0a120Jens Axboe uint32_t md5_digest[4]; 414f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 424f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct vhdr_sha512 { 434f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe uint8_t sha512[128]; 444f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 454f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct vhdr_sha256 { 46bc77f56f79f6ae155e9eb26263ed686ef28b47ecJens Axboe uint8_t sha256[64]; 474f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 487c353ceb3257b132f4c98326046b42201e070731Jens Axboestruct vhdr_sha1 { 497c353ceb3257b132f4c98326046b42201e070731Jens Axboe uint32_t sha1[5]; 507c353ceb3257b132f4c98326046b42201e070731Jens Axboe}; 514f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct vhdr_crc64 { 524f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe uint64_t crc64; 534f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 544f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct vhdr_crc32 { 554f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe uint32_t crc32; 564f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 574f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct vhdr_crc16 { 584f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe uint16_t crc16; 594f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 604f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct vhdr_crc7 { 614f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe uint8_t crc7; 624f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 634f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboestruct vhdr_meta { 644f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe uint64_t offset; 654f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe unsigned char thread; 664f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe unsigned short numberio; 674f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe unsigned long time_sec; 684f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe unsigned long time_usec; 694f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe}; 70844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboestruct vhdr_xxhash { 71844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe uint32_t hash; 72844ea60273f4e7862150d9c6430cdb15768e2f34Jens Axboe}; 734f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe 744f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe/* 754f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe * Verify helpers 764f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe */ 774f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboeextern void populate_verify_io_u(struct thread_data *, struct io_u *); 784f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboeextern int __must_check get_next_verify(struct thread_data *td, struct io_u *); 794f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboeextern int __must_check verify_io_u(struct thread_data *, struct io_u *); 80e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboeextern int verify_io_u_async(struct thread_data *, struct io_u *); 81ce35b1ece06ce27ebff111e47c2a6610c311a92bJens Axboeextern void fill_verify_pattern(struct thread_data *td, void *p, unsigned int len, struct io_u *io_u, unsigned long seed, int use_seed); 82ce35b1ece06ce27ebff111e47c2a6610c311a92bJens Axboeextern void fill_buffer_pattern(struct thread_data *td, void *p, unsigned int len); 83dc5bfbb227f1af83adf0b686d147b7ae2107c144Jens Axboeextern void fio_verify_init(struct thread_data *td); 84e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboe 85e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboe/* 86e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboe * Async verify offload 87e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboe */ 88e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboeextern int verify_async_init(struct thread_data *); 89e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37Jens Axboeextern void verify_async_exit(struct thread_data *); 904f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe 914f5af7b2370a6d3e64bc5128905c1aa8b0dc51b0Jens Axboe#endif 92