dout(2) << css->strv() << dendl;
};
- auto send_reject_message = [this, &session, &log_session_status](std::string_view err_str) {
- auto m = make_message<MClientSession>(CEPH_SESSION_REJECT);
+ auto send_reject_message = [this, &session, &log_session_status](std::string_view err_str, unsigned flags=0) {
+ auto m = make_message<MClientSession>(CEPH_SESSION_REJECT, 0, flags);
if (session->info.has_feature(CEPHFS_FEATURE_MIMIC))
m->metadata["error_string"] = err_str;
mds->send_message_client(m, session);
if (blacklisted) {
dout(10) << "rejecting blacklisted client " << addr << dendl;
+ unsigned flags = 0;
+ flags |= MClientSession::SESSION_BLOCKLISTED;
send_reject_message("blacklisted");
session->clear();
break;
class MClientSession : public SafeMessage {
private:
- static constexpr int HEAD_VERSION = 4;
+ static constexpr int HEAD_VERSION = 5;
static constexpr int COMPAT_VERSION = 1;
public:
ceph_mds_session_head head;
+ static constexpr unsigned SESSION_BLOCKLISTED = (1<<0);
+ unsigned flags = 0;
std::map<std::string, std::string> metadata;
feature_bitset_t supported_features;
metric_spec_t metric_spec;
protected:
MClientSession() : SafeMessage{CEPH_MSG_CLIENT_SESSION, HEAD_VERSION, COMPAT_VERSION} { }
- MClientSession(int o, version_t s=0) :
- SafeMessage{CEPH_MSG_CLIENT_SESSION, HEAD_VERSION, COMPAT_VERSION} {
+ MClientSession(int o, version_t s=0, unsigned msg_flags=0) :
+ SafeMessage{CEPH_MSG_CLIENT_SESSION, HEAD_VERSION, COMPAT_VERSION},
+ flags(msg_flags) {
memset(&head, 0, sizeof(head));
head.op = o;
head.seq = s;
if (header.version >= 4) {
decode(metric_spec, p);
}
+ if (header.version >= 5) {
+ decode(flags, p);
+ }
}
void encode_payload(uint64_t features) override {
using ceph::encode;
encode(metadata, payload);
encode(supported_features, payload);
encode(metric_spec, payload);
+ encode(flags, payload);
}
}
private: