mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-10-05 03:13:04 +00:00
rdma: add helper rd_sendrecv_msg()
This function sends the constructed netlink message and then receives the response. Change rd_recv_msg() to display any error messages. Change 'rdma dev set' to use rd_sendrecv_msg(). Signed-off-by: Steve Wise <larrystevenwise@gmail.com> Reviewed-by: Leon Romanovsky <leonro@mellanox.com> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
65147bbe8f
commit
8f5cfd23cd
@ -268,7 +268,7 @@ static int dev_set_name(struct rd *rd)
|
|||||||
mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_DEV_INDEX, rd->dev_idx);
|
mnl_attr_put_u32(rd->nlh, RDMA_NLDEV_ATTR_DEV_INDEX, rd->dev_idx);
|
||||||
mnl_attr_put_strz(rd->nlh, RDMA_NLDEV_ATTR_DEV_NAME, rd_argv(rd));
|
mnl_attr_put_strz(rd->nlh, RDMA_NLDEV_ATTR_DEV_NAME, rd_argv(rd));
|
||||||
|
|
||||||
return rd_send_msg(rd);
|
return rd_sendrecv_msg(rd, seq);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dev_one_set(struct rd *rd)
|
static int dev_one_set(struct rd *rd)
|
||||||
|
@ -68,6 +68,7 @@ struct rd {
|
|||||||
json_writer_t *jw;
|
json_writer_t *jw;
|
||||||
bool json_output;
|
bool json_output;
|
||||||
bool pretty_output;
|
bool pretty_output;
|
||||||
|
bool suppress_errors;
|
||||||
struct list_head filter_list;
|
struct list_head filter_list;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -119,6 +120,7 @@ bool rd_is_string_filtered_attr(struct rd *rd, const char *key, const char *val,
|
|||||||
*/
|
*/
|
||||||
int rd_send_msg(struct rd *rd);
|
int rd_send_msg(struct rd *rd);
|
||||||
int rd_recv_msg(struct rd *rd, mnl_cb_t callback, void *data, uint32_t seq);
|
int rd_recv_msg(struct rd *rd, mnl_cb_t callback, void *data, uint32_t seq);
|
||||||
|
int rd_sendrecv_msg(struct rd *rd, unsigned int seq);
|
||||||
void rd_prepare_msg(struct rd *rd, uint32_t cmd, uint32_t *seq, uint16_t flags);
|
void rd_prepare_msg(struct rd *rd, uint32_t cmd, uint32_t *seq, uint16_t flags);
|
||||||
int rd_dev_init_cb(const struct nlmsghdr *nlh, void *data);
|
int rd_dev_init_cb(const struct nlmsghdr *nlh, void *data);
|
||||||
int rd_attr_cb(const struct nlattr *attr, void *data);
|
int rd_attr_cb(const struct nlattr *attr, void *data);
|
||||||
|
@ -31,6 +31,7 @@ int res_qp_idx_parse_cb(const struct nlmsghdr *nlh, void *data);
|
|||||||
if (id) { \
|
if (id) { \
|
||||||
ret = rd_doit_index(rd, &idx); \
|
ret = rd_doit_index(rd, &idx); \
|
||||||
if (ret) { \
|
if (ret) { \
|
||||||
|
rd->suppress_errors = true; \
|
||||||
ret = _res_send_idx_msg(rd, command, \
|
ret = _res_send_idx_msg(rd, command, \
|
||||||
name##_idx_parse_cb, \
|
name##_idx_parse_cb, \
|
||||||
idx, id); \
|
idx, id); \
|
||||||
|
18
rdma/utils.c
18
rdma/utils.c
@ -693,10 +693,28 @@ int rd_recv_msg(struct rd *rd, mnl_cb_t callback, void *data, unsigned int seq)
|
|||||||
ret = mnl_cb_run(buf, ret, seq, portid, callback, data);
|
ret = mnl_cb_run(buf, ret, seq, portid, callback, data);
|
||||||
} while (ret > 0);
|
} while (ret > 0);
|
||||||
|
|
||||||
|
if (ret < 0 && !rd->suppress_errors)
|
||||||
|
perror("error");
|
||||||
|
|
||||||
mnl_socket_close(rd->nl);
|
mnl_socket_close(rd->nl);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int null_cb(const struct nlmsghdr *nlh, void *data)
|
||||||
|
{
|
||||||
|
return MNL_CB_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int rd_sendrecv_msg(struct rd *rd, unsigned int seq)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = rd_send_msg(rd);
|
||||||
|
if (!ret)
|
||||||
|
ret = rd_recv_msg(rd, null_cb, rd, seq);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static struct dev_map *_dev_map_lookup(struct rd *rd, const char *dev_name)
|
static struct dev_map *_dev_map_lookup(struct rd *rd, const char *dev_name)
|
||||||
{
|
{
|
||||||
struct dev_map *dev_map;
|
struct dev_map *dev_map;
|
||||||
|
Loading…
Reference in New Issue
Block a user