RDMA++
Loading...
Searching...
No Matches
mr.h
1#pragma once
2
3#include <cstdint>
4#include <memory>
5#include <vector>
6
7#include <infiniband/verbs.h>
8
9#include "rdmapp/detail/noncopyable.h"
10#include "rdmapp/detail/serdes.h"
11
12namespace rdmapp {
13
14namespace tags {
15namespace mr {
16struct local {};
17struct remote {};
18} // namespace mr
19} // namespace tags
20
21class pd;
22
28template <class Tag> class mr;
29
34template <> class mr<tags::mr::local> : public noncopyable {
35 struct ibv_mr *mr_;
36 std::shared_ptr<pd> pd_;
37
38public:
45 mr(std::shared_ptr<pd> pd, struct ibv_mr *mr);
46
53
61
66 ~mr();
67
73 std::vector<uint8_t> serialize() const;
74
80 void *addr() const;
81
87 size_t length() const;
88
94 uint32_t rkey() const;
95
101 uint32_t lkey() const;
102};
103
108template <> class mr<tags::mr::remote> {
109 void *addr_;
110 size_t length_;
111 uint32_t rkey_;
112
113public:
118 static constexpr size_t kSerializedSize =
119 sizeof(addr_) + sizeof(length_) + sizeof(rkey_);
120
121 mr() = default;
122
130 mr(void *addr, uint32_t length, uint32_t rkey);
131
137 mr(mr<tags::mr::remote> const &other) = default;
138
144 void *addr();
145
151 uint32_t length();
152
158 uint32_t rkey();
159
167 template <class It> static mr<tags::mr::remote> deserialize(It it) {
169 detail::deserialize(it, remote_mr.addr_);
170 detail::deserialize(it, remote_mr.length_);
171 detail::deserialize(it, remote_mr.rkey_);
172 return remote_mr;
173 }
174};
175
176using local_mr = mr<tags::mr::local>;
177using remote_mr = mr<tags::mr::remote>;
178
179} // namespace rdmapp
mr< tags::mr::local > & operator=(mr< tags::mr::local > &&other)
Move assignment operator.
mr(mr< tags::mr::local > &&other)
Move construct a new mr object.
Represents a remote memory region.
Definition mr.h:108
mr(mr< tags::mr::remote > const &other)=default
Construct a new remote mr object copied from another.
static mr< tags::mr::remote > deserialize(It it)
Deserialize a remote memory region handle.
Definition mr.h:167
A remote or local memory region.
Definition mr.h:28
Definition noncopyable.h:5
This class is an abstraction of a Protection Domain.
Definition pd.h:20
Definition mr.h:16
Definition mr.h:17