}
return 0;
}
-
+ }
+ if (crcflags & MSG_CRC_DATA) {
if ((footer.flags & CEPH_MSG_FOOTER_NOCRC) == 0) {
__u32 data_crc = data.crc32c(0);
if (data_crc != footer.data_crc) {
return 0;
}
}
- }
+ }
// make message
Message *m = 0;
bufferlist front, middle, data;
ceph_msg_footer_old old_footer;
ceph_msg_footer footer;
- msg->encode(features, true);
+ msg->encode(features, MSG_CRC_ALL);
::encode(msg->get_header(), payload);
// Here's where we switch to the old footer format. PLR
#define MSG_MON_HEALTH 0x601
// *** Message::encode() crcflags bits ***
-#define MSG_CRC_DATA 1
-#define MSG_CRC_HEADER 2
+#define MSG_CRC_DATA (1 << 0)
+#define MSG_CRC_HEADER (1 << 1)
+#define MSG_CRC_ALL (MSG_CRC_DATA | MSG_CRC_HEADER)
// Xio Testing
#define MSG_DATA_PING 0x602
const entity_addr_t& dest_addr, int dest_type)
{
if (cct->_conf->ms_dump_on_send) {
- m->encode(-1, true);
+ m->encode(-1, MSG_CRC_ALL);
ldout(cct, 0) << __func__ << "submit_message " << *m << "\n";
m->get_payload().hexdump(*_dout);
if (m->get_data().length() > 0) {
<< dendl;
// verify header crc
- if (!(msgr->crcflags & MSG_CRC_HEADER)) {
- } else if (header_crc != header.crc) {
+ if ((msgr->crcflags & MSG_CRC_HEADER) && header_crc != header.crc) {
ldout(msgr->cct,0) << "reader got bad header crc " << header_crc << " != " << header.crc << dendl;
return -1;
}
ceph_msg_footer_old old_footer;
if (tcp_read((char*)&old_footer, sizeof(old_footer)) < 0)
goto out_dethrottle;
- if (msgr->crcflags & MSG_CRC_HEADER) {
- footer.front_crc = old_footer.front_crc;
- footer.middle_crc = old_footer.middle_crc;
- footer.data_crc = old_footer.data_crc;
- }
+ footer.front_crc = old_footer.front_crc;
+ footer.middle_crc = old_footer.middle_crc;
+ footer.data_crc = old_footer.data_crc;
footer.sig = 0;
footer.flags = old_footer.flags;
}
if (msgr->crcflags & MSG_CRC_HEADER) {
old_footer.front_crc = footer.front_crc;
old_footer.middle_crc = footer.middle_crc;
- old_footer.data_crc = footer.data_crc;
} else {
- old_footer.front_crc = old_footer.middle_crc = old_footer.data_crc = 0;
+ old_footer.front_crc = old_footer.middle_crc = 0;
}
+ old_footer.data_crc = msgr->crcflags & MSG_CRC_DATA ? footer.data_crc : 0;
old_footer.flags = footer.flags;
msgvec[msg.msg_iovlen].iov_base = (char*)&old_footer;
msgvec[msg.msg_iovlen].iov_len = sizeof(old_footer);