net/smc: determine proposed ISM devices
SMCD Version 2 allows to propose up to 8 additional ISM devices offered to the peer as candidates for SMCD communication. This patch covers determination of the ISM devices to be proposed. ISM devices without PNETID are preferred, since ISM devices with PNETID are a V1 leftover and will disappear over the time. Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
e888a2e833
commit
d70bf4f7a9
@@ -410,8 +410,7 @@ int smc_clc_send_decline(struct smc_sock *smc, u32 peer_diag_info)
|
||||
}
|
||||
|
||||
/* send CLC PROPOSAL message across internal TCP socket */
|
||||
int smc_clc_send_proposal(struct smc_sock *smc, int smc_type,
|
||||
struct smc_init_info *ini)
|
||||
int smc_clc_send_proposal(struct smc_sock *smc, struct smc_init_info *ini)
|
||||
{
|
||||
struct smc_clc_msg_proposal_prefix *pclc_prfx;
|
||||
struct smc_clc_msg_proposal *pclc_base;
|
||||
@@ -449,8 +448,8 @@ int smc_clc_send_proposal(struct smc_sock *smc, int smc_type,
|
||||
sizeof(SMC_EYECATCHER));
|
||||
pclc_base->hdr.type = SMC_CLC_PROPOSAL;
|
||||
pclc_base->hdr.version = SMC_V1; /* SMC version */
|
||||
pclc_base->hdr.typev1 = smc_type;
|
||||
if (smcr_indicated(smc_type)) {
|
||||
pclc_base->hdr.typev1 = ini->smc_type_v1;
|
||||
if (smcr_indicated(ini->smc_type_v1)) {
|
||||
/* add SMC-R specifics */
|
||||
memcpy(pclc_base->lcl.id_for_peer, local_systemid,
|
||||
sizeof(local_systemid));
|
||||
@@ -459,7 +458,7 @@ int smc_clc_send_proposal(struct smc_sock *smc, int smc_type,
|
||||
ETH_ALEN);
|
||||
pclc_base->iparea_offset = htons(0);
|
||||
}
|
||||
if (smcd_indicated(smc_type)) {
|
||||
if (smcd_indicated(ini->smc_type_v1)) {
|
||||
/* add SMC-D specifics */
|
||||
plen += sizeof(*pclc_smcd);
|
||||
pclc_base->iparea_offset = htons(sizeof(*pclc_smcd));
|
||||
@@ -472,7 +471,7 @@ int smc_clc_send_proposal(struct smc_sock *smc, int smc_type,
|
||||
i = 0;
|
||||
vec[i].iov_base = pclc_base;
|
||||
vec[i++].iov_len = sizeof(*pclc_base);
|
||||
if (smcd_indicated(smc_type)) {
|
||||
if (smcd_indicated(ini->smc_type_v1)) {
|
||||
vec[i].iov_base = pclc_smcd;
|
||||
vec[i++].iov_len = sizeof(*pclc_smcd);
|
||||
}
|
||||
|
Reference in New Issue
Block a user