This adds net namespace ID to diag of linkgroup, helps us to distinguish different namespaces, and net_cookie is unique in the whole system.
Unified · Split
| @@ -119,6 +119,8 @@ enum { · 118 unmodified lines | ||
| 119 | 119 | SMC_NLA_LGR_R_CONNS_NUM, /* u32 */ |
| 120 | 120 | SMC_NLA_LGR_R_V2_COMMON, /* nest */ |
| 121 | 121 | SMC_NLA_LGR_R_V2, /* nest */ |
| 122 | + SMC_NLA_LGR_R_NET_COOKIE, /* u64 */ | |
| 123 | + SMC_NLA_LGR_R_PAD, /* flag */ | |
| 122 | 124 | __SMC_NLA_LGR_R_MAX, |
| 123 | 125 | SMC_NLA_LGR_R_MAX = __SMC_NLA_LGR_R_MAX - 1 |
| 124 | 126 | }; |
| @@ -84,11 +84,12 @@ struct smc_diag_conninfo { · 83 unmodified lines | ||
| 84 | 84 | /* SMC_DIAG_LINKINFO */ |
| 85 | 85 | |
| 86 | 86 | struct smc_diag_linkinfo { |
| 87 | − __u8 link_id; /* link identifier */ | |
| 88 | − __u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */ | |
| 89 | − __u8 ibport; /* RDMA device port number */ | |
| 90 | − __u8 gid[40]; /* local GID */ | |
| 91 | − __u8 peer_gid[40]; /* peer GID */ | |
| 87 | + __u8 link_id; /* link identifier */ | |
| 88 | + __u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */ | |
| 89 | + __u8 ibport; /* RDMA device port number */ | |
| 90 | + __u8 gid[40]; /* local GID */ | |
| 91 | + __u8 peer_gid[40]; /* peer GID */ | |
| 92 | + __aligned_u64 net_cookie; /* RDMA device net namespace */ | |
| 92 | 93 | }; |
| 93 | 94 | |
| 94 | 95 | struct smc_diag_lgrinfo { |
| @@ -348,6 +348,9 @@ static int smc_nl_fill_lgr(struct smc_link_group *lgr, · 347 unmodified lines | ||
| 348 | 348 | goto errattr; |
| 349 | 349 | if (nla_put_u8(skb, SMC_NLA_LGR_R_VLAN_ID, lgr->vlan_id)) |
| 350 | 350 | goto errattr; |
| 351 | + if (nla_put_u64_64bit(skb, SMC_NLA_LGR_R_NET_COOKIE, | |
| 352 | + lgr->net->net_cookie, SMC_NLA_LGR_R_PAD)) | |
| 353 | + goto errattr; | |
| 351 | 354 | memcpy(smc_target, lgr->pnet_id, SMC_MAX_PNETID_LEN); |
| 352 | 355 | smc_target[SMC_MAX_PNETID_LEN] = 0; |
| 353 | 356 | if (nla_put_string(skb, SMC_NLA_LGR_R_PNETID, smc_target)) |
| @@ -145,19 +145,21 @@ static int __smc_diag_dump(struct sock *sk, struct sk_buff *skb, · 144 unmodified lines | ||
| 145 | 145 | if (smc->conn.lgr && !smc->conn.lgr->is_smcd && |
| 146 | 146 | (req->diag_ext & (1 << (SMC_DIAG_LGRINFO - 1))) && |
| 147 | 147 | !list_empty(&smc->conn.lgr->list)) { |
| 148 | + struct smc_link *link = smc->conn.lnk; | |
| 149 | + struct net *net = read_pnet(&link->smcibdev->ibdev->coredev.rdma_net); | |
| 150 | + | |
| 148 | 151 | struct smc_diag_lgrinfo linfo = { |
| 149 | 152 | .role = smc->conn.lgr->role, |
| 150 | − .lnk[0].ibport = smc->conn.lnk->ibport, | |
| 151 | − .lnk[0].link_id = smc->conn.lnk->link_id, | |
| 153 | + .lnk[0].ibport = link->ibport, | |
| 154 | + .lnk[0].link_id = link->link_id, | |
| 155 | + .lnk[0].net_cookie = net->net_cookie, | |
| 152 | 156 | }; |
| 153 | 157 | |
| 154 | 158 | memcpy(linfo.lnk[0].ibname, |
| 155 | 159 | smc->conn.lgr->lnk[0].smcibdev->ibdev->name, |
| 156 | − sizeof(smc->conn.lnk->smcibdev->ibdev->name)); | |
| 157 | − smc_gid_be16_convert(linfo.lnk[0].gid, | |
| 158 | − smc->conn.lnk->gid); | |
| 159 | − smc_gid_be16_convert(linfo.lnk[0].peer_gid, | |
| 160 | − smc->conn.lnk->peer_gid); | |
| 160 | + sizeof(link->smcibdev->ibdev->name)); | |
| 161 | + smc_gid_be16_convert(linfo.lnk[0].gid, link->gid); | |
| 162 | + smc_gid_be16_convert(linfo.lnk[0].peer_gid, link->peer_gid); | |
| 161 | 163 | |
| 162 | 164 | if (nla_put(skb, SMC_DIAG_LGRINFO, sizeof(linfo), &linfo) < 0) |
| 163 | 165 | goto errout; |