Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Multiple Authorization Keys per Endpoint #9476

Merged
merged 6 commits into from
Oct 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions include/ofi.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,16 @@ extern "C" {
(FI_MULTI_RECV | FI_TRIGGER | FI_RMA_PMEM | FI_SOURCE | \
FI_RMA_EVENT | FI_SOURCE_ERR)

#define OFI_PRIMARY_CAPS \
(OFI_PRIMARY_TX_CAPS | OFI_PRIMARY_RX_CAPS)
#define OFI_DOMAIN_PRIMARY_CAPS FI_AV_USER_ID
#define OFI_DOMAIN_SECONDARY_CAPS \
(FI_SHARED_AV | FI_REMOTE_COMM | FI_LOCAL_COMM)

#define OFI_SECONDARY_CAPS \
(OFI_SECONDARY_TX_CAPS | OFI_SECONDARY_RX_CAPS | \
FI_SHARED_AV | FI_REMOTE_COMM | FI_LOCAL_COMM)
#define OFI_PRIMARY_CAPS \
(OFI_PRIMARY_TX_CAPS | OFI_PRIMARY_RX_CAPS | OFI_DOMAIN_PRIMARY_CAPS)

#define OFI_SECONDARY_CAPS \
(OFI_SECONDARY_TX_CAPS | OFI_SECONDARY_RX_CAPS | \
OFI_DOMAIN_SECONDARY_CAPS)

#define OFI_TX_MSG_CAPS (FI_MSG | FI_SEND)
#define OFI_RX_MSG_CAPS (FI_MSG | FI_RECV)
Expand Down
3 changes: 2 additions & 1 deletion include/rdma/fabric.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ typedef struct fid *fid_t;
/* Tagged messages, buffered receives, CQ flags */
#define FI_CLAIM (1ULL << 59)
#define FI_DISCARD (1ULL << 58)

#define FI_AUTH_KEY (1ULL << 57)

struct fi_ioc {
void *addr;
Expand Down Expand Up @@ -227,6 +227,7 @@ enum {
#define FI_ADDR_NOTAVAIL ((uint64_t) -1)
#define FI_KEY_NOTAVAIL ((uint64_t) -1)
#define FI_SHARED_CONTEXT SIZE_MAX
#define FI_AV_AUTH_KEY SIZE_MAX
typedef uint64_t fi_addr_t;

enum fi_av_type {
Expand Down
38 changes: 38 additions & 0 deletions include/rdma/fi_domain.h
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,13 @@ struct fi_ops_av {
char *buf, size_t *len);
int (*av_set)(struct fid_av *av, struct fi_av_set_attr *attr,
struct fid_av_set **av_set, void *context);
int (*insert_auth_key)(struct fid_av *av, const void *auth_key,
size_t auth_key_size, fi_addr_t *fi_addr,
uint64_t flags);
int (*lookup_auth_key)(struct fid_av *av, fi_addr_t fi_addr,
void *auth_key, size_t *auth_key_size);
int (*set_user_id)(struct fid_av *av, fi_addr_t fi_addr,
fi_addr_t user_id, uint64_t flags);
};

struct fid_av {
Expand Down Expand Up @@ -142,6 +149,11 @@ struct fi_mr_dmabuf {
void *base_addr;
};

struct fi_mr_auth_key {
struct fid_av *av;
fi_addr_t src_addr;
};

struct fi_mr_attr {
union {
const struct iovec *mr_iov;
Expand Down Expand Up @@ -533,6 +545,32 @@ fi_av_straddr(struct fid_av *av, const void *addr, char *buf, size_t *len)
return av->ops->straddr(av, addr, buf, len);
}

static inline int
fi_av_insert_auth_key(struct fid_av *av, const void *auth_key,
size_t auth_key_size, fi_addr_t *fi_addr, uint64_t flags)
{
return FI_CHECK_OP(av->ops, struct fi_ops_av, insert_auth_key) ?
av->ops->insert_auth_key(av, auth_key, auth_key_size, fi_addr,
flags) : -FI_ENOSYS;
}

static inline int
fi_av_lookup_auth_key(struct fid_av *av, fi_addr_t addr, void *auth_key,
size_t *auth_key_size)
{
return FI_CHECK_OP(av->ops, struct fi_ops_av, lookup_auth_key) ?
av->ops->lookup_auth_key(av, addr, auth_key, auth_key_size) :
-FI_ENOSYS;
}

static inline int
fi_av_set_user_id(struct fid_av *av, fi_addr_t fi_addr, fi_addr_t user_id,
uint64_t flags)
{
return FI_CHECK_OP(av->ops, struct fi_ops_av, set_user_id) ?
av->ops->set_user_id(av, fi_addr, user_id, flags) : -FI_ENOSYS;
}

static inline fi_addr_t
fi_rx_addr(fi_addr_t fi_addr, int rx_index, int rx_ctx_bits)
{
Expand Down
Loading