return NULL;
XioMsg *xmsg = reinterpret_cast<XioMsg*>(mp_mem.addr);
assert(!!xmsg);
- new (xmsg) XioMsg(m, xcon, mp_mem, ex_cnt);
+ new (xmsg) XioMsg(m, xcon, mp_mem, ex_cnt,
+ static_cast<XioMessenger*>(
+ xcon->get_messenger())->local_features);
return xmsg;
}
/*static*/ size_t XioMsgHdr::get_max_encoded_length() {
ceph_msg_header _ceph_msg_header;
ceph_msg_footer _ceph_msg_footer;
- XioMsgHdr hdr (_ceph_msg_header, _ceph_msg_footer);
+ XioMsgHdr hdr (_ceph_msg_header, _ceph_msg_footer, 0 /* features */);
const std::list<buffer::ptr>& hdr_buffers = hdr.get_bl().buffers();
assert(hdr_buffers.size() == 1); /* accelio header is small without scatter gather */
return hdr_buffers.begin()->length();
namespace bi = boost::intrusive;
+class XioMessenger;
+
class XioMsgCnt
{
public:
entity_addr_t addr; /* XXX hack! */
ceph_msg_header* hdr;
ceph_msg_footer* ftr;
+ uint64_t features;
buffer::list bl;
public:
- XioMsgHdr(ceph_msg_header& _hdr, ceph_msg_footer& _ftr)
- : tag(CEPH_MSGR_TAG_MSG), msg_cnt(0), hdr(&_hdr), ftr(&_ftr)
+ XioMsgHdr(ceph_msg_header& _hdr, ceph_msg_footer& _ftr, uint64_t _features)
+ : tag(CEPH_MSGR_TAG_MSG), msg_cnt(0), hdr(&_hdr), ftr(&_ftr),
+ features(_features)
{ }
XioMsgHdr(ceph_msg_header& _hdr, ceph_msg_footer &_ftr, buffer::ptr p)
const buffer::list& get_bl() { encode(bl); return bl; };
- inline void encode_hdr(buffer::list& bl) const {
+ inline void encode_hdr(ceph::buffer::list& bl) const {
::encode(tag, bl);
::encode(msg_cnt, bl);
::encode(peer_type, bl);
- ::encode(addr, bl);
+ ::encode(addr, bl, features);
::encode(hdr->seq, bl);
::encode(hdr->tid, bl);
::encode(hdr->type, bl);
public:
XioMsg(Message *_m, XioConnection *_xcon, struct xio_reg_mem& _mp,
- int _ex_cnt) :
+ int _ex_cnt, uint64_t _features) :
XioSend(_xcon, _mp, _ex_cnt),
- m(_m), hdr(m->get_header(), m->get_footer()),
+ m(_m), hdr(m->get_header(), m->get_footer(), _features),
req_arr(NULL)
{
const entity_inst_t &inst = xcon->get_messenger()->get_myinst();