]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: Add dump() to Protocol{V1,V2}
authorMarcel Lauhoff <marcel.lauhoff@clyso.com>
Fri, 20 Sep 2024 15:39:50 +0000 (17:39 +0200)
committerMarcel Lauhoff <marcel.lauhoff@clyso.com>
Mon, 17 Feb 2025 17:41:18 +0000 (18:41 +0100)
Add dump() methods to the async messenger protocol layer. Export cipher
and compressor name from the respective handlers to be able to export
a human understandable information here.

Signed-off-by: Marcel Lauhoff <marcel.lauhoff@clyso.com>
src/msg/async/Protocol.h
src/msg/async/ProtocolV1.cc
src/msg/async/ProtocolV1.h
src/msg/async/ProtocolV2.cc
src/msg/async/ProtocolV2.h
src/msg/async/compression_onwire.cc
src/msg/async/compression_onwire.h
src/msg/async/crypto_onwire.cc
src/msg/async/crypto_onwire.h

index 10436307ebf8362c76932328c16ee55f61893652..0878b6cddaa9475171bd7cbb86e026cfdd5f0a4c 100644 (file)
@@ -132,6 +132,8 @@ public:
   virtual void write_event() = 0;
   virtual bool is_queued() = 0;
 
+  virtual void dump(Formatter *f) = 0;
+
   int get_con_mode() const {
     return auth_meta->con_mode;
   }
index 17d3dcfbe2c8aece204164a8a0a8ccc8a1b7a10b..c93f940b6af989eb6360f8ecb0fda3af0d8a0dc2 100644 (file)
@@ -422,6 +422,17 @@ bool ProtocolV1::is_queued() {
   return !out_q.empty() || connection->is_queued();
 }
 
