From fd211a234c39ed84518ee58cfc9a80f2ac1aa936 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Sat, 2 Mar 2019 21:11:42 +0100 Subject: [PATCH] Revert "msg/async, v2: move ceph_msg_header2 to last frame segment." This reverts commit 69dbc92ba8af844be0e3d3fc1b01287082753e56. Signed-off-by: Radoslaw Zarzynski --- src/msg/async/ProtocolV2.cc | 3 +-- src/msg/async/frames_v2.h | 45 +++++++++++++++---------------------- 2 files changed, 19 insertions(+), 29 deletions(-) diff --git a/src/msg/async/ProtocolV2.cc b/src/msg/async/ProtocolV2.cc index 3030f173747..fa4776d2b6b 100644 --- a/src/msg/async/ProtocolV2.cc +++ b/src/msg/async/ProtocolV2.cc @@ -1333,9 +1333,8 @@ CtPtr ProtocolV2::handle_message() { #endif recv_stamp = ceph_clock_now(); - // yeah, footer is conveying header ;-). Renaming needed. FIXME. auto header_frame = MessageHeaderFrame::Decode( - std::move(rx_segments_data[SegmentIndex::Msg::FOOTER])); + std::move(rx_segments_data[SegmentIndex::Msg::HEADER])); // XXX: paranoid copy just to avoid oops ceph_msg_header2 current_header = header_frame.header(); diff --git a/src/msg/async/frames_v2.h b/src/msg/async/frames_v2.h index e5ef06c5cb4..010b14c79e5 100644 --- a/src/msg/async/frames_v2.h +++ b/src/msg/async/frames_v2.h @@ -65,10 +65,10 @@ struct segment_t { struct SegmentIndex { struct Msg { - static constexpr std::size_t FRONT = 0; - static constexpr std::size_t MIDDLE = 1; - static constexpr std::size_t DATA = 2; - static constexpr std::size_t FOOTER = 3; + static constexpr std::size_t HEADER = 0; + static constexpr std::size_t FRONT = 1; + static constexpr std::size_t MIDDLE = 2; + static constexpr std::size_t DATA = 3; }; struct Frame { @@ -608,17 +608,13 @@ struct MessageHeaderFrame const ceph::bufferlist& data) { MessageHeaderFrame f = PayloadFrame::Encode(msg_header); - - // FIXME. Together with the frame hierarchy. - ceph::bufferlist preamble; - f.payload.splice(0, FRAME_PREAMBLE_SIZE, &preamble); - // FIXME: plainsize -> ciphersize; for AES-GCM they are equall apart from auth tag size f.fill_preamble({ + segment_t{ f.payload.length() - FRAME_PREAMBLE_SIZE, + segment_t::DEFAULT_ALIGNMENT }, segment_t{ front.length(), segment_t::DEFAULT_ALIGNMENT }, segment_t{ middle.length(), segment_t::DEFAULT_ALIGNMENT }, segment_t{ data.length(), segment_t::PAGE_SIZE_ALIGNMENT }, - segment_t{ f.payload.length(), segment_t::DEFAULT_ALIGNMENT }, }); // FIXME: plainsize -> ciphersize; for AES-GCM they are equall apart from auth tag size @@ -627,15 +623,15 @@ struct MessageHeaderFrame // NOTE: ultimately we'll align these sizes to cipher's block size. // AES-GCM can live without that as it's basically stream cipher. session_stream_handlers.tx->reset_tx_handler({ - preamble.length(), + f.payload.length(), front.length(), middle.length(), - data.length(), - f.payload.length() + data.length() }); + ceph_assert(f.payload.length()); session_stream_handlers.tx->authenticated_encrypt_update( - std::move(preamble)); + std::move(f.payload)); // TODO: switch TxHandler from `bl&&` to `const bl&`. if (front.length()) { @@ -648,26 +644,21 @@ struct MessageHeaderFrame session_stream_handlers.tx->authenticated_encrypt_update(data); } - ceph_assert(f.payload.length()); - session_stream_handlers.tx->authenticated_encrypt_update( - std::move(f.payload)); - // auth tag will be appended at the end f.payload = session_stream_handlers.tx->authenticated_encrypt_final(); } else { epilogue_crc_block_t epilogue; - // fixme + ceph::bufferlist::const_iterator hdriter(&f.payload, FRAME_PREAMBLE_SIZE); + epilogue.crc_values[SegmentIndex::Msg::HEADER] = + hdriter.crc32c(hdriter.get_remaining(), -1); epilogue.crc_values[SegmentIndex::Msg::FRONT] = front.crc32c(-1); epilogue.crc_values[SegmentIndex::Msg::MIDDLE] = middle.crc32c(-1); epilogue.crc_values[SegmentIndex::Msg::DATA] = data.crc32c(-1); - epilogue.crc_values[SegmentIndex::Msg::FOOTER] = f.payload.crc32c(-1); - - preamble.append(front); - preamble.append(middle); - preamble.append(data); - preamble.append(f.payload); - preamble.append(reinterpret_cast(&epilogue), sizeof(epilogue)); - f.payload = std::move(preamble); + + f.payload.append(front); + f.payload.append(middle); + f.payload.append(data); + f.payload.append(reinterpret_cast(&epilogue), sizeof(epilogue)); } return f; -- 2.39.5