aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Wise <swise@opengridcomputing.com>2016-02-26 10:18:03 -0500
committerDoug Ledford <dledford@redhat.com>2016-03-16 13:48:21 -0400
commit170003c894d93332e1b4162aa06864ad83eb302d (patch)
tree1dfa0ba42af2d815ff8b28848aff15ae50c0a293
parent6a0dde89cc346588f7f610dbc0d75e100f9cb568 (diff)
iw_cxgb4: remove port mapper related code
Now that most of the port mapper code been moved to iwcm, we can remove it from iw_cxgb4. Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
-rw-r--r--drivers/infiniband/hw/cxgb4/cm.c220
-rw-r--r--drivers/infiniband/hw/cxgb4/device.c67
-rw-r--r--drivers/infiniband/hw/cxgb4/iw_cxgb4.h42
3 files changed, 65 insertions, 264 deletions
diff --git a/drivers/infiniband/hw/cxgb4/cm.c b/drivers/infiniband/hw/cxgb4/cm.c
index cd2ff5f9518a..61518830ba11 100644
--- a/drivers/infiniband/hw/cxgb4/cm.c
+++ b/drivers/infiniband/hw/cxgb4/cm.c
@@ -302,7 +302,7 @@ void _c4iw_free_ep(struct kref *kref)
302 if (ep->com.remote_addr.ss_family == AF_INET6) { 302 if (ep->com.remote_addr.ss_family == AF_INET6) {
303 struct sockaddr_in6 *sin6 = 303 struct sockaddr_in6 *sin6 =
304 (struct sockaddr_in6 *) 304 (struct sockaddr_in6 *)
305 &ep->com.mapped_local_addr; 305 &ep->com.local_addr;
306 306
307 cxgb4_clip_release( 307 cxgb4_clip_release(
308 ep->com.dev->rdev.lldi.ports[0], 308 ep->com.dev->rdev.lldi.ports[0],
@@ -314,12 +314,6 @@ void _c4iw_free_ep(struct kref *kref)
314 dst_release(ep->dst); 314 dst_release(ep->dst);
315 cxgb4_l2t_release(ep->l2t); 315 cxgb4_l2t_release(ep->l2t);
316 } 316 }
317 if (test_bit(RELEASE_MAPINFO, &ep->com.flags)) {
318 print_addr(&ep->com, __func__, "remove_mapinfo/mapping");
319 iwpm_remove_mapinfo(&ep->com.local_addr,
320 &ep->com.mapped_local_addr);
321 iwpm_remove_mapping(&ep->com.local_addr, RDMA_NL_C4IW);
322 }
323 kfree(ep); 317 kfree(ep);
324} 318}
325 319
@@ -455,7 +449,7 @@ static void act_open_req_arp_failure(void *handle, struct sk_buff *skb)
455 state_set(&ep->com, DEAD); 449 state_set(&ep->com, DEAD);
456 if (ep->com.remote_addr.ss_family == AF_INET6) { 450 if (ep->com.remote_addr.ss_family == AF_INET6) {
457 struct sockaddr_in6 *sin6 = 451 struct sockaddr_in6 *sin6 =
458 (struct sockaddr_in6 *)&ep->com.mapped_local_addr; 452 (struct sockaddr_in6 *)&ep->com.local_addr;
459 cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0], 453 cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
460 (const u32 *)&sin6->sin6_addr.s6_addr, 1); 454 (const u32 *)&sin6->sin6_addr.s6_addr, 1);
461 } 455 }
@@ -568,54 +562,6 @@ static int send_abort(struct c4iw_ep *ep, struct sk_buff *skb, gfp_t gfp)
568 return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t); 562 return c4iw_l2t_send(&ep->com.dev->rdev, skb, ep->l2t);
569} 563}
570 564
571/*
572 * c4iw_form_pm_msg - Form a port mapper message with mapping info
573 */
574static void c4iw_form_pm_msg(struct c4iw_ep *ep,
575 struct iwpm_sa_data *pm_msg)
576{
577 memcpy(&pm_msg->loc_addr, &ep->com.local_addr,
578 sizeof(ep->com.local_addr));
579 memcpy(&pm_msg->rem_addr, &ep->com.remote_addr,
580 sizeof(ep->com.remote_addr));
581}
582
583/*
584 * c4iw_form_reg_msg - Form a port mapper message with dev info
585 */
586static void c4iw_form_reg_msg(struct c4iw_dev *dev,
587 struct iwpm_dev_data *pm_msg)
588{
589 memcpy(pm_msg->dev_name, dev->ibdev.name, IWPM_DEVNAME_SIZE);
590 memcpy(pm_msg->if_name, dev->rdev.lldi.ports[0]->name,
591 IWPM_IFNAME_SIZE);
592}
593
594static void c4iw_record_pm_msg(struct c4iw_ep *ep,
595 struct iwpm_sa_data *pm_msg)
596{
597 memcpy(&ep->com.mapped_local_addr, &pm_msg->mapped_loc_addr,
598 sizeof(ep->com.mapped_local_addr));
599 memcpy(&ep->com.mapped_remote_addr, &pm_msg->mapped_rem_addr,
600 sizeof(ep->com.mapped_remote_addr));
601}
602
603static int get_remote_addr(struct c4iw_ep *parent_ep, struct c4iw_ep *child_ep)
604{
605 int ret;
606
607 print_addr(&parent_ep->com, __func__, "get_remote_addr parent_ep ");
608 print_addr(&child_ep->com, __func__, "get_remote_addr child_ep ");
609
610 ret = iwpm_get_remote_info(&parent_ep->com.mapped_local_addr,
611 &child_ep->com.mapped_remote_addr,
612 &child_ep->com.remote_addr, RDMA_NL_C4IW);
613 if (ret)
614 PDBG("Unable to find remote peer addr info - err %d\n", ret);
615
616 return ret;
617}
618
619static void best_mtu(const unsigned short *mtus, unsigned short mtu, 565static void best_mtu(const unsigned short *mtus, unsigned short mtu,
620 unsigned int *idx, int use_ts, int ipv6) 566 unsigned int *idx, int use_ts, int ipv6)
621{ 567{
@@ -645,13 +591,13 @@ static int send_connect(struct c4iw_ep *ep)
645 int wscale; 591 int wscale;
646 int win, sizev4, sizev6, wrlen; 592 int win, sizev4, sizev6, wrlen;
647 struct sockaddr_in *la = (struct sockaddr_in *) 593 struct sockaddr_in *la = (struct sockaddr_in *)
648 &ep->com.mapped_local_addr; 594 &ep->com.local_addr;
649 struct sockaddr_in *ra = (struct sockaddr_in *) 595 struct sockaddr_in *ra = (struct sockaddr_in *)
650 &ep->com.mapped_remote_addr; 596 &ep->com.remote_addr;
651 struct sockaddr_in6 *la6 = (struct sockaddr_in6 *) 597 struct sockaddr_in6 *la6 = (struct sockaddr_in6 *)
652 &ep->com.mapped_local_addr; 598 &ep->com.local_addr;
653 struct sockaddr_in6 *ra6 = (struct sockaddr_in6 *) 599 struct sockaddr_in6 *ra6 = (struct sockaddr_in6 *)
654 &ep->com.mapped_remote_addr; 600 &ep->com.remote_addr;
655 int ret; 601 int ret;
656 enum chip_type adapter_type = ep->com.dev->rdev.lldi.adapter_type; 602 enum chip_type adapter_type = ep->com.dev->rdev.lldi.adapter_type;
657 u32 isn = (prandom_u32() & ~7UL) - 1; 603 u32 isn = (prandom_u32() & ~7UL) - 1;
@@ -1829,10 +1775,10 @@ static void send_fw_act_open_req(struct c4iw_ep *ep, unsigned int atid)
1829 req->le.filter = cpu_to_be32(cxgb4_select_ntuple( 1775 req->le.filter = cpu_to_be32(cxgb4_select_ntuple(
1830 ep->com.dev->rdev.lldi.ports[0], 1776 ep->com.dev->rdev.lldi.ports[0],
1831 ep->l2t)); 1777 ep->l2t));
1832 sin = (struct sockaddr_in *)&ep->com.mapped_local_addr; 1778 sin = (struct sockaddr_in *)&ep->com.local_addr;
1833 req->le.lport = sin->sin_port; 1779 req->le.lport = sin->sin_port;
1834 req->le.u.ipv4.lip = sin->sin_addr.s_addr; 1780 req->le.u.ipv4.lip = sin->sin_addr.s_addr;
1835 sin = (struct sockaddr_in *)&ep->com.mapped_remote_addr; 1781 sin = (struct sockaddr_in *)&ep->com.remote_addr;
1836 req->le.pport = sin->sin_port; 1782 req->le.pport = sin->sin_port;
1837 req->le.u.ipv4.pip = sin->sin_addr.s_addr; 1783 req->le.u.ipv4.pip = sin->sin_addr.s_addr;
1838 req->tcb.t_state_to_astid = 1784 req->tcb.t_state_to_astid =
@@ -2013,13 +1959,13 @@ static int c4iw_reconnect(struct c4iw_ep *ep)
2013{ 1959{
2014 int err = 0; 1960 int err = 0;
2015 struct sockaddr_in *laddr = (struct sockaddr_in *) 1961 struct sockaddr_in *laddr = (struct sockaddr_in *)
2016 &ep->com.cm_id->local_addr; 1962 &ep->com.cm_id->m_local_addr;
2017 struct sockaddr_in *raddr = (struct sockaddr_in *) 1963 struct sockaddr_in *raddr = (struct sockaddr_in *)
2018 &ep->com.cm_id->remote_addr; 1964 &ep->com.cm_id->m_remote_addr;
2019 struct sockaddr_in6 *laddr6 = (struct sockaddr_in6 *) 1965 struct sockaddr_in6 *laddr6 = (struct sockaddr_in6 *)
2020 &ep->com.cm_id->local_addr; 1966 &ep->com.cm_id->m_local_addr;
2021 struct sockaddr_in6 *raddr6 = (struct sockaddr_in6 *) 1967 struct sockaddr_in6 *raddr6 = (struct sockaddr_in6 *)
2022 &ep->com.cm_id->remote_addr; 1968 &ep->com.cm_id->m_remote_addr;
2023 int iptype; 1969 int iptype;
2024 __u8 *ra; 1970 __u8 *ra;
2025 1971
@@ -2038,7 +1984,7 @@ static int c4iw_reconnect(struct c4iw_ep *ep)
2038 insert_handle(ep->com.dev, &ep->com.dev->atid_idr, ep, ep->atid); 1984 insert_handle(ep->com.dev, &ep->com.dev->atid_idr, ep, ep->atid);
2039 1985
2040 /* find a route */ 1986 /* find a route */
2041 if (ep->com.cm_id->local_addr.ss_family == AF_INET) { 1987 if (ep->com.cm_id->m_local_addr.ss_family == AF_INET) {
2042 ep->dst = find_route(ep->com.dev, laddr->sin_addr.s_addr, 1988 ep->dst = find_route(ep->com.dev, laddr->sin_addr.s_addr,
2043 raddr->sin_addr.s_addr, laddr->sin_port, 1989 raddr->sin_addr.s_addr, laddr->sin_port,
2044 raddr->sin_port, 0); 1990 raddr->sin_port, 0);
@@ -2109,10 +2055,10 @@ static int act_open_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
2109 struct sockaddr_in6 *ra6; 2055 struct sockaddr_in6 *ra6;
2110 2056
2111 ep = lookup_atid(t, atid); 2057 ep = lookup_atid(t, atid);
2112 la = (struct sockaddr_in *)&ep->com.mapped_local_addr; 2058 la = (struct sockaddr_in *)&ep->com.local_addr;
2113 ra = (struct sockaddr_in *)&ep->com.mapped_remote_addr; 2059 ra = (struct sockaddr_in *)&ep->com.remote_addr;
2114 la6 = (struct sockaddr_in6 *)&ep->com.mapped_local_addr; 2060 la6 = (struct sockaddr_in6 *)&ep->com.local_addr;
2115 ra6 = (struct sockaddr_in6 *)&ep->com.mapped_remote_addr; 2061 ra6 = (struct sockaddr_in6 *)&ep->com.remote_addr;
2116 2062
2117 PDBG("%s ep %p atid %u status %u errno %d\n", __func__, ep, atid, 2063 PDBG("%s ep %p atid %u status %u errno %d\n", __func__, ep, atid,
2118 status, status2errno(status)); 2064 status, status2errno(status));
@@ -2154,7 +2100,7 @@ static int act_open_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
2154 if (ep->com.remote_addr.ss_family == AF_INET6) { 2100 if (ep->com.remote_addr.ss_family == AF_INET6) {
2155 struct sockaddr_in6 *sin6 = 2101 struct sockaddr_in6 *sin6 =
2156 (struct sockaddr_in6 *) 2102 (struct sockaddr_in6 *)
2157 &ep->com.mapped_local_addr; 2103 &ep->com.local_addr;
2158 cxgb4_clip_release( 2104 cxgb4_clip_release(
2159 ep->com.dev->rdev.lldi.ports[0], 2105 ep->com.dev->rdev.lldi.ports[0],
2160 (const u32 *) 2106 (const u32 *)
@@ -2189,7 +2135,7 @@ static int act_open_rpl(struct c4iw_dev *dev, struct sk_buff *skb)
2189 2135
2190 if (ep->com.remote_addr.ss_family == AF_INET6) { 2136 if (ep->com.remote_addr.ss_family == AF_INET6) {
2191 struct sockaddr_in6 *sin6 = 2137 struct sockaddr_in6 *sin6 =
2192 (struct sockaddr_in6 *)&ep->com.mapped_local_addr; 2138 (struct sockaddr_in6 *)&ep->com.local_addr;
2193 cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0], 2139 cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
2194 (const u32 *)&sin6->sin6_addr.s6_addr, 1); 2140 (const u32 *)&sin6->sin6_addr.s6_addr, 1);
2195 } 2141 }
@@ -2459,18 +2405,9 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
2459 child_ep->com.dev = dev; 2405 child_ep->com.dev = dev;
2460 child_ep->com.cm_id = NULL; 2406 child_ep->com.cm_id = NULL;
2461 2407
2462 /*
2463 * The mapped_local and mapped_remote addresses get setup with
2464 * the actual 4-tuple. The local address will be based on the
2465 * actual local address of the connection, but on the port number
2466 * of the parent listening endpoint. The remote address is
2467 * setup based on a query to the IWPM since we don't know what it
2468 * originally was before mapping. If no mapping was done, then
2469 * mapped_remote == remote, and mapped_local == local.
2470 */
2471 if (iptype == 4) { 2408 if (iptype == 4) {
2472 struct sockaddr_in *sin = (struct sockaddr_in *) 2409 struct sockaddr_in *sin = (struct sockaddr_in *)
2473 &child_ep->com.mapped_local_addr; 2410 &child_ep->com.local_addr;
2474 2411
2475 sin->sin_family = PF_INET; 2412 sin->sin_family = PF_INET;
2476 sin->sin_port = local_port; 2413 sin->sin_port = local_port;
@@ -2482,12 +2419,12 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
2482 &parent_ep->com.local_addr)->sin_port; 2419 &parent_ep->com.local_addr)->sin_port;
2483 sin->sin_addr.s_addr = *(__be32 *)local_ip; 2420 sin->sin_addr.s_addr = *(__be32 *)local_ip;
2484 2421
2485 sin = (struct sockaddr_in *)&child_ep->com.mapped_remote_addr; 2422 sin = (struct sockaddr_in *)&child_ep->com.remote_addr;
2486 sin->sin_family = PF_INET; 2423 sin->sin_family = PF_INET;
2487 sin->sin_port = peer_port; 2424 sin->sin_port = peer_port;
2488 sin->sin_addr.s_addr = *(__be32 *)peer_ip; 2425 sin->sin_addr.s_addr = *(__be32 *)peer_ip;
2489 } else { 2426 } else {
2490 sin6 = (struct sockaddr_in6 *)&child_ep->com.mapped_local_addr; 2427 sin6 = (struct sockaddr_in6 *)&child_ep->com.local_addr;
2491 sin6->sin6_family = PF_INET6; 2428 sin6->sin6_family = PF_INET6;
2492 sin6->sin6_port = local_port; 2429 sin6->sin6_port = local_port;
2493 memcpy(sin6->sin6_addr.s6_addr, local_ip, 16); 2430 memcpy(sin6->sin6_addr.s6_addr, local_ip, 16);
@@ -2498,14 +2435,11 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
2498 &parent_ep->com.local_addr)->sin6_port; 2435 &parent_ep->com.local_addr)->sin6_port;
2499 memcpy(sin6->sin6_addr.s6_addr, local_ip, 16); 2436 memcpy(sin6->sin6_addr.s6_addr, local_ip, 16);
2500 2437
2501 sin6 = (struct sockaddr_in6 *)&child_ep->com.mapped_remote_addr; 2438 sin6 = (struct sockaddr_in6 *)&child_ep->com.remote_addr;
2502 sin6->sin6_family = PF_INET6; 2439 sin6->sin6_family = PF_INET6;
2503 sin6->sin6_port = peer_port; 2440 sin6->sin6_port = peer_port;
2504 memcpy(sin6->sin6_addr.s6_addr, peer_ip, 16); 2441 memcpy(sin6->sin6_addr.s6_addr, peer_ip, 16);
2505 } 2442 }
2506 memcpy(&child_ep->com.remote_addr, &child_ep->com.mapped_remote_addr,
2507 sizeof(child_ep->com.remote_addr));
2508 get_remote_addr(parent_ep, child_ep);
2509 2443
2510 c4iw_get_ep(&parent_ep->com); 2444 c4iw_get_ep(&parent_ep->com);
2511 child_ep->parent_ep = parent_ep; 2445 child_ep->parent_ep = parent_ep;
@@ -2522,7 +2456,7 @@ static int pass_accept_req(struct c4iw_dev *dev, struct sk_buff *skb)
2522 accept_cr(child_ep, skb, req); 2456 accept_cr(child_ep, skb, req);
2523 set_bit(PASS_ACCEPT_REQ, &child_ep->com.history); 2457 set_bit(PASS_ACCEPT_REQ, &child_ep->com.history);
2524 if (iptype == 6) { 2458 if (iptype == 6) {
2525 sin6 = (struct sockaddr_in6 *)&child_ep->com.mapped_local_addr; 2459 sin6 = (struct sockaddr_in6 *)&child_ep->com.local_addr;
2526 cxgb4_clip_get(child_ep->com.dev->rdev.lldi.ports[0], 2460 cxgb4_clip_get(child_ep->com.dev->rdev.lldi.ports[0],
2527 (const u32 *)&sin6->sin6_addr.s6_addr, 1); 2461 (const u32 *)&sin6->sin6_addr.s6_addr, 1);
2528 } 2462 }
@@ -2765,7 +2699,7 @@ out:
2765 if (ep->com.remote_addr.ss_family == AF_INET6) { 2699 if (ep->com.remote_addr.ss_family == AF_INET6) {
2766 struct sockaddr_in6 *sin6 = 2700 struct sockaddr_in6 *sin6 =
2767 (struct sockaddr_in6 *) 2701 (struct sockaddr_in6 *)
2768 &ep->com.mapped_local_addr; 2702 &ep->com.local_addr;
2769 cxgb4_clip_release( 2703 cxgb4_clip_release(
2770 ep->com.dev->rdev.lldi.ports[0], 2704 ep->com.dev->rdev.lldi.ports[0],
2771 (const u32 *)&sin6->sin6_addr.s6_addr, 2705 (const u32 *)&sin6->sin6_addr.s6_addr,
@@ -3026,8 +2960,8 @@ static int pick_local_ipaddrs(struct c4iw_dev *dev, struct iw_cm_id *cm_id)
3026{ 2960{
3027 struct in_device *ind; 2961 struct in_device *ind;
3028 int found = 0; 2962 int found = 0;
3029 struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->local_addr; 2963 struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->m_local_addr;
3030 struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->remote_addr; 2964 struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->m_remote_addr;
3031 2965
3032 ind = in_dev_get(dev->rdev.lldi.ports[0]); 2966 ind = in_dev_get(dev->rdev.lldi.ports[0]);
3033 if (!ind) 2967 if (!ind)
@@ -3072,8 +3006,8 @@ static int get_lladdr(struct net_device *dev, struct in6_addr *addr,
3072static int pick_local_ip6addrs(struct c4iw_dev *dev, struct iw_cm_id *cm_id) 3006static int pick_local_ip6addrs(struct c4iw_dev *dev, struct iw_cm_id *cm_id)
3073{ 3007{
3074 struct in6_addr uninitialized_var(addr); 3008 struct in6_addr uninitialized_var(addr);
3075 struct sockaddr_in6 *la6 = (struct sockaddr_in6 *)&cm_id->local_addr; 3009 struct sockaddr_in6 *la6 = (struct sockaddr_in6 *)&cm_id->m_local_addr;
3076 struct sockaddr_in6 *ra6 = (struct sockaddr_in6 *)&cm_id->remote_addr; 3010 struct sockaddr_in6 *ra6 = (struct sockaddr_in6 *)&cm_id->m_remote_addr;
3077 3011
3078 if (!get_lladdr(dev->rdev.lldi.ports[0], &addr, IFA_F_TENTATIVE)) { 3012 if (!get_lladdr(dev->rdev.lldi.ports[0], &addr, IFA_F_TENTATIVE)) {
3079 memcpy(la6->sin6_addr.s6_addr, &addr, 16); 3013 memcpy(la6->sin6_addr.s6_addr, &addr, 16);
@@ -3092,11 +3026,8 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3092 struct sockaddr_in *raddr; 3026 struct sockaddr_in *raddr;
3093 struct sockaddr_in6 *laddr6; 3027 struct sockaddr_in6 *laddr6;
3094 struct sockaddr_in6 *raddr6; 3028 struct sockaddr_in6 *raddr6;
3095 struct iwpm_dev_data pm_reg_msg;
3096 struct iwpm_sa_data pm_msg;
3097 __u8 *ra; 3029 __u8 *ra;
3098 int iptype; 3030 int iptype;
3099 int iwpm_err = 0;
3100 3031
3101 if ((conn_param->ord > cur_max_read_depth(dev)) || 3032 if ((conn_param->ord > cur_max_read_depth(dev)) ||
3102 (conn_param->ird > cur_max_read_depth(dev))) { 3033 (conn_param->ird > cur_max_read_depth(dev))) {
@@ -3144,47 +3075,17 @@ int c4iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param)
3144 } 3075 }
3145 insert_handle(dev, &dev->atid_idr, ep, ep->atid); 3076 insert_handle(dev, &dev->atid_idr, ep, ep->atid);
3146 3077
3147 memcpy(&ep->com.local_addr, &cm_id->local_addr, 3078 memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
3148 sizeof(ep->com.local_addr)); 3079 sizeof(ep->com.local_addr));
3149 memcpy(&ep->com.remote_addr, &cm_id->remote_addr, 3080 memcpy(&ep->com.remote_addr, &cm_id->m_remote_addr,
3150 sizeof(ep->com.remote_addr)); 3081 sizeof(ep->com.remote_addr));
3151 3082
3152 /* No port mapper available, go with the specified peer information */ 3083 laddr = (struct sockaddr_in *)&ep->com.local_addr;
3153 memcpy(&ep->com.mapped_local_addr, &cm_id->local_addr, 3084 raddr = (struct sockaddr_in *)&ep->com.remote_addr;
3154 sizeof(ep->com.mapped_local_addr)); 3085 laddr6 = (struct sockaddr_in6 *)&ep->com.local_addr;
3155 memcpy(&ep->com.mapped_remote_addr, &cm_id->remote_addr, 3086 raddr6 = (struct sockaddr_in6 *) &ep->com.remote_addr;
3156 sizeof(ep->com.mapped_remote_addr));
3157
3158 c4iw_form_reg_msg(dev, &pm_reg_msg);
3159 iwpm_err = iwpm_register_pid(&pm_reg_msg, RDMA_NL_C4IW);
3160 if (iwpm_err) {
3161 PDBG("%s: Port Mapper reg pid fail (err = %d).\n",
3162 __func__, iwpm_err);
3163 }
3164 if (iwpm_valid_pid() && !iwpm_err) {
3165 c4iw_form_pm_msg(ep, &pm_msg);
3166 iwpm_err = iwpm_add_and_query_mapping(&pm_msg, RDMA_NL_C4IW);
3167 if (iwpm_err)
3168 PDBG("%s: Port Mapper query fail (err = %d).\n",
3169 __func__, iwpm_err);
3170 else
3171 c4iw_record_pm_msg(ep, &pm_msg);
3172 }
3173 if (iwpm_create_mapinfo(&ep->com.local_addr,
3174 &ep->com.mapped_local_addr, RDMA_NL_C4IW)) {
3175 iwpm_remove_mapping(&ep->com.local_addr, RDMA_NL_C4IW);
3176 err = -ENOMEM;
3177 goto fail1;
3178 }
3179 print_addr(&ep->com, __func__, "add_query/create_mapinfo");
3180 set_bit(RELEASE_MAPINFO, &ep->com.flags);
3181 3087
3182 laddr = (struct sockaddr_in *)&ep->com.mapped_local_addr; 3088 if (cm_id->m_remote_addr.ss_family == AF_INET) {
3183 raddr = (struct sockaddr_in *)&ep->com.mapped_remote_addr;
3184 laddr6 = (struct sockaddr_in6 *)&ep->com.mapped_local_addr;
3185 raddr6 = (struct sockaddr_in6 *) &ep->com.mapped_remote_addr;
3186
3187 if (cm_id->remote_addr.ss_family == AF_INET) {
3188 iptype = 4; 3089 iptype = 4;
3189 ra = (__u8 *)&raddr->sin_addr; 3090 ra = (__u8 *)&raddr->sin_addr;
3190 3091
@@ -3269,7 +3170,7 @@ static int create_server6(struct c4iw_dev *dev, struct c4iw_listen_ep *ep)
3269{ 3170{
3270 int err; 3171 int err;
3271 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) 3172 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)
3272 &ep->com.mapped_local_addr; 3173 &ep->com.local_addr;
3273 3174
3274 if (ipv6_addr_type(&sin6->sin6_addr) != IPV6_ADDR_ANY) { 3175 if (ipv6_addr_type(&sin6->sin6_addr) != IPV6_ADDR_ANY) {
3275 err = cxgb4_clip_get(ep->com.dev->rdev.lldi.ports[0], 3176 err = cxgb4_clip_get(ep->com.dev->rdev.lldi.ports[0],
@@ -3302,7 +3203,7 @@ static int create_server4(struct c4iw_dev *dev, struct c4iw_listen_ep *ep)
3302{ 3203{
3303 int err; 3204 int err;
3304 struct sockaddr_in *sin = (struct sockaddr_in *) 3205 struct sockaddr_in *sin = (struct sockaddr_in *)
3305 &ep->com.mapped_local_addr; 3206 &ep->com.local_addr;
3306 3207
3307 if (dev->rdev.lldi.enable_fw_ofld_conn) { 3208 if (dev->rdev.lldi.enable_fw_ofld_conn) {
3308 do { 3209 do {
@@ -3343,9 +3244,6 @@ int c4iw_create_listen(struct iw_cm_id *cm_id, int backlog)
3343 int err = 0; 3244 int err = 0;
3344 struct c4iw_dev *dev = to_c4iw_dev(cm_id->device); 3245 struct c4iw_dev *dev = to_c4iw_dev(cm_id->device);
3345 struct c4iw_listen_ep *ep; 3246 struct c4iw_listen_ep *ep;
3346 struct iwpm_dev_data pm_reg_msg;
3347 struct iwpm_sa_data pm_msg;
3348 int iwpm_err = 0;
3349 3247
3350 might_sleep(); 3248 might_sleep();
3351 3249
@@ -3360,7 +3258,7 @@ int c4iw_create_listen(struct iw_cm_id *cm_id, int backlog)
3360 ep->com.cm_id = cm_id; 3258 ep->com.cm_id = cm_id;
3361 ep->com.dev = dev; 3259 ep->com.dev = dev;
3362 ep->backlog = backlog; 3260 ep->backlog = backlog;
3363 memcpy(&ep->com.local_addr, &cm_id->local_addr, 3261 memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
3364 sizeof(ep->com.local_addr)); 3262 sizeof(ep->com.local_addr));
3365 3263
3366 /* 3264 /*
@@ -3369,10 +3267,10 @@ int c4iw_create_listen(struct iw_cm_id *cm_id, int backlog)
3369 if (dev->rdev.lldi.enable_fw_ofld_conn && 3267 if (dev->rdev.lldi.enable_fw_ofld_conn &&
3370 ep->com.local_addr.ss_family == AF_INET) 3268 ep->com.local_addr.ss_family == AF_INET)
3371 ep->stid = cxgb4_alloc_sftid(dev->rdev.lldi.tids, 3269 ep->stid = cxgb4_alloc_sftid(dev->rdev.lldi.tids,
3372 cm_id->local_addr.ss_family, ep); 3270 cm_id->m_local_addr.ss_family, ep);
3373 else 3271 else
3374 ep->stid = cxgb4_alloc_stid(dev->rdev.lldi.tids, 3272 ep->stid = cxgb4_alloc_stid(dev->rdev.lldi.tids,
3375 cm_id->local_addr.ss_family, ep); 3273 cm_id->m_local_addr.ss_family, ep);
3376 3274
3377 if (ep->stid == -1) { 3275 if (ep->stid == -1) {
3378 printk(KERN_ERR MOD "%s - cannot alloc stid.\n", __func__); 3276 printk(KERN_ERR MOD "%s - cannot alloc stid.\n", __func__);
@@ -3381,36 +3279,9 @@ int c4iw_create_listen(struct iw_cm_id *cm_id, int backlog)
3381 } 3279 }
3382 insert_handle(dev, &dev->stid_idr, ep, ep->stid); 3280 insert_handle(dev, &dev->stid_idr, ep, ep->stid);
3383 3281
3384 /* No port mapper available, go with the specified info */ 3282 memcpy(&ep->com.local_addr, &cm_id->m_local_addr,
3385 memcpy(&ep->com.mapped_local_addr, &cm_id->local_addr, 3283 sizeof(ep->com.local_addr));
3386 sizeof(ep->com.mapped_local_addr));
3387
3388 c4iw_form_reg_msg(dev, &pm_reg_msg);
3389 iwpm_err = iwpm_register_pid(&pm_reg_msg, RDMA_NL_C4IW);
3390 if (iwpm_err) {
3391 PDBG("%s: Port Mapper reg pid fail (err = %d).\n",
3392 __func__, iwpm_err);
3393 }
3394 if (iwpm_valid_pid() && !iwpm_err) {
3395 memcpy(&pm_msg.loc_addr, &ep->com.local_addr,
3396 sizeof(ep->com.local_addr));
3397 iwpm_err = iwpm_add_mapping(&pm_msg, RDMA_NL_C4IW);
3398 if (iwpm_err)
3399 PDBG("%s: Port Mapper query fail (err = %d).\n",
3400 __func__, iwpm_err);
3401 else
3402 memcpy(&ep->com.mapped_local_addr,
3403 &pm_msg.mapped_loc_addr,
3404 sizeof(ep->com.mapped_local_addr));
3405 }
3406 if (iwpm_create_mapinfo(&ep->com.local_addr,
3407 &ep->com.mapped_local_addr, RDMA_NL_C4IW)) {
3408 err = -ENOMEM;
3409 goto fail3;
3410 }
3411 print_addr(&ep->com, __func__, "add_mapping/create_mapinfo");
3412 3284
3413 set_bit(RELEASE_MAPINFO, &ep->com.flags);
3414 state_set(&ep->com, LISTEN); 3285 state_set(&ep->com, LISTEN);
3415 if (ep->com.local_addr.ss_family == AF_INET) 3286 if (ep->com.local_addr.ss_family == AF_INET)
3416 err = create_server4(dev, ep); 3287 err = create_server4(dev, ep);
@@ -3421,7 +3292,6 @@ int c4iw_create_listen(struct iw_cm_id *cm_id, int backlog)
3421 goto out; 3292 goto out;
3422 } 3293 }
3423 3294
3424fail3:
3425 cxgb4_free_stid(ep->com.dev->rdev.lldi.tids, ep->stid, 3295 cxgb4_free_stid(ep->com.dev->rdev.lldi.tids, ep->stid,
3426 ep->com.local_addr.ss_family); 3296 ep->com.local_addr.ss_family);
3427fail2: 3297fail2:
@@ -3456,7 +3326,7 @@ int c4iw_destroy_listen(struct iw_cm_id *cm_id)
3456 goto done; 3326 goto done;
3457 err = c4iw_wait_for_reply(&ep->com.dev->rdev, &ep->com.wr_wait, 3327 err = c4iw_wait_for_reply(&ep->com.dev->rdev, &ep->com.wr_wait,
3458 0, 0, __func__); 3328 0, 0, __func__);
3459 sin6 = (struct sockaddr_in6 *)&ep->com.mapped_local_addr; 3329 sin6 = (struct sockaddr_in6 *)&ep->com.local_addr;
3460 cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0], 3330 cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
3461 (const u32 *)&sin6->sin6_addr.s6_addr, 1); 3331 (const u32 *)&sin6->sin6_addr.s6_addr, 1);
3462 } 3332 }
@@ -3580,7 +3450,7 @@ static void active_ofld_conn_reply(struct c4iw_dev *dev, struct sk_buff *skb,
3580 state_set(&ep->com, DEAD); 3450 state_set(&ep->com, DEAD);
3581 if (ep->com.remote_addr.ss_family == AF_INET6) { 3451 if (ep->com.remote_addr.ss_family == AF_INET6) {
3582 struct sockaddr_in6 *sin6 = 3452 struct sockaddr_in6 *sin6 =
3583 (struct sockaddr_in6 *)&ep->com.mapped_local_addr; 3453 (struct sockaddr_in6 *)&ep->com.local_addr;
3584 cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0], 3454 cxgb4_clip_release(ep->com.dev->rdev.lldi.ports[0],
3585 (const u32 *)&sin6->sin6_addr.s6_addr, 1); 3455 (const u32 *)&sin6->sin6_addr.s6_addr, 1);
3586 } 3456 }
diff --git a/drivers/infiniband/hw/cxgb4/device.c b/drivers/infiniband/hw/cxgb4/device.c
index 8024ea4417b8..2f884ca85eea 100644
--- a/drivers/infiniband/hw/cxgb4/device.c
+++ b/drivers/infiniband/hw/cxgb4/device.c
@@ -87,17 +87,6 @@ struct c4iw_debugfs_data {
87 int pos; 87 int pos;
88}; 88};
89 89
90/* registered cxgb4 netlink callbacks */
91static struct ibnl_client_cbs c4iw_nl_cb_table[] = {
92 [RDMA_NL_IWPM_REG_PID] = {.dump = iwpm_register_pid_cb},
93 [RDMA_NL_IWPM_ADD_MAPPING] = {.dump = iwpm_add_mapping_cb},
94 [RDMA_NL_IWPM_QUERY_MAPPING] = {.dump = iwpm_add_and_query_mapping_cb},
95 [RDMA_NL_IWPM_HANDLE_ERR] = {.dump = iwpm_mapping_error_cb},
96 [RDMA_NL_IWPM_REMOTE_INFO] = {.dump = iwpm_remote_info_cb},
97 [RDMA_NL_IWPM_MAPINFO] = {.dump = iwpm_mapping_info_cb},
98 [RDMA_NL_IWPM_MAPINFO_NUM] = {.dump = iwpm_ack_mapping_info_cb}
99};
100
101static int count_idrs(int id, void *p, void *data) 90static int count_idrs(int id, void *p, void *data)
102{ 91{
103 int *countp = data; 92 int *countp = data;
@@ -242,13 +231,13 @@ static int dump_qp(int id, void *p, void *data)
242 if (qp->ep) { 231 if (qp->ep) {
243 if (qp->ep->com.local_addr.ss_family == AF_INET) { 232 if (qp->ep->com.local_addr.ss_family == AF_INET) {
244 struct sockaddr_in *lsin = (struct sockaddr_in *) 233 struct sockaddr_in *lsin = (struct sockaddr_in *)
245 &qp->ep->com.local_addr; 234 &qp->ep->com.cm_id->local_addr;
246 struct sockaddr_in *rsin = (struct sockaddr_in *) 235 struct sockaddr_in *rsin = (struct sockaddr_in *)
247 &qp->ep->com.remote_addr; 236 &qp->ep->com.cm_id->remote_addr;
248 struct sockaddr_in *mapped_lsin = (struct sockaddr_in *) 237 struct sockaddr_in *mapped_lsin = (struct sockaddr_in *)
249 &qp->ep->com.mapped_local_addr; 238 &qp->ep->com.cm_id->m_local_addr;
250 struct sockaddr_in *mapped_rsin = (struct sockaddr_in *) 239 struct sockaddr_in *mapped_rsin = (struct sockaddr_in *)
251 &qp->ep->com.mapped_remote_addr; 240 &qp->ep->com.cm_id->m_remote_addr;
252 241
253 cc = snprintf(qpd->buf + qpd->pos, space, 242 cc = snprintf(qpd->buf + qpd->pos, space,
254 "rc qp sq id %u rq id %u state %u " 243 "rc qp sq id %u rq id %u state %u "
@@ -264,15 +253,15 @@ static int dump_qp(int id, void *p, void *data)
264 ntohs(mapped_rsin->sin_port)); 253 ntohs(mapped_rsin->sin_port));
265 } else { 254 } else {
266 struct sockaddr_in6 *lsin6 = (struct sockaddr_in6 *) 255 struct sockaddr_in6 *lsin6 = (struct sockaddr_in6 *)
267 &qp->ep->com.local_addr; 256 &qp->ep->com.cm_id->local_addr;
268 struct sockaddr_in6 *rsin6 = (struct sockaddr_in6 *) 257 struct sockaddr_in6 *rsin6 = (struct sockaddr_in6 *)
269 &qp->ep->com.remote_addr; 258 &qp->ep->com.cm_id->remote_addr;
270 struct sockaddr_in6 *mapped_lsin6 = 259 struct sockaddr_in6 *mapped_lsin6 =
271 (struct sockaddr_in6 *) 260 (struct sockaddr_in6 *)
272 &qp->ep->com.mapped_local_addr; 261 &qp->ep->com.cm_id->m_local_addr;
273 struct sockaddr_in6 *mapped_rsin6 = 262 struct sockaddr_in6 *mapped_rsin6 =
274 (struct sockaddr_in6 *) 263 (struct sockaddr_in6 *)
275 &qp->ep->com.mapped_remote_addr; 264 &qp->ep->com.cm_id->m_remote_addr;
276 265
277 cc = snprintf(qpd->buf + qpd->pos, space, 266 cc = snprintf(qpd->buf + qpd->pos, space,
278 "rc qp sq id %u rq id %u state %u " 267 "rc qp sq id %u rq id %u state %u "
@@ -545,13 +534,13 @@ static int dump_ep(int id, void *p, void *data)
545 534
546 if (ep->com.local_addr.ss_family == AF_INET) { 535 if (ep->com.local_addr.ss_family == AF_INET) {
547 struct sockaddr_in *lsin = (struct sockaddr_in *) 536 struct sockaddr_in *lsin = (struct sockaddr_in *)
548 &ep->com.local_addr; 537 &ep->com.cm_id->local_addr;
549 struct sockaddr_in *rsin = (struct sockaddr_in *) 538 struct sockaddr_in *rsin = (struct sockaddr_in *)
550 &ep->com.remote_addr; 539 &ep->com.cm_id->remote_addr;
551 struct sockaddr_in *mapped_lsin = (struct sockaddr_in *) 540 struct sockaddr_in *mapped_lsin = (struct sockaddr_in *)
552 &ep->com.mapped_local_addr; 541 &ep->com.cm_id->m_local_addr;
553 struct sockaddr_in *mapped_rsin = (struct sockaddr_in *) 542 struct sockaddr_in *mapped_rsin = (struct sockaddr_in *)
554 &ep->com.mapped_remote_addr; 543 &ep->com.cm_id->m_remote_addr;
555 544
556 cc = snprintf(epd->buf + epd->pos, space, 545 cc = snprintf(epd->buf + epd->pos, space,
557 "ep %p cm_id %p qp %p state %d flags 0x%lx " 546 "ep %p cm_id %p qp %p state %d flags 0x%lx "
@@ -569,13 +558,13 @@ static int dump_ep(int id, void *p, void *data)
569 ntohs(mapped_rsin->sin_port)); 558 ntohs(mapped_rsin->sin_port));
570 } else { 559 } else {
571 struct sockaddr_in6 *lsin6 = (struct sockaddr_in6 *) 560 struct sockaddr_in6 *lsin6 = (struct sockaddr_in6 *)
572 &ep->com.local_addr; 561 &ep->com.cm_id->local_addr;
573 struct sockaddr_in6 *rsin6 = (struct sockaddr_in6 *) 562 struct sockaddr_in6 *rsin6 = (struct sockaddr_in6 *)
574 &ep->com.remote_addr; 563 &ep->com.cm_id->remote_addr;
575 struct sockaddr_in6 *mapped_lsin6 = (struct sockaddr_in6 *) 564 struct sockaddr_in6 *mapped_lsin6 = (struct sockaddr_in6 *)
576 &ep->com.mapped_local_addr; 565 &ep->com.cm_id->m_local_addr;
577 struct sockaddr_in6 *mapped_rsin6 = (struct sockaddr_in6 *) 566 struct sockaddr_in6 *mapped_rsin6 = (struct sockaddr_in6 *)
578 &ep->com.mapped_remote_addr; 567 &ep->com.cm_id->m_remote_addr;
579 568
580 cc = snprintf(epd->buf + epd->pos, space, 569 cc = snprintf(epd->buf + epd->pos, space,
581 "ep %p cm_id %p qp %p state %d flags 0x%lx " 570 "ep %p cm_id %p qp %p state %d flags 0x%lx "
@@ -610,9 +599,9 @@ static int dump_listen_ep(int id, void *p, void *data)
610 599
611 if (ep->com.local_addr.ss_family == AF_INET) { 600 if (ep->com.local_addr.ss_family == AF_INET) {
612 struct sockaddr_in *lsin = (struct sockaddr_in *) 601 struct sockaddr_in *lsin = (struct sockaddr_in *)
613 &ep->com.local_addr; 602 &ep->com.cm_id->local_addr;
614 struct sockaddr_in *mapped_lsin = (struct sockaddr_in *) 603 struct sockaddr_in *mapped_lsin = (struct sockaddr_in *)
615 &ep->com.mapped_local_addr; 604 &ep->com.cm_id->m_local_addr;
616 605
617 cc = snprintf(epd->buf + epd->pos, space, 606 cc = snprintf(epd->buf + epd->pos, space,
618 "ep %p cm_id %p state %d flags 0x%lx stid %d " 607 "ep %p cm_id %p state %d flags 0x%lx stid %d "
@@ -623,9 +612,9 @@ static int dump_listen_ep(int id, void *p, void *data)
623 ntohs(mapped_lsin->sin_port)); 612 ntohs(mapped_lsin->sin_port));
624 } else { 613 } else {
625 struct sockaddr_in6 *lsin6 = (struct sockaddr_in6 *) 614 struct sockaddr_in6 *lsin6 = (struct sockaddr_in6 *)
626 &ep->com.local_addr; 615 &ep->com.cm_id->local_addr;
627 struct sockaddr_in6 *mapped_lsin6 = (struct sockaddr_in6 *) 616 struct sockaddr_in6 *mapped_lsin6 = (struct sockaddr_in6 *)
628 &ep->com.mapped_local_addr; 617 &ep->com.cm_id->m_local_addr;
629 618
630 cc = snprintf(epd->buf + epd->pos, space, 619 cc = snprintf(epd->buf + epd->pos, space,
631 "ep %p cm_id %p state %d flags 0x%lx stid %d " 620 "ep %p cm_id %p state %d flags 0x%lx stid %d "
@@ -1506,20 +1495,6 @@ static int __init c4iw_init_module(void)
1506 printk(KERN_WARNING MOD 1495 printk(KERN_WARNING MOD
1507 "could not create debugfs entry, continuing\n"); 1496 "could not create debugfs entry, continuing\n");
1508 1497
1509 if (ibnl_add_client(RDMA_NL_C4IW, RDMA_NL_IWPM_NUM_OPS,
1510 c4iw_nl_cb_table))
1511 pr_err("%s[%u]: Failed to add netlink callback\n"
1512 , __func__, __LINE__);
1513
1514 err = iwpm_init(RDMA_NL_C4IW);
1515 if (err) {
1516 pr_err("port mapper initialization failed with %d\n", err);
1517 ibnl_remove_client(RDMA_NL_C4IW);
1518 c4iw_cm_term();
1519 debugfs_remove_recursive(c4iw_debugfs_root);
1520 return err;
1521 }
1522
1523 cxgb4_register_uld(CXGB4_ULD_RDMA, &c4iw_uld_info); 1498 cxgb4_register_uld(CXGB4_ULD_RDMA, &c4iw_uld_info);
1524 1499
1525 return 0; 1500 return 0;
@@ -1537,8 +1512,6 @@ static void __exit c4iw_exit_module(void)
1537 } 1512 }
1538 mutex_unlock(&dev_mutex); 1513 mutex_unlock(&dev_mutex);
1539 cxgb4_unregister_uld(CXGB4_ULD_RDMA); 1514 cxgb4_unregister_uld(CXGB4_ULD_RDMA);
1540 iwpm_exit(RDMA_NL_C4IW);
1541 ibnl_remove_client(RDMA_NL_C4IW);
1542 c4iw_cm_term(); 1515 c4iw_cm_term();
1543 debugfs_remove_recursive(c4iw_debugfs_root); 1516 debugfs_remove_recursive(c4iw_debugfs_root);
1544} 1517}
diff --git a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
index fb2de75a0392..efb1d783f0cf 100644
--- a/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
+++ b/drivers/infiniband/hw/cxgb4/iw_cxgb4.h
@@ -753,7 +753,6 @@ enum c4iw_ep_flags {
753 CLOSE_SENT = 3, 753 CLOSE_SENT = 3,
754 TIMEOUT = 4, 754 TIMEOUT = 4,
755 QP_REFERENCED = 5, 755 QP_REFERENCED = 5,
756 RELEASE_MAPINFO = 6,
757}; 756};
758 757
759enum c4iw_ep_history { 758enum c4iw_ep_history {
@@ -790,8 +789,6 @@ struct c4iw_ep_common {
790 struct mutex mutex; 789 struct mutex mutex;
791 struct sockaddr_storage local_addr; 790 struct sockaddr_storage local_addr;
792 struct sockaddr_storage remote_addr; 791 struct sockaddr_storage remote_addr;
793 struct sockaddr_storage mapped_local_addr;
794 struct sockaddr_storage mapped_remote_addr;
795 struct c4iw_wr_wait wr_wait; 792 struct c4iw_wr_wait wr_wait;
796 unsigned long flags; 793 unsigned long flags;
797 unsigned long history; 794 unsigned long history;
@@ -843,45 +840,6 @@ struct c4iw_ep {
843 struct c4iw_ep_stats stats; 840 struct c4iw_ep_stats stats;
844}; 841};
845 842
846static inline void print_addr(struct c4iw_ep_common *epc, const char *func,
847 const char *msg)
848{
849
850#define SINA(a) (&(((struct sockaddr_in *)(a))->sin_addr.s_addr))
851#define SINP(a) ntohs(((struct sockaddr_in *)(a))->sin_port)
852#define SIN6A(a) (&(((struct sockaddr_in6 *)(a))->sin6_addr))
853#define SIN6P(a) ntohs(((struct sockaddr_in6 *)(a))->sin6_port)
854
855 if (c4iw_debug) {
856 switch (epc->local_addr.ss_family) {
857 case AF_INET:
858 PDBG("%s %s %pI4:%u/%u <-> %pI4:%u/%u\n",
859 func, msg, SINA(&epc->local_addr),
860 SINP(&epc->local_addr),
861 SINP(&epc->mapped_local_addr),
862 SINA(&epc->remote_addr),
863 SINP(&epc->remote_addr),
864 SINP(&epc->mapped_remote_addr));
865 break;
866 case AF_INET6:
867 PDBG("%s %s %pI6:%u/%u <-> %pI6:%u/%u\n",
868 func, msg, SIN6A(&epc->local_addr),
869 SIN6P(&epc->local_addr),
870 SIN6P(&epc->mapped_local_addr),
871 SIN6A(&epc->remote_addr),
872 SIN6P(&epc->remote_addr),
873 SIN6P(&epc->mapped_remote_addr));
874 break;
875 default:
876 break;
877 }
878 }
879#undef SINA
880#undef SINP
881#undef SIN6A
882#undef SIN6P
883}
884
885static inline struct c4iw_ep *to_ep(struct iw_cm_id *cm_id) 843static inline struct c4iw_ep *to_ep(struct iw_cm_id *cm_id)
886{ 844{
887 return cm_id->provider_data; 845 return cm_id->provider_data;