#ifndef __CEPH_FEATURES #define __CEPH_FEATURES #include "sys/types.h" /* * Each time we reclaim bits for reuse we need to specify another * bitmask that, if all bits are set, indicates we have the new * incarnation of that feature. Base case is 1 (first use) */ #define CEPH_FEATURE_INCARNATION_1 (0ull) #define CEPH_FEATURE_INCARNATION_2 (1ull<<57) // SERVER_JEWEL #define CEPH_FEATURE_INCARNATION_3 ((1ull<<57)|(1ull<<28)) // SERVER_MIMIC #define DEFINE_CEPH_FEATURE(bit, incarnation, name) \ const static uint64_t CEPH_FEATURE_##name = (1ULL<= v25) DEFINE_CEPH_FEATURE(57, 1, MON_STATEFUL_SUB) // 4.13 DEFINE_CEPH_FEATURE_RETIRED(57, 1, MON_ROUTE_OSDMAP, MIMIC, OCTOPUS) // overlap DEFINE_CEPH_FEATURE(57, 1, SERVER_JEWEL) // overlap DEFINE_CEPH_FEATURE(58, 1, CRUSH_TUNABLES5) // 4.5 DEFINE_CEPH_FEATURE(58, 1, NEW_OSDOPREPLY_ENCODING) // overlap DEFINE_CEPH_FEATURE(58, 1, FS_FILE_LAYOUT_V2) // overlap DEFINE_CEPH_FEATURE(59, 1, FS_BTIME) DEFINE_CEPH_FEATURE(59, 1, FS_CHANGE_ATTR) // overlap DEFINE_CEPH_FEATURE(59, 1, MSG_ADDR2) // overlap DEFINE_CEPH_FEATURE(60, 1, OSD_RECOVERY_DELETES) // *do not share this bit* DEFINE_CEPH_FEATURE(61, 1, CEPHX_V2) // 4.19, *do not share this bit* DEFINE_CEPH_FEATURE(62, 1, RESERVED) // do not use; used as a sentinel DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS) // client-facing /* * Features supported. Should be everything above. */ #define CEPH_FEATURES_ALL \ (CEPH_FEATURE_UID | \ CEPH_FEATURE_NOSRCADDR | \ CEPH_FEATURE_FLOCK | \ CEPH_FEATURE_SUBSCRIBE2 | \ CEPH_FEATURE_MONNAMES | \ CEPH_FEATURE_RECONNECT_SEQ | \ CEPH_FEATURE_DIRLAYOUTHASH | \ CEPH_FEATURE_OBJECTLOCATOR | \ CEPH_FEATURE_PGID64 | \ CEPH_FEATURE_INCSUBOSDMAP | \ CEPH_FEATURE_PGPOOL3 | \ CEPH_FEATURE_OSDREPLYMUX | \ CEPH_FEATURE_OSDENC | \ CEPH_FEATURE_MONENC | \ CEPH_FEATURE_CRUSH_TUNABLES | \ CEPH_FEATURE_MSG_AUTH | \ CEPH_FEATURE_CRUSH_TUNABLES2 | \ CEPH_FEATURE_CREATEPOOLID | \ CEPH_FEATURE_REPLY_CREATE_INODE | \ CEPH_FEATURE_MDSENC | \ CEPH_FEATURE_OSDHASHPSPOOL | \ CEPH_FEATURE_NEW_OSDOP_ENCODING | \ CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING | \ DEPRECATED_CEPH_FEATURE_MON_SINGLE_PAXOS | \ CEPH_FEATURE_OSD_CACHEPOOL | \ CEPH_FEATURE_CRUSH_V2 | \ CEPH_FEATURE_EXPORT_PEER | \ CEPH_FEATURE_OSDMAP_ENC | \ CEPH_FEATURE_MDS_INLINE_DATA | \ CEPH_FEATURE_CRUSH_TUNABLES3 | \ CEPH_FEATURE_OSD_PRIMARY_AFFINITY | \ CEPH_FEATURE_MSGR_KEEPALIVE2 | \ CEPH_FEATURE_OSD_POOLRESEND | \ CEPH_FEATURE_OSD_FADVISE_FLAGS | \ CEPH_FEATURE_MDS_QUOTA | \ CEPH_FEATURE_CRUSH_V4 | \ CEPH_FEATURE_MON_STATEFUL_SUB | \ CEPH_FEATURE_CRUSH_TUNABLES5 | \ CEPH_FEATURE_SERVER_JEWEL | \ CEPH_FEATURE_FS_FILE_LAYOUT_V2 | \ CEPH_FEATURE_SERVER_KRAKEN | \ CEPH_FEATURE_FS_BTIME | \ CEPH_FEATURE_FS_CHANGE_ATTR | \ CEPH_FEATURE_MSG_ADDR2 | \ CEPH_FEATURE_SERVER_LUMINOUS | \ CEPH_FEATURE_RESEND_ON_SPLIT | \ CEPH_FEATURE_RADOS_BACKOFF | \ CEPH_FEATURE_OSD_RECOVERY_DELETES | \ CEPH_FEATURE_SERVER_MIMIC | \ CEPH_FEATURE_RECOVERY_RESERVATION_2 | \ CEPH_FEATURE_SERVER_NAUTILUS | \ CEPH_FEATURE_CEPHX_V2 | \ CEPH_FEATURE_OSD_PGLOG_HARDLIMIT | \ CEPH_FEATUREMASK_SERVER_OCTOPUS | \ CEPH_FEATUREMASK_STRETCH_MODE | \ CEPH_FEATUREMASK_OSD_REPOP_MLCOD | \ CEPH_FEATUREMASK_SERVER_PACIFIC | \ CEPH_FEATURE_OSD_FIXED_COLLECTION_LIST | \ CEPH_FEATURE_RANGE_BLOCKLIST | \ 0ULL) #define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL /* * crush related features */ #define CEPH_FEATURES_CRUSH \ (CEPH_FEATURE_CRUSH_TUNABLES | \ CEPH_FEATURE_CRUSH_TUNABLES2 | \ CEPH_FEATURE_CRUSH_TUNABLES3 | \ CEPH_FEATURE_CRUSH_TUNABLES5 | \ CEPH_FEATURE_CRUSH_V2 | \ CEPH_FEATURE_CRUSH_V4 | \ CEPH_FEATUREMASK_CRUSH_CHOOSE_ARGS) /* * make sure we don't try to use the reserved features */ #define CEPH_STATIC_ASSERT(x) (void)(sizeof(int[((x)==0) ? -1 : 0])) static inline void ____build_time_check_for_reserved_bits(void) { CEPH_STATIC_ASSERT((CEPH_FEATURES_ALL & (CEPH_FEATURE_RESERVED | DEPRECATED_CEPH_FEATURE_RESERVED_BROKEN)) == 0); } #endif