Commit 79d39fc5 authored by Tony Lu's avatar Tony Lu Committed by David S. Miller

net/smc: Add netlink net namespace support

This adds net namespace ID to diag of linkgroup, helps us to distinguish
different namespaces, and net_cookie is unique in the whole system.
Signed-off-by: default avatarTony Lu <tonylu@linux.alibaba.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0237a3a6
...@@ -119,6 +119,8 @@ enum { ...@@ -119,6 +119,8 @@ enum {
SMC_NLA_LGR_R_CONNS_NUM, /* u32 */ SMC_NLA_LGR_R_CONNS_NUM, /* u32 */
SMC_NLA_LGR_R_V2_COMMON, /* nest */ SMC_NLA_LGR_R_V2_COMMON, /* nest */
SMC_NLA_LGR_R_V2, /* nest */ SMC_NLA_LGR_R_V2, /* nest */
SMC_NLA_LGR_R_NET_COOKIE, /* u64 */
SMC_NLA_LGR_R_PAD, /* flag */
__SMC_NLA_LGR_R_MAX, __SMC_NLA_LGR_R_MAX,
SMC_NLA_LGR_R_MAX = __SMC_NLA_LGR_R_MAX - 1 SMC_NLA_LGR_R_MAX = __SMC_NLA_LGR_R_MAX - 1
}; };
......
...@@ -89,6 +89,7 @@ struct smc_diag_linkinfo { ...@@ -89,6 +89,7 @@ struct smc_diag_linkinfo {
__u8 ibport; /* RDMA device port number */ __u8 ibport; /* RDMA device port number */
__u8 gid[40]; /* local GID */ __u8 gid[40]; /* local GID */
__u8 peer_gid[40]; /* peer GID */ __u8 peer_gid[40]; /* peer GID */
__aligned_u64 net_cookie; /* RDMA device net namespace */
}; };
struct smc_diag_lgrinfo { struct smc_diag_lgrinfo {
......
...@@ -348,6 +348,9 @@ static int smc_nl_fill_lgr(struct smc_link_group *lgr, ...@@ -348,6 +348,9 @@ static int smc_nl_fill_lgr(struct smc_link_group *lgr,
goto errattr; goto errattr;
if (nla_put_u8(skb, SMC_NLA_LGR_R_VLAN_ID, lgr->vlan_id)) if (nla_put_u8(skb, SMC_NLA_LGR_R_VLAN_ID, lgr->vlan_id))
goto errattr; goto errattr;
if (nla_put_u64_64bit(skb, SMC_NLA_LGR_R_NET_COOKIE,
lgr->net->net_cookie, SMC_NLA_LGR_R_PAD))
goto errattr;
memcpy(smc_target, lgr->pnet_id, SMC_MAX_PNETID_LEN); memcpy(smc_target, lgr->pnet_id, SMC_MAX_PNETID_LEN);
smc_target[SMC_MAX_PNETID_LEN] = 0; smc_target[SMC_MAX_PNETID_LEN] = 0;
if (nla_put_string(skb, SMC_NLA_LGR_R_PNETID, smc_target)) 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, ...@@ -145,19 +145,21 @@ static int __smc_diag_dump(struct sock *sk, struct sk_buff *skb,
if (smc->conn.lgr && !smc->conn.lgr->is_smcd && if (smc->conn.lgr && !smc->conn.lgr->is_smcd &&
(req->diag_ext & (1 << (SMC_DIAG_LGRINFO - 1))) && (req->diag_ext & (1 << (SMC_DIAG_LGRINFO - 1))) &&
!list_empty(&smc->conn.lgr->list)) { !list_empty(&smc->conn.lgr->list)) {
struct smc_link *link = smc->conn.lnk;
struct net *net = read_pnet(&link->smcibdev->ibdev->coredev.rdma_net);
struct smc_diag_lgrinfo linfo = { struct smc_diag_lgrinfo linfo = {
.role = smc->conn.lgr->role, .role = smc->conn.lgr->role,
.lnk[0].ibport = smc->conn.lnk->ibport, .lnk[0].ibport = link->ibport,
.lnk[0].link_id = smc->conn.lnk->link_id, .lnk[0].link_id = link->link_id,
.lnk[0].net_cookie = net->net_cookie,
}; };
memcpy(linfo.lnk[0].ibname, memcpy(linfo.lnk[0].ibname,
smc->conn.lgr->lnk[0].smcibdev->ibdev->name, smc->conn.lgr->lnk[0].smcibdev->ibdev->name,
sizeof(smc->conn.lnk->smcibdev->ibdev->name)); sizeof(link->smcibdev->ibdev->name));
smc_gid_be16_convert(linfo.lnk[0].gid, smc_gid_be16_convert(linfo.lnk[0].gid, link->gid);
smc->conn.lnk->gid); smc_gid_be16_convert(linfo.lnk[0].peer_gid, link->peer_gid);
smc_gid_be16_convert(linfo.lnk[0].peer_gid,
smc->conn.lnk->peer_gid);
if (nla_put(skb, SMC_DIAG_LGRINFO, sizeof(linfo), &linfo) < 0) if (nla_put(skb, SMC_DIAG_LGRINFO, sizeof(linfo), &linfo) < 0)
goto errout; goto errout;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment