0001
0002 #ifndef __CEPH_FEATURES
0003 #define __CEPH_FEATURES
0004
0005
0006
0007
0008
0009
0010 #define CEPH_FEATURE_INCARNATION_1 (0ull)
0011 #define CEPH_FEATURE_INCARNATION_2 (1ull<<57)
0012 #define CEPH_FEATURE_INCARNATION_3 ((1ull<<57)|(1ull<<28))
0013
0014 #define DEFINE_CEPH_FEATURE(bit, incarnation, name) \
0015 static const uint64_t __maybe_unused CEPH_FEATURE_##name = (1ULL<<bit); \
0016 static const uint64_t __maybe_unused CEPH_FEATUREMASK_##name = \
0017 (1ULL<<bit | CEPH_FEATURE_INCARNATION_##incarnation);
0018
0019
0020 #define DEFINE_CEPH_FEATURE_DEPRECATED(bit, incarnation, name, when) \
0021 static const uint64_t __maybe_unused DEPRECATED_CEPH_FEATURE_##name = (1ULL<<bit); \
0022 static const uint64_t __maybe_unused DEPRECATED_CEPH_FEATUREMASK_##name = \
0023 (1ULL<<bit | CEPH_FEATURE_INCARNATION_##incarnation);
0024
0025
0026
0027
0028
0029 #define DEFINE_CEPH_FEATURE_RETIRED(bit, inc, name, unused, unadvertised)
0030
0031
0032
0033
0034
0035
0036
0037
0038 #define CEPH_HAVE_FEATURE(x, name) \
0039 (((x) & (CEPH_FEATUREMASK_##name)) == (CEPH_FEATUREMASK_##name))
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076 DEFINE_CEPH_FEATURE( 0, 1, UID)
0077 DEFINE_CEPH_FEATURE( 1, 1, NOSRCADDR)
0078 DEFINE_CEPH_FEATURE_RETIRED( 2, 1, MONCLOCKCHECK, JEWEL, LUMINOUS)
0079 DEFINE_CEPH_FEATURE( 2, 3, SERVER_NAUTILUS)
0080 DEFINE_CEPH_FEATURE( 3, 1, FLOCK)
0081 DEFINE_CEPH_FEATURE( 4, 1, SUBSCRIBE2)
0082 DEFINE_CEPH_FEATURE( 5, 1, MONNAMES)
0083 DEFINE_CEPH_FEATURE( 6, 1, RECONNECT_SEQ)
0084 DEFINE_CEPH_FEATURE( 7, 1, DIRLAYOUTHASH)
0085 DEFINE_CEPH_FEATURE( 8, 1, OBJECTLOCATOR)
0086 DEFINE_CEPH_FEATURE( 9, 1, PGID64)
0087 DEFINE_CEPH_FEATURE(10, 1, INCSUBOSDMAP)
0088 DEFINE_CEPH_FEATURE(11, 1, PGPOOL3)
0089 DEFINE_CEPH_FEATURE(12, 1, OSDREPLYMUX)
0090 DEFINE_CEPH_FEATURE(13, 1, OSDENC)
0091 DEFINE_CEPH_FEATURE_RETIRED(14, 1, OMAP, HAMMER, JEWEL)
0092 DEFINE_CEPH_FEATURE(14, 2, SERVER_KRAKEN)
0093 DEFINE_CEPH_FEATURE(15, 1, MONENC)
0094 DEFINE_CEPH_FEATURE_RETIRED(16, 1, QUERY_T, JEWEL, LUMINOUS)
0095
0096 DEFINE_CEPH_FEATURE_RETIRED(17, 1, INDEP_PG_MAP, JEWEL, LUMINOUS)
0097
0098 DEFINE_CEPH_FEATURE(18, 1, CRUSH_TUNABLES)
0099 DEFINE_CEPH_FEATURE_RETIRED(19, 1, CHUNKY_SCRUB, JEWEL, LUMINOUS)
0100
0101 DEFINE_CEPH_FEATURE_RETIRED(20, 1, MON_NULLROUTE, JEWEL, LUMINOUS)
0102
0103 DEFINE_CEPH_FEATURE_RETIRED(21, 1, MON_GV, HAMMER, JEWEL)
0104 DEFINE_CEPH_FEATURE(21, 2, SERVER_LUMINOUS)
0105 DEFINE_CEPH_FEATURE(21, 2, RESEND_ON_SPLIT)
0106 DEFINE_CEPH_FEATURE(21, 2, RADOS_BACKOFF)
0107 DEFINE_CEPH_FEATURE(21, 2, OSDMAP_PG_UPMAP)
0108 DEFINE_CEPH_FEATURE(21, 2, CRUSH_CHOOSE_ARGS)
0109 DEFINE_CEPH_FEATURE_RETIRED(22, 1, BACKFILL_RESERVATION, JEWEL, LUMINOUS)
0110
0111 DEFINE_CEPH_FEATURE(23, 1, MSG_AUTH)
0112 DEFINE_CEPH_FEATURE_RETIRED(24, 1, RECOVERY_RESERVATION, JEWEL, LUNINOUS)
0113
0114 DEFINE_CEPH_FEATURE(25, 1, CRUSH_TUNABLES2)
0115 DEFINE_CEPH_FEATURE(26, 1, CREATEPOOLID)
0116 DEFINE_CEPH_FEATURE(27, 1, REPLY_CREATE_INODE)
0117 DEFINE_CEPH_FEATURE_RETIRED(28, 1, OSD_HBMSGS, HAMMER, JEWEL)
0118 DEFINE_CEPH_FEATURE(28, 2, SERVER_MIMIC)
0119 DEFINE_CEPH_FEATURE(29, 1, MDSENC)
0120 DEFINE_CEPH_FEATURE(30, 1, OSDHASHPSPOOL)
0121 DEFINE_CEPH_FEATURE(31, 1, MON_SINGLE_PAXOS)
0122 DEFINE_CEPH_FEATURE_RETIRED(32, 1, OSD_SNAPMAPPER, JEWEL, LUMINOUS)
0123
0124 DEFINE_CEPH_FEATURE_RETIRED(33, 1, MON_SCRUB, JEWEL, LUMINOUS)
0125
0126 DEFINE_CEPH_FEATURE_RETIRED(34, 1, OSD_PACKED_RECOVERY, JEWEL, LUMINOUS)
0127
0128 DEFINE_CEPH_FEATURE(35, 1, OSD_CACHEPOOL)
0129 DEFINE_CEPH_FEATURE(36, 1, CRUSH_V2)
0130 DEFINE_CEPH_FEATURE(37, 1, EXPORT_PEER)
0131 DEFINE_CEPH_FEATURE(38, 1, OSD_ERASURE_CODES)
0132 DEFINE_CEPH_FEATURE(38, 1, OSD_OSD_TMAP2OMAP)
0133 DEFINE_CEPH_FEATURE(39, 1, OSDMAP_ENC)
0134 DEFINE_CEPH_FEATURE(40, 1, MDS_INLINE_DATA)
0135 DEFINE_CEPH_FEATURE(41, 1, CRUSH_TUNABLES3)
0136 DEFINE_CEPH_FEATURE(41, 1, OSD_PRIMARY_AFFINITY)
0137 DEFINE_CEPH_FEATURE(42, 1, MSGR_KEEPALIVE2)
0138 DEFINE_CEPH_FEATURE(43, 1, OSD_POOLRESEND)
0139 DEFINE_CEPH_FEATURE(44, 1, ERASURE_CODE_PLUGINS_V2)
0140 DEFINE_CEPH_FEATURE_RETIRED(45, 1, OSD_SET_ALLOC_HINT, JEWEL, LUMINOUS)
0141
0142 DEFINE_CEPH_FEATURE(46, 1, OSD_FADVISE_FLAGS)
0143 DEFINE_CEPH_FEATURE_RETIRED(46, 1, OSD_REPOP, JEWEL, LUMINOUS)
0144 DEFINE_CEPH_FEATURE_RETIRED(46, 1, OSD_OBJECT_DIGEST, JEWEL, LUMINOUS)
0145 DEFINE_CEPH_FEATURE_RETIRED(46, 1, OSD_TRANSACTION_MAY_LAYOUT, JEWEL, LUMINOUS)
0146
0147 DEFINE_CEPH_FEATURE(47, 1, MDS_QUOTA)
0148 DEFINE_CEPH_FEATURE(48, 1, CRUSH_V4)
0149 DEFINE_CEPH_FEATURE_RETIRED(49, 1, OSD_MIN_SIZE_RECOVERY, JEWEL, LUMINOUS)
0150 DEFINE_CEPH_FEATURE_RETIRED(49, 1, OSD_PROXY_FEATURES, JEWEL, LUMINOUS)
0151
0152 DEFINE_CEPH_FEATURE(50, 1, MON_METADATA)
0153 DEFINE_CEPH_FEATURE(51, 1, OSD_BITWISE_HOBJ_SORT)
0154 DEFINE_CEPH_FEATURE(52, 1, OSD_PROXY_WRITE_FEATURES)
0155 DEFINE_CEPH_FEATURE(53, 1, ERASURE_CODE_PLUGINS_V3)
0156 DEFINE_CEPH_FEATURE(54, 1, OSD_HITSET_GMT)
0157 DEFINE_CEPH_FEATURE(55, 1, HAMMER_0_94_4)
0158 DEFINE_CEPH_FEATURE(56, 1, NEW_OSDOP_ENCODING)
0159 DEFINE_CEPH_FEATURE(57, 1, MON_STATEFUL_SUB)
0160 DEFINE_CEPH_FEATURE(57, 1, MON_ROUTE_OSDMAP)
0161 DEFINE_CEPH_FEATURE(57, 1, OSDSUBOP_NO_SNAPCONTEXT)
0162 DEFINE_CEPH_FEATURE(57, 1, SERVER_JEWEL)
0163 DEFINE_CEPH_FEATURE(58, 1, CRUSH_TUNABLES5)
0164 DEFINE_CEPH_FEATURE(58, 1, NEW_OSDOPREPLY_ENCODING)
0165 DEFINE_CEPH_FEATURE(58, 1, FS_FILE_LAYOUT_V2)
0166 DEFINE_CEPH_FEATURE(59, 1, FS_BTIME)
0167 DEFINE_CEPH_FEATURE(59, 1, FS_CHANGE_ATTR)
0168 DEFINE_CEPH_FEATURE(59, 1, MSG_ADDR2)
0169 DEFINE_CEPH_FEATURE(60, 1, OSD_RECOVERY_DELETES)
0170 DEFINE_CEPH_FEATURE(61, 1, CEPHX_V2)
0171
0172 DEFINE_CEPH_FEATURE(62, 1, RESERVED)
0173 DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS)
0174
0175
0176
0177
0178
0179 #define CEPH_FEATURES_SUPPORTED_DEFAULT \
0180 (CEPH_FEATURE_NOSRCADDR | \
0181 CEPH_FEATURE_SERVER_NAUTILUS | \
0182 CEPH_FEATURE_FLOCK | \
0183 CEPH_FEATURE_SUBSCRIBE2 | \
0184 CEPH_FEATURE_MONNAMES | \
0185 CEPH_FEATURE_RECONNECT_SEQ | \
0186 CEPH_FEATURE_DIRLAYOUTHASH | \
0187 CEPH_FEATURE_PGID64 | \
0188 CEPH_FEATURE_PGPOOL3 | \
0189 CEPH_FEATURE_OSDENC | \
0190 CEPH_FEATURE_MONENC | \
0191 CEPH_FEATURE_CRUSH_TUNABLES | \
0192 CEPH_FEATURE_SERVER_LUMINOUS | \
0193 CEPH_FEATURE_RESEND_ON_SPLIT | \
0194 CEPH_FEATURE_RADOS_BACKOFF | \
0195 CEPH_FEATURE_OSDMAP_PG_UPMAP | \
0196 CEPH_FEATURE_CRUSH_CHOOSE_ARGS | \
0197 CEPH_FEATURE_MSG_AUTH | \
0198 CEPH_FEATURE_CRUSH_TUNABLES2 | \
0199 CEPH_FEATURE_REPLY_CREATE_INODE | \
0200 CEPH_FEATURE_SERVER_MIMIC | \
0201 CEPH_FEATURE_MDSENC | \
0202 CEPH_FEATURE_OSDHASHPSPOOL | \
0203 CEPH_FEATURE_OSD_CACHEPOOL | \
0204 CEPH_FEATURE_CRUSH_V2 | \
0205 CEPH_FEATURE_EXPORT_PEER | \
0206 CEPH_FEATURE_OSDMAP_ENC | \
0207 CEPH_FEATURE_MDS_INLINE_DATA | \
0208 CEPH_FEATURE_CRUSH_TUNABLES3 | \
0209 CEPH_FEATURE_OSD_PRIMARY_AFFINITY | \
0210 CEPH_FEATURE_MSGR_KEEPALIVE2 | \
0211 CEPH_FEATURE_OSD_POOLRESEND | \
0212 CEPH_FEATURE_MDS_QUOTA | \
0213 CEPH_FEATURE_CRUSH_V4 | \
0214 CEPH_FEATURE_NEW_OSDOP_ENCODING | \
0215 CEPH_FEATURE_SERVER_JEWEL | \
0216 CEPH_FEATURE_MON_STATEFUL_SUB | \
0217 CEPH_FEATURE_CRUSH_TUNABLES5 | \
0218 CEPH_FEATURE_NEW_OSDOPREPLY_ENCODING | \
0219 CEPH_FEATURE_MSG_ADDR2 | \
0220 CEPH_FEATURE_CEPHX_V2)
0221
0222 #define CEPH_FEATURES_REQUIRED_DEFAULT 0
0223
0224 #endif