RDMA/cma: Add IPv6 support for iWARP
Modify the type of local_addr and remote_addr fields in struct iw_cm_id from struct sockaddr_in to struct sockaddr_storage to hold IPv6 and IPv4 addresses uniformly. Change the references of local_addr and remote_addr in cxgb4, cxgb3, nes and amso drivers to match this. However to be able to actully run traffic over IPv6, low-level drivers have to add code to support this. Signed-off-by: Steve Wise <swise@opengridcomputing.com> Reviewed-by: Sean Hefty <sean.hefty@intel.com> [ Fix unused variable warnings when INFINIBAND_NES_DEBUG not set. - Roland ] Signed-off-by: Roland Dreier <roland@purestorage.com>
Este cometimento está contido em:

cometido por
Roland Dreier

ascendente
c095ba7224
cometimento
24d44a391f
@@ -155,6 +155,8 @@ void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)
|
||||
enum c2_event_id event_id;
|
||||
unsigned long flags;
|
||||
int status;
|
||||
struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_event.local_addr;
|
||||
struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_event.remote_addr;
|
||||
|
||||
/*
|
||||
* retrieve the message
|
||||
@@ -206,10 +208,10 @@ void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)
|
||||
case CCAE_ACTIVE_CONNECT_RESULTS:
|
||||
res = &wr->ae.ae_active_connect_results;
|
||||
cm_event.event = IW_CM_EVENT_CONNECT_REPLY;
|
||||
cm_event.local_addr.sin_addr.s_addr = res->laddr;
|
||||
cm_event.remote_addr.sin_addr.s_addr = res->raddr;
|
||||
cm_event.local_addr.sin_port = res->lport;
|
||||
cm_event.remote_addr.sin_port = res->rport;
|
||||
laddr->sin_addr.s_addr = res->laddr;
|
||||
raddr->sin_addr.s_addr = res->raddr;
|
||||
laddr->sin_port = res->lport;
|
||||
raddr->sin_port = res->rport;
|
||||
if (status == 0) {
|
||||
cm_event.private_data_len =
|
||||
be32_to_cpu(res->private_data_length);
|
||||
@@ -281,10 +283,10 @@ void c2_ae_event(struct c2_dev *c2dev, u32 mq_index)
|
||||
}
|
||||
cm_event.event = IW_CM_EVENT_CONNECT_REQUEST;
|
||||
cm_event.provider_data = (void*)(unsigned long)req->cr_handle;
|
||||
cm_event.local_addr.sin_addr.s_addr = req->laddr;
|
||||
cm_event.remote_addr.sin_addr.s_addr = req->raddr;
|
||||
cm_event.local_addr.sin_port = req->lport;
|
||||
cm_event.remote_addr.sin_port = req->rport;
|
||||
laddr->sin_addr.s_addr = req->laddr;
|
||||
raddr->sin_addr.s_addr = req->raddr;
|
||||
laddr->sin_port = req->lport;
|
||||
raddr->sin_port = req->rport;
|
||||
cm_event.private_data_len =
|
||||
be32_to_cpu(req->private_data_length);
|
||||
cm_event.private_data = req->private_data;
|
||||
|
@@ -46,6 +46,10 @@ int c2_llp_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param)
|
||||
struct c2wr_qp_connect_req *wr; /* variable size needs a malloc. */
|
||||
struct c2_vq_req *vq_req;
|
||||
int err;
|
||||
struct sockaddr_in *raddr = (struct sockaddr_in *)&cm_id->remote_addr;
|
||||
|
||||
if (cm_id->remote_addr.ss_family != AF_INET)
|
||||
return -ENOSYS;
|
||||
|
||||
ibqp = c2_get_qp(cm_id->device, iw_param->qpn);
|
||||
if (!ibqp)
|
||||
@@ -91,8 +95,8 @@ int c2_llp_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *iw_param)
|
||||
wr->rnic_handle = c2dev->adapter_handle;
|
||||
wr->qp_handle = qp->adapter_handle;
|
||||
|
||||
wr->remote_addr = cm_id->remote_addr.sin_addr.s_addr;
|
||||
wr->remote_port = cm_id->remote_addr.sin_port;
|
||||
wr->remote_addr = raddr->sin_addr.s_addr;
|
||||
wr->remote_port = raddr->sin_port;
|
||||
|
||||
/*
|
||||
* Move any private data from the callers's buf into
|
||||
@@ -135,6 +139,10 @@ int c2_llp_service_create(struct iw_cm_id *cm_id, int backlog)
|
||||
struct c2wr_ep_listen_create_rep *reply;
|
||||
struct c2_vq_req *vq_req;
|
||||
int err;
|
||||
struct sockaddr_in *laddr = (struct sockaddr_in *)&cm_id->local_addr;
|
||||
|
||||
if (cm_id->local_addr.ss_family != AF_INET)
|
||||
return -ENOSYS;
|
||||
|
||||
c2dev = to_c2dev(cm_id->device);
|
||||
if (c2dev == NULL)
|
||||
@@ -153,8 +161,8 @@ int c2_llp_service_create(struct iw_cm_id *cm_id, int backlog)
|
||||
c2_wr_set_id(&wr, CCWR_EP_LISTEN_CREATE);
|
||||
wr.hdr.context = (u64) (unsigned long) vq_req;
|
||||
wr.rnic_handle = c2dev->adapter_handle;
|
||||
wr.local_addr = cm_id->local_addr.sin_addr.s_addr;
|
||||
wr.local_port = cm_id->local_addr.sin_port;
|
||||
wr.local_addr = laddr->sin_addr.s_addr;
|
||||
wr.local_port = laddr->sin_port;
|
||||
wr.backlog = cpu_to_be32(backlog);
|
||||
wr.user_context = (u64) (unsigned long) cm_id;
|
||||
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador