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

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
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -119,6 +119,8 @@ enum {
	SMC_NLA_LGR_R_CONNS_NUM,	/* u32 */
	SMC_NLA_LGR_R_V2_COMMON,	/* 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 - 1
};
+6 −5
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ struct smc_diag_linkinfo {
	__u8		ibport;			    /* RDMA device port number */
	__u8		gid[40];		    /* local GID */
	__u8		peer_gid[40];		    /* peer GID */
	__aligned_u64	net_cookie;                 /* RDMA device net namespace */
};

struct smc_diag_lgrinfo {
+3 −0
Original line number Diff line number Diff line
@@ -348,6 +348,9 @@ static int smc_nl_fill_lgr(struct smc_link_group *lgr,
		goto errattr;
	if (nla_put_u8(skb, SMC_NLA_LGR_R_VLAN_ID, lgr->vlan_id))
		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);
	smc_target[SMC_MAX_PNETID_LEN] = 0;
	if (nla_put_string(skb, SMC_NLA_LGR_R_PNETID, smc_target))
+9 −7
Original line number Diff line number Diff line
@@ -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 &&
	    (req->diag_ext & (1 << (SMC_DIAG_LGRINFO - 1))) &&
	    !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 = {
			.role = smc->conn.lgr->role,
			.lnk[0].ibport = smc->conn.lnk->ibport,
			.lnk[0].link_id = smc->conn.lnk->link_id,
			.lnk[0].ibport = link->ibport,
			.lnk[0].link_id = link->link_id,
			.lnk[0].net_cookie = net->net_cookie,
		};

		memcpy(linfo.lnk[0].ibname,
		       smc->conn.lgr->lnk[0].smcibdev->ibdev->name,
		       sizeof(smc->conn.lnk->smcibdev->ibdev->name));
		smc_gid_be16_convert(linfo.lnk[0].gid,
				     smc->conn.lnk->gid);
		smc_gid_be16_convert(linfo.lnk[0].peer_gid,
				     smc->conn.lnk->peer_gid);
		       sizeof(link->smcibdev->ibdev->name));
		smc_gid_be16_convert(linfo.lnk[0].gid, link->gid);
		smc_gid_be16_convert(linfo.lnk[0].peer_gid, link->peer_gid);

		if (nla_put(skb, SMC_DIAG_LGRINFO, sizeof(linfo), &linfo) < 0)
			goto errout;