+void ProtocolV1::dump(Formatter* f) {
+  f->open_object_section("v1");
+  f->dump_string("state", get_state_name(state));
+  f->dump_unsigned("connect_seq", connect_seq);
+  f->dump_unsigned("peer_global_seq", peer_global_seq);
+  if (auth_meta) {
+    f->dump_string("con_mode", ceph_con_mode_name(auth_meta->con_mode));
+  }
+  f->close_section();  // v1
+}
+
 void ProtocolV1::run_continuation(CtPtr pcontinuation) {
   if (pcontinuation) {
     CONTINUATION_RUN(*pcontinuation);
index 63bc1cd0946659073c2d970f46d46147284e7672..8b8a938ff4ac386e323fc0fd2b2655d75301f9a2 100644 (file)
@@ -235,6 +235,8 @@ public:
   virtual void write_event() override;
   virtual bool is_queued() override;
 
+  virtual void dump(Formatter *f) override;
+
   // Client Protocol
 private:
   int global_seq;
index fd1dfb5470e2c6b89678e5f7351d2320718f78fd..58e4f4df21df508c4d5df478a4d4ec354a2e1b4f 100644 (file)
@@ -766,6 +766,40 @@ bool ProtocolV2::is_queued() {
   return !out_queue.empty() || connection->is_queued();
 }
 
+void ProtocolV2::dump(Formatter *f) {
+  f->open_object_section("v2");
+  f->dump_string("state", get_state_name(state));
+  if (auth_meta) {
+    f->dump_string("con_mode", ceph_con_mode_name(auth_meta->con_mode));
+  }
+  f->dump_bool("rev1", HAVE_MSGR2_FEATURE(peer_supported_features, REVISION_1));
+  f->dump_unsigned("connect_seq", connect_seq);
+  f->dump_unsigned("peer_global_seq", peer_global_seq);
+
+  f->open_object_section("crypto");
+  f->dump_string(
+      "rx", session_stream_handlers.rx
+                ? session_stream_handlers.rx->cipher_name()
+                : "PLAIN");
+  f->dump_string(
+      "tx", session_stream_handlers.tx
+                ? session_stream_handlers.tx->cipher_name()
+                : "PLAIN");
+  f->close_section();  // crypto
+
+  f->open_object_section("compression");
+  f->dump_string(
+      "rx", session_compression_handlers.rx
+                ? session_compression_handlers.rx->compressor_name()
+                : "UNCOMPRESSED");
+  f->dump_string(
+      "tx", session_compression_handlers.tx
+                ? session_compression_handlers.tx->compressor_name()
+                : "UNCOMPRESSED");
+  f->close_section();  // compression
+  f->close_section();  // v2
+}
+
 CtPtr ProtocolV2::read(CONTINUATION_RXBPTR_TYPE<ProtocolV2> &next,
                        rx_buffer_t &&buffer) {
   const auto len = buffer->length();
index 1ee258c49755a40a0aa241ebcad9e5906b66455c..aa7006b03216775082845a59d38f89c9a1374ea9 100644 (file)
@@ -223,6 +223,8 @@ public:
   virtual void write_event() override;
   virtual bool is_queued() override;
 
+  virtual void dump(Formatter *f) override;
+
 private:
   // Client Protocol
   CONTINUATION_DECL(ProtocolV2, start_client_banner_exchange);
index 9e6d07cfd1958c535049dacfa58c4cf97c1ab650..5f6a1e3c56639917803f288f6e457d35ed525600 100644 (file)
@@ -83,4 +83,12 @@ void TxHandler::done()
   ldout(m_cct, 25) << __func__ << " compression ratio=" << get_ratio() << dendl;
 }
 
+std::string_view RxHandler::compressor_name() const {
+  return m_compressor->get_type_name();
+}
+
+std::string_view TxHandler::compressor_name() const {
+  return m_compressor->get_type_name();
+}
+
 } // namespace ceph::compression::onwire
index d3b35a4655c1bcf1851a3b03e363c80cc1521d72..f7ac8cb757d95e76400d77ace63986e067791fbd 100644 (file)
@@ -41,6 +41,8 @@ namespace ceph::compression::onwire {
      * @returns true on success, false on failure
      */
     std::optional<ceph::bufferlist> decompress(const ceph::bufferlist &input);
+
+    std::string_view compressor_name() const;
   };
 
   class TxHandler final : private Handler {
@@ -82,6 +84,8 @@ namespace ceph::compression::onwire {
       return m_onwire_size;
     }
 
+    std::string_view compressor_name() const;
+
   private:
     uint64_t m_min_size; 
     Compressor::CompressionMode m_mode;
index 615820b35ba3015180d16c7c82b83ffbdac79a31..d51922b9d02f1c366c2493e4e15c803836d56b67 100644 (file)
@@ -76,6 +76,10 @@ public:
 
   void authenticated_encrypt_update(const ceph::bufferlist& plaintext) override;
   ceph::bufferlist authenticated_encrypt_final() override;
+
+  std::string_view cipher_name() const override {
+    return "AES-128-GCM";
+  };
 };
 
 void AES128GCM_OnWireTxHandler::reset_tx_handler(const uint32_t* first,
@@ -198,6 +202,10 @@ public:
   void reset_rx_handler() override;
   void authenticated_decrypt_update(ceph::bufferlist& bl) override;
   void authenticated_decrypt_update_final(ceph::bufferlist& bl) override;
+
+  std::string_view cipher_name() const override {
+    return "AES-128-GCM";
+  };
 };
 
 void AES128GCM_OnWireRxHandler::reset_rx_handler()
index 55f7550868fbeca48b8938b7d9b1529f849e33de..19ee69c93e69f7f60f8210f549dc08fe2fc821f1 100644 (file)
@@ -86,6 +86,8 @@ struct TxHandler {
   // Generates authentication signature and returns bufferlist crafted
   // basing on plaintext from preceding call to _update().
   virtual ceph::bufferlist authenticated_encrypt_final() = 0;
+
+  virtual std::string_view cipher_name() const = 0;
 };
 
 class RxHandler {
@@ -109,6 +111,8 @@ public:
   // for overall decryption sequence.
   // Throws on integrity/authenticity checks
   virtual void authenticated_decrypt_update_final(ceph::bufferlist& bl) = 0;
+
+  virtual std::string_view cipher_name() const = 0;
 };
 
 struct rxtx_t {