aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Wise <swise@opengridcomputing.com>2019-01-29 16:33:11 -0500
committerJason Gunthorpe <jgg@mellanox.com>2019-02-04 18:26:02 -0500
commitf76903d574b26bc596951a5c5e757eb02c67abbd (patch)
tree1a2889f83888d9b251c66832568d4280ca426545
parent95b8e384d8c44c6be590636608f61ac7b39101ec (diff)
RDMA/IWPM: refactor the IWPM message attribute names
In order to add new IWPM_NL attributes, the enums for the IWPM commands attributes are refactored such that a new attribute can be added without breaking ABI version 3. Instead of sharing nl attribute enums for both request and response messages, we create separate enums for each IWPM message request and reply. This allows us to extend any given IWPM message by adding new attributes for just that message. These new enums are created, though, in a way to avoid breaking ABI version 3. Signed-off-by: Steve Wise <swise@opengridcomputing.com> Reviewed-by: Tatyana Nikolova <Tatyana.E.Nikolova@intel.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
-rw-r--r--drivers/infiniband/core/iwpm_msg.c40
-rw-r--r--include/uapi/rdma/rdma_netlink.h21
2 files changed, 41 insertions, 20 deletions
diff --git a/drivers/infiniband/core/iwpm_msg.c b/drivers/infiniband/core/iwpm_msg.c
index 8861c052155a..3a8753595c8f 100644
--- a/drivers/infiniband/core/iwpm_msg.c
+++ b/drivers/infiniband/core/iwpm_msg.c
@@ -403,10 +403,12 @@ register_pid_response_exit:
403 403
404/* netlink attribute policy for the received response to add mapping request */ 404/* netlink attribute policy for the received response to add mapping request */
405static const struct nla_policy resp_add_policy[IWPM_NLA_RMANAGE_MAPPING_MAX] = { 405static const struct nla_policy resp_add_policy[IWPM_NLA_RMANAGE_MAPPING_MAX] = {
406 [IWPM_NLA_MANAGE_MAPPING_SEQ] = { .type = NLA_U32 }, 406 [IWPM_NLA_RMANAGE_MAPPING_SEQ] = { .type = NLA_U32 },
407 [IWPM_NLA_MANAGE_ADDR] = { .len = sizeof(struct sockaddr_storage) }, 407 [IWPM_NLA_RMANAGE_ADDR] = {
408 [IWPM_NLA_MANAGE_MAPPED_LOC_ADDR] = { .len = sizeof(struct sockaddr_storage) }, 408 .len = sizeof(struct sockaddr_storage) },
409 [IWPM_NLA_RMANAGE_MAPPING_ERR] = { .type = NLA_U16 } 409 [IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR] = {
410 .len = sizeof(struct sockaddr_storage) },
411 [IWPM_NLA_RMANAGE_MAPPING_ERR] = { .type = NLA_U16 }
410}; 412};
411 413
412/* 414/*
@@ -430,7 +432,7 @@ int iwpm_add_mapping_cb(struct sk_buff *skb, struct netlink_callback *cb)
430 432
431 atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq); 433 atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
432 434
433 msg_seq = nla_get_u32(nltb[IWPM_NLA_MANAGE_MAPPING_SEQ]); 435 msg_seq = nla_get_u32(nltb[IWPM_NLA_RMANAGE_MAPPING_SEQ]);
434 nlmsg_request = iwpm_find_nlmsg_request(msg_seq); 436 nlmsg_request = iwpm_find_nlmsg_request(msg_seq);
435 if (!nlmsg_request) { 437 if (!nlmsg_request) {
436 pr_info("%s: Could not find a matching request (seq = %u)\n", 438 pr_info("%s: Could not find a matching request (seq = %u)\n",
@@ -439,9 +441,9 @@ int iwpm_add_mapping_cb(struct sk_buff *skb, struct netlink_callback *cb)
439 } 441 }
440 pm_msg = nlmsg_request->req_buffer; 442 pm_msg = nlmsg_request->req_buffer;
441 local_sockaddr = (struct sockaddr_storage *) 443 local_sockaddr = (struct sockaddr_storage *)
442 nla_data(nltb[IWPM_NLA_MANAGE_ADDR]); 444 nla_data(nltb[IWPM_NLA_RMANAGE_ADDR]);
443 mapped_sockaddr = (struct sockaddr_storage *) 445 mapped_sockaddr = (struct sockaddr_storage *)
444 nla_data(nltb[IWPM_NLA_MANAGE_MAPPED_LOC_ADDR]); 446 nla_data(nltb[IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR]);
445 447
446 if (iwpm_compare_sockaddr(local_sockaddr, &pm_msg->loc_addr)) { 448 if (iwpm_compare_sockaddr(local_sockaddr, &pm_msg->loc_addr)) {
447 nlmsg_request->err_code = IWPM_USER_LIB_INFO_ERR; 449 nlmsg_request->err_code = IWPM_USER_LIB_INFO_ERR;
@@ -472,11 +474,15 @@ add_mapping_response_exit:
472/* netlink attribute policy for the response to add and query mapping request 474/* netlink attribute policy for the response to add and query mapping request
473 * and response with remote address info */ 475 * and response with remote address info */
474static const struct nla_policy resp_query_policy[IWPM_NLA_RQUERY_MAPPING_MAX] = { 476static const struct nla_policy resp_query_policy[IWPM_NLA_RQUERY_MAPPING_MAX] = {
475 [IWPM_NLA_QUERY_MAPPING_SEQ] = { .type = NLA_U32 }, 477 [IWPM_NLA_RQUERY_MAPPING_SEQ] = { .type = NLA_U32 },
476 [IWPM_NLA_QUERY_LOCAL_ADDR] = { .len = sizeof(struct sockaddr_storage) }, 478 [IWPM_NLA_RQUERY_LOCAL_ADDR] = {
477 [IWPM_NLA_QUERY_REMOTE_ADDR] = { .len = sizeof(struct sockaddr_storage) }, 479 .len = sizeof(struct sockaddr_storage) },
478 [IWPM_NLA_RQUERY_MAPPED_LOC_ADDR] = { .len = sizeof(struct sockaddr_storage) }, 480 [IWPM_NLA_RQUERY_REMOTE_ADDR] = {
479 [IWPM_NLA_RQUERY_MAPPED_REM_ADDR] = { .len = sizeof(struct sockaddr_storage) }, 481 .len = sizeof(struct sockaddr_storage) },
482 [IWPM_NLA_RQUERY_MAPPED_LOC_ADDR] = {
483 .len = sizeof(struct sockaddr_storage) },
484 [IWPM_NLA_RQUERY_MAPPED_REM_ADDR] = {
485 .len = sizeof(struct sockaddr_storage) },
480 [IWPM_NLA_RQUERY_MAPPING_ERR] = { .type = NLA_U16 } 486 [IWPM_NLA_RQUERY_MAPPING_ERR] = { .type = NLA_U16 }
481}; 487};
482 488
@@ -502,7 +508,7 @@ int iwpm_add_and_query_mapping_cb(struct sk_buff *skb,
502 return -EINVAL; 508 return -EINVAL;
503 atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq); 509 atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
504 510
505 msg_seq = nla_get_u32(nltb[IWPM_NLA_QUERY_MAPPING_SEQ]); 511 msg_seq = nla_get_u32(nltb[IWPM_NLA_RQUERY_MAPPING_SEQ]);
506 nlmsg_request = iwpm_find_nlmsg_request(msg_seq); 512 nlmsg_request = iwpm_find_nlmsg_request(msg_seq);
507 if (!nlmsg_request) { 513 if (!nlmsg_request) {
508 pr_info("%s: Could not find a matching request (seq = %u)\n", 514 pr_info("%s: Could not find a matching request (seq = %u)\n",
@@ -511,9 +517,9 @@ int iwpm_add_and_query_mapping_cb(struct sk_buff *skb,
511 } 517 }
512 pm_msg = nlmsg_request->req_buffer; 518 pm_msg = nlmsg_request->req_buffer;
513 local_sockaddr = (struct sockaddr_storage *) 519 local_sockaddr = (struct sockaddr_storage *)
514 nla_data(nltb[IWPM_NLA_QUERY_LOCAL_ADDR]); 520 nla_data(nltb[IWPM_NLA_RQUERY_LOCAL_ADDR]);
515 remote_sockaddr = (struct sockaddr_storage *) 521 remote_sockaddr = (struct sockaddr_storage *)
516 nla_data(nltb[IWPM_NLA_QUERY_REMOTE_ADDR]); 522 nla_data(nltb[IWPM_NLA_RQUERY_REMOTE_ADDR]);
517 mapped_loc_sockaddr = (struct sockaddr_storage *) 523 mapped_loc_sockaddr = (struct sockaddr_storage *)
518 nla_data(nltb[IWPM_NLA_RQUERY_MAPPED_LOC_ADDR]); 524 nla_data(nltb[IWPM_NLA_RQUERY_MAPPED_LOC_ADDR]);
519 mapped_rem_sockaddr = (struct sockaddr_storage *) 525 mapped_rem_sockaddr = (struct sockaddr_storage *)
@@ -588,9 +594,9 @@ int iwpm_remote_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
588 atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq); 594 atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
589 595
590 local_sockaddr = (struct sockaddr_storage *) 596 local_sockaddr = (struct sockaddr_storage *)
591 nla_data(nltb[IWPM_NLA_QUERY_LOCAL_ADDR]); 597 nla_data(nltb[IWPM_NLA_RQUERY_LOCAL_ADDR]);
592 remote_sockaddr = (struct sockaddr_storage *) 598 remote_sockaddr = (struct sockaddr_storage *)
593 nla_data(nltb[IWPM_NLA_QUERY_REMOTE_ADDR]); 599 nla_data(nltb[IWPM_NLA_RQUERY_REMOTE_ADDR]);
594 mapped_loc_sockaddr = (struct sockaddr_storage *) 600 mapped_loc_sockaddr = (struct sockaddr_storage *)
595 nla_data(nltb[IWPM_NLA_RQUERY_MAPPED_LOC_ADDR]); 601 nla_data(nltb[IWPM_NLA_RQUERY_MAPPED_LOC_ADDR]);
596 mapped_rem_sockaddr = (struct sockaddr_storage *) 602 mapped_rem_sockaddr = (struct sockaddr_storage *)
diff --git a/include/uapi/rdma/rdma_netlink.h b/include/uapi/rdma/rdma_netlink.h
index 2e18b77a817f..42d53e182d5f 100644
--- a/include/uapi/rdma/rdma_netlink.h
+++ b/include/uapi/rdma/rdma_netlink.h
@@ -83,13 +83,20 @@ enum {
83 IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0, 83 IWPM_NLA_MANAGE_MAPPING_UNSPEC = 0,
84 IWPM_NLA_MANAGE_MAPPING_SEQ, 84 IWPM_NLA_MANAGE_MAPPING_SEQ,
85 IWPM_NLA_MANAGE_ADDR, 85 IWPM_NLA_MANAGE_ADDR,
86 IWPM_NLA_MANAGE_MAPPED_LOC_ADDR, 86 IWPM_NLA_MANAGE_MAPPING_MAX
87};
88
89enum {
90 IWPM_NLA_RMANAGE_MAPPING_UNSPEC = 0,
91 IWPM_NLA_RMANAGE_MAPPING_SEQ,
92 IWPM_NLA_RMANAGE_ADDR,
93 IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR,
94 /* The following maintains bisectability of rdma-core */
95 IWPM_NLA_MANAGE_MAPPED_LOC_ADDR = IWPM_NLA_RMANAGE_MAPPED_LOC_ADDR,
87 IWPM_NLA_RMANAGE_MAPPING_ERR, 96 IWPM_NLA_RMANAGE_MAPPING_ERR,
88 IWPM_NLA_RMANAGE_MAPPING_MAX 97 IWPM_NLA_RMANAGE_MAPPING_MAX
89}; 98};
90 99
91#define IWPM_NLA_MANAGE_MAPPING_MAX 3
92#define IWPM_NLA_QUERY_MAPPING_MAX 4
93#define IWPM_NLA_MAPINFO_SEND_MAX 3 100#define IWPM_NLA_MAPINFO_SEND_MAX 3
94 101
95enum { 102enum {
@@ -97,6 +104,14 @@ enum {
97 IWPM_NLA_QUERY_MAPPING_SEQ, 104 IWPM_NLA_QUERY_MAPPING_SEQ,
98 IWPM_NLA_QUERY_LOCAL_ADDR, 105 IWPM_NLA_QUERY_LOCAL_ADDR,
99 IWPM_NLA_QUERY_REMOTE_ADDR, 106 IWPM_NLA_QUERY_REMOTE_ADDR,
107 IWPM_NLA_QUERY_MAPPING_MAX,
108};
109
110enum {
111 IWPM_NLA_RQUERY_MAPPING_UNSPEC = 0,
112 IWPM_NLA_RQUERY_MAPPING_SEQ,
113 IWPM_NLA_RQUERY_LOCAL_ADDR,
114 IWPM_NLA_RQUERY_REMOTE_ADDR,
100 IWPM_NLA_RQUERY_MAPPED_LOC_ADDR, 115 IWPM_NLA_RQUERY_MAPPED_LOC_ADDR,
101 IWPM_NLA_RQUERY_MAPPED_REM_ADDR, 116 IWPM_NLA_RQUERY_MAPPED_REM_ADDR,
102 IWPM_NLA_RQUERY_MAPPING_ERR, 117 IWPM_NLA_RQUERY_MAPPING_ERR,