summaryrefslogtreecommitdiff
path: root/rdma
diff options
context:
space:
mode:
authorPatrisious Haddad <phaddad@nvidia.com>2021-01-03 08:17:06 +0200
committerDavid Ahern <dsahern@kernel.org>2021-01-10 17:18:42 +0000
commit537995c6d513dedb87c14e428c1034c0a297aa70 (patch)
tree432b6e3cac4707b83f3194882c444d629ddb61f1 /rdma
parent9bd498bfcd6b441e66b56bb299fdd62657f4dde4 (diff)
downloadiproute2-537995c6d513dedb87c14e428c1034c0a297aa70.tar.gz
rdma: Add support for the netlink extack
Add support in rdma for extack errors to be received in userspace when sent from kernel, so now netlink extack error messages sent from kernel would be printed for the user. Signed-off-by: Patrisious Haddad <phaddad@nvidia.com> Signed-off-by: Leon Romanovsky <leonro@nvidia.com> Signed-off-by: David Ahern <dsahern@kernel.org>
Diffstat (limited to 'rdma')
-rw-r--r--rdma/rdma.h1
-rw-r--r--rdma/utils.c24
2 files changed, 5 insertions, 20 deletions
diff --git a/rdma/rdma.h b/rdma/rdma.h
index fc8bcf09..470e11c8 100644
--- a/rdma/rdma.h
+++ b/rdma/rdma.h
@@ -19,6 +19,7 @@
#include "list.h"
#include "utils.h"
+#include "mnl_utils.h"
#include "json_print.h"
#define pr_err(args...) fprintf(stderr, ##args)
diff --git a/rdma/utils.c b/rdma/utils.c
index 2a201aa4..903a544c 100644
--- a/rdma/utils.c
+++ b/rdma/utils.c
@@ -666,18 +666,12 @@ int rd_send_msg(struct rd *rd)
{
int ret;
- rd->nl = mnl_socket_open(NETLINK_RDMA);
+ rd->nl = mnlu_socket_open(NETLINK_RDMA);
if (!rd->nl) {
pr_err("Failed to open NETLINK_RDMA socket\n");
return -ENODEV;
}
- ret = mnl_socket_bind(rd->nl, 0, MNL_SOCKET_AUTOPID);
- if (ret < 0) {
- pr_err("Failed to bind socket with err %d\n", ret);
- goto err;
- }
-
ret = mnl_socket_sendto(rd->nl, rd->nlh, rd->nlh->nlmsg_len);
if (ret < 0) {
pr_err("Failed to send to socket with err %d\n", ret);
@@ -692,23 +686,13 @@ err:
int rd_recv_msg(struct rd *rd, mnl_cb_t callback, void *data, unsigned int seq)
{
- int ret;
- unsigned int portid;
char buf[MNL_SOCKET_BUFFER_SIZE];
+ int ret;
- portid = mnl_socket_get_portid(rd->nl);
- do {
- ret = mnl_socket_recvfrom(rd->nl, buf, sizeof(buf));
- if (ret <= 0)
- break;
-
- ret = mnl_cb_run(buf, ret, seq, portid, callback, data);
- } while (ret > 0);
-
+ ret = mnlu_socket_recv_run(rd->nl, seq, buf, MNL_SOCKET_BUFFER_SIZE,
+ callback, data);
if (ret < 0 && !rd->suppress_errors)
perror("error");
-
- mnl_socket_close(rd->nl);
return ret;
}